/* Combat motion stays inside its board; touch and keyboard share the same actions. */
:is(#sound-btn,#music-btn){white-space:nowrap;border:1px solid #b8cbee;padding:6px 10px;min-height:44px;color:#2458f5}:is(#sound-btn,#music-btn)[aria-pressed=false]{color:#626c73;background:#edf0f4}.arena{overflow:hidden;scroll-margin-top:16px}.fighter,.battle-stats{position:relative}.fighter{transform-origin:center;isolation:isolate}.fighter:after{content:'';position:absolute;inset:-8px;pointer-events:none;border:2px solid transparent;opacity:0}.tactics{perspective:900px}.tactic{overflow:hidden;border:2px solid #b8cbee!important;background:linear-gradient(155deg,#fff 65%,#e8efff)!important;box-shadow:0 5px 0 #9db5e6,0 10px 20px #172b4d12!important;transform-origin:center bottom;animation:card-deal .32s ease-out both;transition:transform .15s,box-shadow .15s}.tactic:nth-child(2){animation-delay:60ms}.tactic:nth-child(3){animation-delay:120ms}.tactic:before{content:'';position:absolute;width:75px;height:180%;left:-140px;top:-40%;background:#ffffffb0;transform:rotate(24deg);pointer-events:none}.tactic.burst{border-color:#8363dd!important}.tactic.guard{border-color:#38a999!important}.tactic:disabled{animation:none;box-shadow:0 2px 0 #bbc6dc!important}.tactic:active:not(:disabled){transform:translateY(-5px) rotate(-2deg)}.selected-tactic{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px;padding:12px 16px;margin-bottom:24px;border:2px solid #7da2f8;box-shadow:3px 3px 0 #dce6ff;background:#eef4ff}.selected-tactic>span{font-size:24px;color:#2458f5}.selected-tactic strong{font-size:17px}.selected-tactic small{color:#53637c}.fx-attack .portrait{animation:card-strike .34s ease-in-out}.fx-hit{animation:card-hit .36s ease-out}.fx-hit:after{border-color:#ff8c98;opacity:1;animation:impact-ring .42s ease-out}.fx-heal:after{border-color:#56e6c0;opacity:1;animation:heal-ring .55s ease-out}.fx-heal .portrait{box-shadow:0 0 0 3px #58e6bd,0 0 26px #58e6bd66}.fx-fail .portrait{animation:card-miss .35s ease-out;filter:saturate(.55)}.fx-energy{animation:energy-pulse .35s ease-out}.fx-win{color:#087f66}.fx-loss{color:#a94160}.combat-number{pointer-events:none;position:absolute;right:8px;top:8px;z-index:5;font-size:clamp(24px,3vw,38px);font-weight:850;line-height:1;padding:8px 12px;background:#10233e;color:#ffadb4;border:2px solid currentColor;box-shadow:3px 3px 0 #10233e88;animation:damage-rise .65s ease-out both}.combat-number.heal{color:#76ffd4;right:auto;left:8px;top:-8px}.combat-number.fail{font-size:20px;color:#ffe0a6}.combat-number.energy,.combat-number.win,.combat-number.loss{top:-18px;font-size:19px;background:white;color:#2458f5}.combat-number.win{color:#087f66}.combat-number.loss{color:#a94160}.fighter progress::-webkit-progress-value{transition:width .25s ease-out}.fighter progress::-moz-progress-bar{transition:width .25s ease-out}
@media(hover:hover) and (pointer:fine){.tactic:hover:not(:disabled){transform:translateY(-8px) rotate(-1deg);box-shadow:0 9px 0 #9db5e6,0 15px 25px #172b4d20!important}.tactic:hover:before{left:140%;transition:left .5s}}
@keyframes card-deal{from{opacity:0;transform:translateY(24px) rotate(4deg) scale(.95)}to{opacity:1;transform:none}}
@keyframes card-strike{0%,100%{transform:none}35%{transform:translateX(-8px) rotate(-4deg)}65%{transform:translateX(18px) rotate(5deg) scale(1.04)}}
@keyframes card-hit{0%,100%{transform:none}20%{transform:translateX(-6px) rotate(-1deg)}45%{transform:translateX(7px) rotate(1deg)}70%{transform:translateX(-4px)}}
@keyframes card-miss{0%,100%{transform:none}25%{transform:rotate(-5deg)}65%{transform:rotate(5deg)}}
@keyframes impact-ring{from{opacity:.9;transform:scale(.98)}to{opacity:0;transform:scale(1.035)}}
@keyframes heal-ring{from{opacity:.9;transform:scale(.98)}to{opacity:0;transform:scale(1.025)}}
@keyframes damage-rise{0%{opacity:0;transform:translateY(10px) scale(.75)}20%{opacity:1;transform:translateY(0) scale(1.08)}75%{opacity:1}100%{opacity:0;transform:translateY(-28px)}}
@keyframes energy-pulse{50%{color:#2458f5;background:#dceaff}}
@media(max-width:760px){.tactics{grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;align-items:stretch}.tactic{padding:12px 8px;text-align:left;min-width:0}.tactic-top{display:flex;flex-direction:column;align-items:flex-start;gap:8px;font-size:10px}.tactic strong{font-size:17px;line-height:1.3;display:block;word-break:keep-all}.tactic p{font-size:12px;line-height:1.55;word-break:keep-all}.tactic small{font-size:10px;line-height:1.5}.selected-tactic small{flex-basis:100%;font-size:12px}.combat-number{font-size:25px;padding:7px}.combat-number.fail{font-size:17px}.combat-number.energy,.combat-number.win,.combat-number.loss{font-size:16px}.arena{padding:20px 16px}.fx-attack .portrait{animation-name:card-strike-mobile}}
@keyframes card-strike-mobile{0%,100%{transform:none}35%{transform:translateY(-6px) rotate(-3deg)}65%{transform:translateY(12px) rotate(4deg)}}
@media(prefers-reduced-motion:reduce){.tactic,.fighter,.fighter *,.fighter:after,.combat-number,.battle-stats{animation:none!important;transition:none!important;transform:none!important}.tactic:hover:not(:disabled){transform:none}.combat-number{opacity:1}.tactic:before{display:none}.fx-hit:after,.fx-heal:after{opacity:.65}}

.tactic.card-committed{opacity:1!important;border-color:#2458f5!important}
.namecard-page{max-width:1120px;margin:50px auto;padding:0 24px}.namecard-page h1{font-size:clamp(36px,5vw,64px)}.namecard-layout{display:grid;grid-template-columns:1fr 1fr;gap:48px;margin:32px 0}.namecard-conditions{padding:20px;background:#edf3ff;border:2px solid #2458f5;margin-bottom:24px}.namecard-page fieldset{border:0;padding:0;margin:0;min-width:0}.namecard-page label{display:block;font-weight:750;margin:20px 0 8px}.namecard-page input:not([type=checkbox]):not([type=radio]){width:100%;min-width:0;min-height:48px;padding:12px;border:1px solid #a8b7d4;background:white;font:inherit}.namecard-page input:focus-visible{outline:3px solid #2458f5;outline-offset:3px}.namecard-page .card-consent{display:flex;align-items:flex-start;gap:12px;font-size:15px;line-height:1.6;cursor:pointer}.card-consent input{width:24px;height:24px;flex-shrink:0;margin-top:2px}.namecard-page .lab-small{margin:10px 0;color:#526174}.namecard-preview{margin:0;min-width:0}.namecard-preview>img{width:100%;height:auto;display:block;border-radius:20px;box-shadow:0 8px 30px #17367615}.namecard-preview figcaption{font-size:14px;margin:16px 0;color:#526174}.namecard-preview a{display:block;text-align:center;padding:14px;min-height:48px;text-decoration:none}#photo-preview{width:120px;height:120px;object-fit:contain;border:1px solid #ccd5e4;margin-top:16px}#generate-card{width:100%;margin-top:12px}#card-status{margin:20px 0;min-height:28px;overflow-wrap:anywhere}.card-reward{padding:24px;border:2px solid #2458f5;background:#fff;margin-top:24px}.card-reward p{margin:10px 0 16px}@media(max-width:700px){.namecard-layout{grid-template-columns:1fr;gap:30px}.namecard-page{margin:28px auto;padding:0 16px}}

.namecard-page .card-mode{margin:24px 0;padding:16px;border:1px solid #a8b7d4}.card-mode legend{font-weight:750}.namecard-page .card-mode label{display:flex;gap:10px;align-items:center;margin:0;min-height:44px;font-size:15px}.card-mode input{width:22px;height:22px}.namecard-page select,.namecard-page textarea{width:100%;min-width:0;min-height:48px;font:inherit;padding:12px;border:1px solid #a8b7d4;background:#fff}.namecard-page textarea{resize:vertical}.namecard-page :is(select,textarea):focus-visible,#photo-drop:focus-visible{outline:3px solid #2458f5;outline-offset:3px}.card-examples{display:flex;gap:8px;flex-wrap:wrap}.card-examples button{font-size:14px;min-height:44px;padding:8px 12px}#photo-drop{padding:18px;border:2px dashed #8da6db;background:#f4f8ff}#photo-drop.dragging{border-color:#2458f5;background:#e1ebff}#photo-drop>strong{display:block;margin-bottom:12px}#paste-photo{margin-top:12px;background:white}#photo-name{overflow-wrap:anywhere}
