/* r97 gameplay feel: anticipatory clarity and differentiated impact.
   All motion is presentation-only and follows authoritative rendered state. */

.selection-queen-track{--preview-start:50%;--preview-end:50%}
.queen-preview-path{
  position:absolute;z-index:5;top:50%;left:var(--preview-left);
  width:var(--preview-width);height:calc(var(--u)*5);
  translate:0 -50%;border-radius:999px;opacity:0;pointer-events:none;
  background:linear-gradient(90deg,#fff2ad55,#fff1bddd,#d36cffcc);
  box-shadow:0 0 calc(var(--u)*9) #d770f199;
  transform-origin:left center;transition:opacity .12s ease;
}
.selection-queen-track.preview-repel .queen-preview-path{background:linear-gradient(90deg,#8d58daaa,#8de5ffdd,#ffffff77);box-shadow:0 0 calc(var(--u)*9) #72bce8aa}
.selection-queen-track.preview-sever .queen-preview-path{background:repeating-linear-gradient(115deg,#ffdf7f 0 calc(var(--u)*4),#e75b74 calc(var(--u)*4) calc(var(--u)*6));box-shadow:0 0 calc(var(--u)*8) #f06b7799}
.selection-queen-track.has-card-preview .queen-preview-path{opacity:1;animation:forecast-flow .72s linear infinite}
.queen-preview-marker{
  position:absolute;z-index:8;left:var(--preview-end);top:50%;width:calc(var(--u)*38);height:calc(var(--u)*54);
  display:grid;place-items:center;translate:-50% -50%;border:1px dashed #fff0b9;border-radius:3px;
  background:linear-gradient(145deg,#2d173ccc,#0d0912cc);color:#ffe59a;font:calc(var(--u)*22)/1 Georgia,serif;
  box-shadow:0 0 0 2px #140b1dcc,0 0 calc(var(--u)*14) #c95ce9aa;opacity:.78;pointer-events:none;
  transition:left .18s cubic-bezier(.2,.72,.2,1),opacity .12s ease;
}
.queen-preview-marker.hidden{display:none}
.queen-preview-marker::after{content:"PREVIEW";position:absolute;left:50%;top:100%;translate:-50% calc(var(--u)*3);font:800 calc(var(--u)*5)/1 Inter,sans-serif;letter-spacing:.15em;color:#f4d989;text-shadow:0 1px 3px #000}

.card-forecast{
  position:absolute;z-index:20;right:calc(var(--u)*12);bottom:calc(var(--u)*5);min-width:calc(var(--u)*250);max-width:42%;
  display:grid;grid-template-columns:auto 1fr;column-gap:calc(var(--u)*8);align-items:center;
  padding:calc(var(--u)*5) calc(var(--u)*10);border:1px solid #b78a48;border-radius:calc(var(--u)*3);
  background:linear-gradient(105deg,#120a18f2,#24102df2);box-shadow:0 calc(var(--u)*5) calc(var(--u)*14) #000a,0 0 calc(var(--u)*12) #a747c642;
  color:#f7e7c1;pointer-events:none;
}
.card-forecast.hidden{display:none}
.card-forecast-kicker{grid-row:1/4;color:#d06de8;font:800 max(11px,calc(var(--u)*6))/1 Inter,sans-serif;letter-spacing:.1em;white-space:nowrap}
.card-forecast strong{font:700 max(14px,calc(var(--u)*9))/1.15 Georgia,serif;color:#ffe7a2;white-space:nowrap}
.card-forecast small{font:500 max(11px,calc(var(--u)*6.5))/1.25 Inter,sans-serif;color:#d9cbda;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card-forecast-caveat{color:#f0d7a4!important;font-weight:700!important}
.card-forecast[data-tone="danger"]{border-color:#d96c72;box-shadow:0 calc(var(--u)*5) calc(var(--u)*14) #000a,0 0 calc(var(--u)*14) #d747684d}
.card-forecast[data-tone="safe"]{border-color:#e8c466}

.selection-hand .card.preview-active{z-index:18!important;filter:brightness(1.09) saturate(1.08)!important}
.selection-hand .card.preview-active::after{content:"";position:absolute;inset:-3px;border:1px solid #f2d37e;border-radius:inherit;box-shadow:0 0 14px #bf5ddb88;pointer-events:none;animation:armed-card-ring .9s ease-in-out infinite alternate}
.selection-hand .card.selected-in-hand .selection-order-marker{box-shadow:0 0 0 2px #16091d,0 0 12px #e5b958aa}

.gameplay-impact-word{
  position:absolute;z-index:70;left:50%;top:50%;translate:-50% -50%;pointer-events:none;
  color:#ffe6a0;font:800 clamp(18px,2vw,34px)/1 Georgia,serif;letter-spacing:.12em;text-shadow:0 3px 8px #000,0 0 20px currentColor;
  animation:gameplay-impact-in .78s cubic-bezier(.16,.82,.22,1) both;
}
.gameplay-impact-word[data-effect="repel"]{color:#9ee7ff}
.gameplay-impact-word[data-effect="sever"],.gameplay-impact-word[data-effect="destroy"]{color:#ff9b91}
.gameplay-impact-word[data-effect="guard"]{color:#f9e9ad}
.gameplay-impact-word[data-effect="invert"]{color:#f0b8ff}
.gameplay-impact-word[data-effect="summons"]{color:#ffe89a;font-size:clamp(22px,2.3vw,39px)}
.gameplay-impact-word[data-effect="double"]{color:#e6bbff;text-shadow:0 3px 8px #000,-3px 0 14px #8e45cf,3px 0 14px #e4bf62}
.gameplay-impact-word[data-effect="waiting"]{color:#f4ca69}
.gameplay-impact-word[data-effect="seat"]{font-size:clamp(23px,2.5vw,42px);color:#fff0a8}

.selection-path-panel[data-motion-effect="beckon"] #solo-queen-marker{transition-timing-function:cubic-bezier(.14,.78,.2,1)!important}
.selection-path-panel[data-motion-effect="repel"] #solo-queen-marker{transition-duration:.48s!important;transition-timing-function:cubic-bezier(.12,.62,.18,1)!important}
.selection-path-panel[data-motion-effect="center"] #solo-queen-marker{transition-duration:.78s!important;transition-timing-function:cubic-bezier(.22,.72,.18,1)!important}
.selection-path-panel[data-motion-effect="destroy"]{animation:royal-impact .46s ease-out both}
.selection-path-panel[data-motion-effect="guard"]{animation:guard-impact .54s ease-out both}
.selection-path-panel[data-motion-effect="summons"]{animation:summons-impact .72s ease-out both}
.selection-path-panel[data-motion-effect="double"]{animation:double-impact .58s ease-out both}
.result-card-shell.active .result-card-front{animation:card-commit-strike .46s cubic-bezier(.15,.78,.18,1) both}
.result-card-shell.active[data-side="human"]{z-index:12}.result-card-shell.active[data-side="ace"]{z-index:12}

@keyframes forecast-flow{from{background-position:0 0}to{background-position:calc(var(--u)*22) 0}}
@keyframes armed-card-ring{from{opacity:.52;scale:.99}to{opacity:1;scale:1.012}}
@keyframes gameplay-impact-in{0%{opacity:0;scale:.72;filter:blur(4px)}30%,68%{opacity:1;scale:1;filter:none}100%{opacity:0;scale:1.06;translate:-50% -68%}}
@keyframes royal-impact{0%,100%{translate:0 0;filter:none}28%{translate:calc(var(--u)*-2) 0;filter:brightness(1.22)}52%{translate:calc(var(--u)*2) 0}72%{translate:calc(var(--u)*-1) 0}}
@keyframes guard-impact{0%,100%{filter:none}44%{filter:brightness(1.32) saturate(1.1);box-shadow:inset 0 0 calc(var(--u)*22) #eed7853d}}
@keyframes summons-impact{0%,100%{filter:none}38%{filter:brightness(1.42) saturate(1.15);box-shadow:inset 0 0 calc(var(--u)*34) #f0c65e4d}}
@keyframes double-impact{0%,100%{filter:none}28%{filter:brightness(1.18);translate:calc(var(--u)*-1) 0}48%{filter:brightness(1.38);translate:calc(var(--u)*1) 0}68%{translate:0 0}}
@keyframes card-commit-strike{0%{translate:0 calc(var(--u)*12);scale:.92;filter:brightness(.8)}55%{translate:0 calc(var(--u)*-2);scale:1.035;filter:brightness(1.22)}100%{translate:0 0;scale:1;filter:none}}

.selection-waiting-slot.waiting-critical{border-color:#e2b356;box-shadow:inset 0 0 0 2px #24152c,0 0 calc(var(--u)*12) #d28a3f66!important}
.selection-waiting-slot.waiting-critical.opponent-threat{animation:waiting-danger 1.65s ease-in-out infinite}
.selection-waiting-slot.waiting-ready{border-color:#ffe294;box-shadow:inset 0 0 0 2px #2a1832,0 0 calc(var(--u)*17) #efbf5c88!important}
.selection-waiting-slot.waiting-ready em{color:#fff0a9;font-weight:800;letter-spacing:.04em}
@keyframes waiting-danger{0%,100%{filter:none}50%{filter:brightness(1.13);box-shadow:inset 0 0 0 2px #351b36,0 0 calc(var(--u)*18) #e15b5b70}}

@media (prefers-reduced-motion:reduce){
  .queen-preview-path,.selection-hand .card.preview-active::after,.gameplay-impact-word{animation:none!important}
  .selection-waiting-slot.waiting-critical.opponent-threat{animation:none!important}
  .queen-preview-marker,.selection-path-panel #solo-queen-marker,.result-card-shell.active .result-card-front{transition:none!important;animation:none!important}
}
body.reduce-motion .queen-preview-path,body.reduce-motion .selection-hand .card.preview-active::after,body.reduce-motion .gameplay-impact-word{animation:none!important}
body.reduce-motion .selection-waiting-slot.waiting-critical.opponent-threat{animation:none!important}
body.reduce-motion .queen-preview-marker,body.reduce-motion .selection-path-panel #solo-queen-marker,body.reduce-motion .result-card-shell.active .result-card-front{transition:none!important;animation:none!important}

@media (hover:none),(pointer:coarse){
  .card-forecast{max-width:70%}
}
