valtech-components 4.0.441 → 4.0.442

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/esm2022/lib/components/organisms/mini-games/bubble-blitz-game.component.mjs +18 -9
  2. package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +109 -16
  3. package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +23 -541
  4. package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +1385 -0
  5. package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +18 -9
  6. package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +149 -89
  7. package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +18 -9
  8. package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
  9. package/esm2022/lib/directives/light-ripple.directive.mjs +57 -0
  10. package/esm2022/lib/version.mjs +2 -2
  11. package/esm2022/mini-games/public-api.mjs +34 -2
  12. package/esm2022/public-api.mjs +3 -1
  13. package/fesm2022/valtech-components-mini-games.mjs +34 -2
  14. package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
  15. package/fesm2022/valtech-components.mjs +1767 -808
  16. package/fesm2022/valtech-components.mjs.map +1 -1
  17. package/lib/components/organisms/mini-games/bubble-blitz-game.component.d.ts +2 -0
  18. package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +4 -36
  19. package/lib/components/organisms/mini-games/christianity-game.component.d.ts +101 -0
  20. package/lib/components/organisms/mini-games/memory-game.component.d.ts +2 -0
  21. package/lib/components/organisms/mini-games/simon-game.component.d.ts +2 -0
  22. package/lib/components/organisms/mini-games/types.d.ts +65 -57
  23. package/lib/directives/light-ripple.directive.d.ts +8 -0
  24. package/lib/version.d.ts +1 -1
  25. package/mini-games/public-api.d.ts +4 -0
  26. package/package.json +2 -1
  27. package/public-api.d.ts +2 -0
  28. package/src/lib/services/firebase/scripts/generate-sw-config.js +0 -0
  29. package/esm2022/lib/components/organisms/mini-games/chessimals-challenge-progress.service.mjs +0 -145
  30. package/lib/components/organisms/mini-games/chessimals-challenge-progress.service.d.ts +0 -30
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, InjectionToken, makeEnvironmentProviders, APP_INITIALIZER, ErrorHandler, Injectable, DestroyRef, Inject, signal, computed, PLATFORM_ID, isDevMode, Optional, runInInjectionContext, effect, Pipe, TemplateRef, ViewContainerRef, input, Directive, EventEmitter, Component, Input, Output, ChangeDetectionStrategy, HostBinding, HostListener, SecurityContext, NgZone, ViewChild, ElementRef, ChangeDetectorRef, output, ContentChild, model, ViewEncapsulation, untracked, viewChild, Injector, isSignal } from '@angular/core';
2
+ import { inject, InjectionToken, makeEnvironmentProviders, APP_INITIALIZER, ErrorHandler, Injectable, DestroyRef, Inject, signal, computed, PLATFORM_ID, isDevMode, Optional, runInInjectionContext, effect, Pipe, TemplateRef, ViewContainerRef, input, Directive, ElementRef, Renderer2, HostListener, EventEmitter, Component, Input, Output, ChangeDetectionStrategy, HostBinding, SecurityContext, NgZone, ViewChild, ChangeDetectorRef, output, ContentChild, model, ViewEncapsulation, untracked, viewChild, Injector, isSignal } from '@angular/core';
3
3
  import { BehaviorSubject, throwError, Subject, map, distinctUntilChanged, filter as filter$1, take as take$1, firstValueFrom, of, from, EMPTY, Observable, interval, defer, timer, merge, concat, debounceTime, switchMap as switchMap$1, catchError as catchError$1, takeUntil, isObservable, forkJoin, race, tap as tap$1, Subscription, shareReplay as shareReplay$1 } from 'rxjs';
4
4
  import { catchError, switchMap, finalize, filter, take, timeout, map as map$1, tap, shareReplay, distinctUntilChanged as distinctUntilChanged$1, retry, debounceTime as debounceTime$1, takeUntil as takeUntil$1 } from 'rxjs/operators';
5
5
  import * as i1$3 from '@angular/common/http';
@@ -49,6 +49,7 @@ import { Capacitor } from '@capacitor/core';
49
49
  import { ImageCropperComponent } from 'ngx-image-cropper';
50
50
  import Compressor from 'compressorjs';
51
51
  import { Calendar } from 'vanilla-calendar-pro';
52
+ import { CdkDrag, CdkDropList } from '@angular/cdk/drag-drop';
52
53
  import 'prismjs/components/prism-scss';
53
54
  import 'prismjs/components/prism-json';
54
55
  import { BrowserMultiFormatReader } from '@zxing/browser';
@@ -58,7 +59,7 @@ import fixWebmDuration from 'fix-webm-duration';
58
59
  * Current version of valtech-components.
59
60
  * This is automatically updated during the publish process.
60
61
  */
61
- const VERSION = '4.0.441';
62
+ const VERSION = '4.0.442';
62
63
 
63
64
  // Control de estado de refresco (singleton a nivel de módulo)
64
65
  let isRefreshing = false;
@@ -10115,6 +10116,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
10115
10116
  }]
10116
10117
  }], ctorParameters: () => [] });
10117
10118
 
10119
+ class LightRippleDirective {
10120
+ constructor() {
10121
+ this.host = inject(ElementRef);
10122
+ this.renderer = inject(Renderer2);
10123
+ }
10124
+ createRipple(event) {
10125
+ const element = this.host.nativeElement;
10126
+ const rect = element.getBoundingClientRect();
10127
+ const size = Math.max(rect.width, rect.height) * 1.55;
10128
+ const ripple = this.renderer.createElement('span');
10129
+ const x = event.clientX - rect.left - size / 2;
10130
+ const y = event.clientY - rect.top - size / 2;
10131
+ if (getComputedStyle(element).position === 'static') {
10132
+ this.renderer.setStyle(element, 'position', 'relative');
10133
+ }
10134
+ this.renderer.setStyle(element, 'overflow', 'hidden');
10135
+ this.renderer.setStyle(element, 'isolation', 'isolate');
10136
+ this.renderer.setStyle(element, 'touch-action', 'manipulation');
10137
+ this.renderer.setStyle(ripple, 'position', 'absolute');
10138
+ this.renderer.setStyle(ripple, 'left', `${x}px`);
10139
+ this.renderer.setStyle(ripple, 'top', `${y}px`);
10140
+ this.renderer.setStyle(ripple, 'width', `${size}px`);
10141
+ this.renderer.setStyle(ripple, 'height', `${size}px`);
10142
+ this.renderer.setStyle(ripple, 'border-radius', '999px');
10143
+ this.renderer.setStyle(ripple, 'pointer-events', 'none');
10144
+ this.renderer.setStyle(ripple, 'z-index', '1');
10145
+ this.renderer.setStyle(ripple, 'background', 'radial-gradient(circle, rgba(255,255,255,0.98) 0 0.16rem, rgba(191,219,254,0.9) 0.18rem 0.34rem, rgba(96,165,250,0.46) 0.36rem 23%, rgba(96,165,250,0.18) 38%, transparent 70%)');
10146
+ this.renderer.setStyle(ripple, 'box-shadow', '0 0 0.75rem rgba(255,255,255,0.85), 0 0 1.8rem rgba(96,165,250,0.52)');
10147
+ this.renderer.appendChild(element, ripple);
10148
+ ripple
10149
+ .animate([
10150
+ { opacity: 0.88, transform: 'scale(0.08)' },
10151
+ { opacity: 0.48, transform: 'scale(0.48)' },
10152
+ { opacity: 0, transform: 'scale(1)' },
10153
+ ], { duration: 680, easing: 'cubic-bezier(0.16, 0.84, 0.24, 1)' })
10154
+ .finished.finally(() => {
10155
+ if (ripple.parentNode === element) {
10156
+ this.renderer.removeChild(element, ripple);
10157
+ }
10158
+ });
10159
+ }
10160
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LightRippleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
10161
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: LightRippleDirective, isStandalone: true, selector: "[valLightRipple]", host: { listeners: { "pointerdown": "createRipple($event)" } }, ngImport: i0 }); }
10162
+ }
10163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LightRippleDirective, decorators: [{
10164
+ type: Directive,
10165
+ args: [{
10166
+ selector: '[valLightRipple]',
10167
+ standalone: true,
10168
+ }]
10169
+ }], propDecorators: { createRipple: [{
10170
+ type: HostListener,
10171
+ args: ['pointerdown', ['$event']]
10172
+ }] } });
10173
+
10118
10174
  /**
10119
10175
  * Presets de botón por defecto provistos por la librería.
10120
10176
  *
@@ -61029,18 +61085,66 @@ const CHESSIMALS_BOT_PROFILES = [
61029
61085
  labelKey: 'chessimalsBotSentinel',
61030
61086
  descriptionKey: 'chessimalsBotSentinelBody',
61031
61087
  },
61088
+ {
61089
+ id: 'oracle',
61090
+ difficulty: 'hard',
61091
+ avatar: '🔮',
61092
+ labelKey: 'chessimalsBotOracle',
61093
+ descriptionKey: 'chessimalsBotOracleBody',
61094
+ },
61095
+ {
61096
+ id: 'ambusher',
61097
+ difficulty: 'hard',
61098
+ avatar: '🪤',
61099
+ labelKey: 'chessimalsBotAmbusher',
61100
+ descriptionKey: 'chessimalsBotAmbusherBody',
61101
+ },
61102
+ {
61103
+ id: 'locksmith',
61104
+ difficulty: 'hard',
61105
+ avatar: '🔐',
61106
+ labelKey: 'chessimalsBotLocksmith',
61107
+ descriptionKey: 'chessimalsBotLocksmithBody',
61108
+ },
61109
+ {
61110
+ id: 'storm',
61111
+ difficulty: 'hard',
61112
+ avatar: '🌩️',
61113
+ labelKey: 'chessimalsBotStorm',
61114
+ descriptionKey: 'chessimalsBotStormBody',
61115
+ },
61116
+ {
61117
+ id: 'matriarch',
61118
+ difficulty: 'hard',
61119
+ avatar: '👑',
61120
+ labelKey: 'chessimalsBotMatriarch',
61121
+ descriptionKey: 'chessimalsBotMatriarchBody',
61122
+ },
61123
+ {
61124
+ id: 'endgame',
61125
+ difficulty: 'hard',
61126
+ avatar: '⌛',
61127
+ labelKey: 'chessimalsBotEndgame',
61128
+ descriptionKey: 'chessimalsBotEndgameBody',
61129
+ },
61032
61130
  ];
61033
61131
  const BOT_STYLES = {
61034
- explorer: { advancement: 1.05, capture: 0.82, safety: 0.62, power: 0.8, center: 1.15, unlock: 1.05, reply: 0.7, randomness: 260, spread: 0.68 },
61035
- impulsive: { advancement: 0.9, capture: 1.45, safety: 0.48, power: 1.15, center: 0.8, unlock: 0.9, reply: 0.55, randomness: 290, spread: 0.62 },
61036
- runner: { advancement: 1.55, capture: 0.78, safety: 0.5, power: 0.95, center: 0.7, unlock: 1.1, reply: 0.55, randomness: 250, spread: 0.6 },
61037
- hunter: { advancement: 0.95, capture: 1.45, safety: 0.9, power: 1.05, center: 0.95, unlock: 0.95, reply: 1, randomness: 90, spread: 0.3 },
61038
- guardian: { advancement: 0.88, capture: 1, safety: 1.45, power: 0.85, center: 1.05, unlock: 1, reply: 1.15, randomness: 70, spread: 0.26 },
61039
- jumper: { advancement: 1.12, capture: 1, safety: 0.92, power: 1.42, center: 1.18, unlock: 1.08, reply: 0.95, randomness: 95, spread: 0.32 },
61040
- strategist: { advancement: 1.05, capture: 1.08, safety: 1.22, power: 1.08, center: 1.16, unlock: 1.1, reply: 1.25, randomness: 22, spread: 0.14 },
61041
- predator: { advancement: 0.98, capture: 1.68, safety: 1.02, power: 1.34, center: 1, unlock: 1, reply: 1.12, randomness: 28, spread: 0.16 },
61042
- sprinter: { advancement: 1.72, capture: 0.9, safety: 0.95, power: 1.08, center: 0.86, unlock: 1.18, reply: 1, randomness: 26, spread: 0.15 },
61043
- sentinel: { advancement: 0.9, capture: 1.12, safety: 1.72, power: 0.95, center: 1.28, unlock: 1.05, reply: 1.38, randomness: 18, spread: 0.12 },
61132
+ explorer: { advancement: 1.05, capture: 0.82, safety: 0.62, power: 0.8, center: 1.15, unlock: 1.05, reply: 0.7, randomness: 260, spread: 0.68, mobility: 0.75, trap: 0.5, endgame: 0.55 },
61133
+ impulsive: { advancement: 0.9, capture: 1.45, safety: 0.48, power: 1.15, center: 0.8, unlock: 0.9, reply: 0.55, randomness: 290, spread: 0.62, mobility: 0.85, trap: 0.62, endgame: 0.5 },
61134
+ runner: { advancement: 1.55, capture: 0.78, safety: 0.5, power: 0.95, center: 0.7, unlock: 1.1, reply: 0.55, randomness: 250, spread: 0.6, mobility: 0.72, trap: 0.45, endgame: 1.1 },
61135
+ hunter: { advancement: 0.95, capture: 1.45, safety: 0.9, power: 1.05, center: 0.95, unlock: 0.95, reply: 1, randomness: 90, spread: 0.3, mobility: 0.95, trap: 0.82, endgame: 0.76 },
61136
+ guardian: { advancement: 0.88, capture: 1, safety: 1.45, power: 0.85, center: 1.05, unlock: 1, reply: 1.15, randomness: 70, spread: 0.26, mobility: 0.82, trap: 0.72, endgame: 0.72 },
61137
+ jumper: { advancement: 1.12, capture: 1, safety: 0.92, power: 1.42, center: 1.18, unlock: 1.08, reply: 0.95, randomness: 95, spread: 0.32, mobility: 1.15, trap: 0.9, endgame: 0.82 },
61138
+ strategist: { advancement: 1.05, capture: 1.08, safety: 1.22, power: 1.08, center: 1.16, unlock: 1.1, reply: 1.25, randomness: 22, spread: 0.14, mobility: 1.08, trap: 1.06, endgame: 1 },
61139
+ predator: { advancement: 0.98, capture: 1.68, safety: 1.02, power: 1.34, center: 1, unlock: 1, reply: 1.12, randomness: 28, spread: 0.16, mobility: 1.02, trap: 1.18, endgame: 0.82 },
61140
+ sprinter: { advancement: 1.72, capture: 0.9, safety: 0.95, power: 1.08, center: 0.86, unlock: 1.18, reply: 1, randomness: 26, spread: 0.15, mobility: 0.95, trap: 0.78, endgame: 1.42 },
61141
+ sentinel: { advancement: 0.9, capture: 1.12, safety: 1.72, power: 0.95, center: 1.28, unlock: 1.05, reply: 1.38, randomness: 18, spread: 0.12, mobility: 0.86, trap: 1.04, endgame: 0.84 },
61142
+ oracle: { advancement: 1, capture: 1.12, safety: 1.42, power: 1.1, center: 1.18, unlock: 1.08, reply: 1.8, randomness: 8, spread: 0.08, mobility: 1.06, trap: 1.22, endgame: 1.08 },
61143
+ ambusher: { advancement: 0.9, capture: 1.48, safety: 1.08, power: 1.46, center: 1.05, unlock: 1.02, reply: 1.32, randomness: 14, spread: 0.1, mobility: 1.12, trap: 1.72, endgame: 0.92 },
61144
+ locksmith: { advancement: 0.88, capture: 1.04, safety: 1.55, power: 1.02, center: 1.48, unlock: 1.12, reply: 1.52, randomness: 12, spread: 0.1, mobility: 1.58, trap: 1.24, endgame: 0.86 },
61145
+ storm: { advancement: 1.18, capture: 1.38, safety: 0.98, power: 1.62, center: 1.08, unlock: 1.18, reply: 1.22, randomness: 18, spread: 0.13, mobility: 1.36, trap: 1.28, endgame: 1.02 },
61146
+ matriarch: { advancement: 0.96, capture: 1.18, safety: 1.64, power: 1.18, center: 1.22, unlock: 1.08, reply: 1.66, randomness: 10, spread: 0.08, mobility: 1.02, trap: 1.36, endgame: 1 },
61147
+ endgame: { advancement: 1.46, capture: 1, safety: 1.28, power: 1.04, center: 0.94, unlock: 1.08, reply: 1.44, randomness: 10, spread: 0.09, mobility: 0.98, trap: 1.02, endgame: 1.86 },
61044
61148
  };
61045
61149
  const DEFAULT_BOT_PROFILE_BY_DIFFICULTY = {
61046
61150
  easy: 'explorer',
@@ -61126,8 +61230,17 @@ function chooseChessimalsBotMove(state, difficulty = 'normal', profileId = DEFAU
61126
61230
  if (moves.length === 0)
61127
61231
  return undefined;
61128
61232
  const style = BOT_STYLES[profileId] ?? BOT_STYLES[DEFAULT_BOT_PROFILE_BY_DIFFICULTY[difficulty]];
61129
- const scored = moves
61130
- .map((move) => ({ move, score: scoreBotMoveWithLookahead(state, move, difficulty, style) }))
61233
+ const quickScored = moves
61234
+ .map((move) => ({ move, score: scoreBotMove(state, move, difficulty, style) }))
61235
+ .sort((a, b) => b.score - a.score);
61236
+ const lookaheadLimit = difficulty === 'hard' ? 32 : difficulty === 'normal' ? 24 : 0;
61237
+ const scored = quickScored
61238
+ .map((item, index) => ({
61239
+ move: item.move,
61240
+ score: index < lookaheadLimit
61241
+ ? scoreBotMoveWithLookahead(state, item.move, difficulty, style)
61242
+ : item.score,
61243
+ }))
61131
61244
  .sort((a, b) => b.score - a.score);
61132
61245
  if (difficulty === 'easy') {
61133
61246
  const playable = scored.filter((item) => item.score > -3000);
@@ -61325,7 +61438,7 @@ function getPowerMoves(state, piece, animal) {
61325
61438
  const directions = getPowerDirections(animal);
61326
61439
  const moves = [];
61327
61440
  for (const direction of directions) {
61328
- for (let distance = 1; distance <= 3; distance += 1) {
61441
+ for (let distance = 1; distance < state.boardSize; distance += 1) {
61329
61442
  const target = {
61330
61443
  row: piece.position.row + direction.row * distance,
61331
61444
  col: piece.position.col + direction.col * distance,
@@ -61386,7 +61499,7 @@ function getKangarooMoves(state, piece) {
61386
61499
  }
61387
61500
  return moves;
61388
61501
  }
61389
- function scoreBotMove(state, move, difficulty, style) {
61502
+ function scoreBotMove(state, move, difficulty, style, includeTacticalPressure = true) {
61390
61503
  const color = state.currentTurn;
61391
61504
  const targetPiece = move.capturesPieceId
61392
61505
  ? activePieces(state).find((piece) => piece.id === move.capturesPieceId)
@@ -61412,6 +61525,14 @@ function scoreBotMove(state, move, difficulty, style) {
61412
61525
  score += 14 * style.power;
61413
61526
  if (wouldUnlockPower(state, color, move.to))
61414
61527
  score += 90 * style.unlock;
61528
+ if (includeTacticalPressure && state.boardSize <= 6) {
61529
+ score += countPowerReachAfterMove(state, move, color) * (difficulty === 'hard' ? 8 : 4) * style.mobility;
61530
+ score += countProtectedThreatsAfterMove(state, move, color) * (difficulty === 'hard' ? 36 : 18) * style.trap;
61531
+ score += scoreEndgamePressure(state, move, color) * style.endgame;
61532
+ }
61533
+ else {
61534
+ score += scoreEndgamePressure(state, move, color) * style.endgame;
61535
+ }
61415
61536
  if (difficulty === 'hard' && isSquareVulnerableAfterMove(state, move)) {
61416
61537
  score -= (targetPiece ? 80 : 140) * style.safety;
61417
61538
  }
@@ -61442,7 +61563,7 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style) {
61442
61563
  score += centerControl * (difficulty === 'hard' ? 18 : 10) * style.center;
61443
61564
  }
61444
61565
  const opponentBestReply = opponentMoves
61445
- .map((opponentMove) => scoreBotMove(afterMove, opponentMove, difficulty, style))
61566
+ .map((opponentMove) => scoreBotMove(afterMove, opponentMove, difficulty, style, false))
61446
61567
  .sort((a, b) => b - a)[0];
61447
61568
  if (opponentBestReply) {
61448
61569
  const replyWeight = difficulty === 'easy' ? 0.12 : difficulty === 'normal' ? 0.32 : 0.48;
@@ -61454,6 +61575,34 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style) {
61454
61575
  }
61455
61576
  return score;
61456
61577
  }
61578
+ function countPowerReachAfterMove(state, move, color) {
61579
+ try {
61580
+ const afterMove = applyChessimalsMove(state, move);
61581
+ const evaluationState = { ...afterMove, currentTurn: color };
61582
+ return getChessimalsAllLegalMoves(evaluationState, color).filter((nextMove) => nextMove.kind === 'power').length;
61583
+ }
61584
+ catch {
61585
+ return 0;
61586
+ }
61587
+ }
61588
+ function countProtectedThreatsAfterMove(state, move, color) {
61589
+ try {
61590
+ const afterMove = applyChessimalsMove(state, move);
61591
+ const evaluationState = { ...afterMove, currentTurn: color };
61592
+ const ourMoves = getChessimalsAllLegalMoves(evaluationState, color);
61593
+ const enemyPieces = activePieces(afterMove).filter((piece) => piece.color !== color && !piece.captured);
61594
+ return enemyPieces.filter((piece) => ourMoves.some((nextMove) => nextMove.capturesPieceId === piece.id)).length;
61595
+ }
61596
+ catch {
61597
+ return 0;
61598
+ }
61599
+ }
61600
+ function scoreEndgamePressure(state, move, color) {
61601
+ const remainingEnemyPieces = activePieces(state).filter((piece) => piece.color !== color && !piece.captured).length;
61602
+ const urgency = remainingEnemyPieces <= Math.max(2, Math.floor(state.boardSize / 2)) ? 1.6 : 1;
61603
+ const distanceToPromotion = color === 'white' ? move.to.row : state.boardSize - 1 - move.to.row;
61604
+ return Math.max(0, state.boardSize - distanceToPromotion) * 14 * urgency;
61605
+ }
61457
61606
  function pickNoisyBotMove(scored, spread) {
61458
61607
  if (scored.length === 0)
61459
61608
  return undefined;
@@ -62350,145 +62499,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
62350
62499
  args: [{ providedIn: 'root' }]
62351
62500
  }] });
62352
62501
 
62353
- const EMPTY_POWERS = { eagle: 0, bull: 0, kangaroo: 0, lion: 0 };
62354
- class ChessimalsChallengeProgressService {
62355
- constructor() {
62356
- this.firebaseAuth = inject(Auth);
62357
- this.firestore = inject(Firestore);
62358
- this.firebase = inject(FirebaseService);
62359
- }
62360
- get currentUid() {
62361
- return this.firebaseAuth.currentUser?.uid;
62362
- }
62363
- watchStats() {
62364
- const uid = this.currentUid;
62365
- if (!uid)
62366
- return of(undefined);
62367
- return new Observable((subscriber) => {
62368
- const unsubscribe = onSnapshot(this.statsRef(uid), (snapshot) => subscriber.next(snapshot.exists() ? this.normalizeStats(snapshot.data()) : undefined), (error) => subscriber.error(error));
62369
- return unsubscribe;
62370
- });
62371
- }
62372
- watchRecentRuns(limitCount = 4) {
62373
- const uid = this.currentUid;
62374
- if (!uid)
62375
- return of([]);
62376
- const runsQuery = query$1(collection(this.firestore, this.runsPath(uid)), orderBy('updatedAt', 'desc'), limit(limitCount));
62377
- return new Observable((subscriber) => {
62378
- const unsubscribe = onSnapshot(runsQuery, (snapshot) => subscriber.next(snapshot.docs.map((item) => item.data())), (error) => subscriber.error(error));
62379
- return unsubscribe;
62380
- });
62381
- }
62382
- async saveRun(run) {
62383
- const uid = await this.ensureUser();
62384
- await setDoc(this.runRef(uid, run.id), this.withoutUndefined({
62385
- ...run,
62386
- userId: uid,
62387
- updatedAt: new Date().toISOString(),
62388
- updatedAtServer: serverTimestamp(),
62389
- }), { merge: true });
62390
- }
62391
- async recordChallengeStarted(run) {
62392
- const uid = await this.ensureUser();
62393
- const current = await this.readStats(uid);
62394
- await setDoc(this.statsRef(uid), {
62395
- ...current,
62396
- userId: uid,
62397
- challengesPlayed: current.challengesPlayed + 1,
62398
- updatedAt: new Date().toISOString(),
62399
- updatedAtServer: serverTimestamp(),
62400
- }, { merge: true });
62401
- await this.saveRun(run);
62402
- }
62403
- async applyRoundResult(args) {
62404
- const uid = await this.ensureUser();
62405
- const current = await this.readStats(uid);
62406
- const next = {
62407
- userId: uid,
62408
- challengesPlayed: current.challengesPlayed,
62409
- challengesCompleted: current.challengesCompleted + (args.completed ? 1 : 0),
62410
- bestWinStreak: Math.max(current.bestWinStreak, args.run.bestStreakInRun),
62411
- bestRoundReached: Math.max(current.bestRoundReached, args.roundReached),
62412
- totalWins: current.totalWins + (args.won ? 1 : 0),
62413
- totalLosses: current.totalLosses + (args.won ? 0 : 1),
62414
- botsDefeated: current.botsDefeated + (args.won ? 1 : 0),
62415
- powersUsed: {
62416
- eagle: current.powersUsed.eagle + args.roundStats.powersUsed.eagle,
62417
- bull: current.powersUsed.bull + args.roundStats.powersUsed.bull,
62418
- kangaroo: current.powersUsed.kangaroo + args.roundStats.powersUsed.kangaroo,
62419
- lion: current.powersUsed.lion + args.roundStats.powersUsed.lion,
62420
- },
62421
- powerCaptures: current.powerCaptures + args.roundStats.powerCaptures,
62422
- promotions: current.promotions + args.roundStats.promotions,
62423
- updatedAt: new Date().toISOString(),
62424
- };
62425
- await setDoc(this.statsRef(uid), { ...next, updatedAtServer: serverTimestamp() }, { merge: true });
62426
- await this.saveRun(args.run);
62427
- }
62428
- emptyStats() {
62429
- return {
62430
- challengesPlayed: 0,
62431
- challengesCompleted: 0,
62432
- bestWinStreak: 0,
62433
- bestRoundReached: 0,
62434
- totalWins: 0,
62435
- totalLosses: 0,
62436
- botsDefeated: 0,
62437
- powersUsed: { ...EMPTY_POWERS },
62438
- powerCaptures: 0,
62439
- promotions: 0,
62440
- };
62441
- }
62442
- async readStats(uid) {
62443
- // Firestore's web SDK does not need a transaction for these casual game stats.
62444
- // Last-write-wins is acceptable for this first version because one run is active per browser.
62445
- const snapshot = await getDoc(this.statsRef(uid));
62446
- return snapshot.exists() ? this.normalizeStats(snapshot.data()) : this.emptyStats();
62447
- }
62448
- normalizeStats(value) {
62449
- const empty = this.emptyStats();
62450
- return {
62451
- ...empty,
62452
- ...value,
62453
- powersUsed: {
62454
- ...EMPTY_POWERS,
62455
- ...(value.powersUsed ?? {}),
62456
- },
62457
- };
62458
- }
62459
- async ensureUser() {
62460
- await this.firebase.whenFirebaseAuthReady();
62461
- const user = this.firebaseAuth.currentUser;
62462
- if (user?.uid) {
62463
- await user.getIdToken();
62464
- return user.uid;
62465
- }
62466
- throw new Error('CHESSIMALS_CHALLENGE_LOGIN_REQUIRED');
62467
- }
62468
- statsRef(uid) {
62469
- return doc(this.firestore, `users/${uid}/miniGames/chessimals/challenge/stats`);
62470
- }
62471
- runRef(uid, runId) {
62472
- return doc(this.firestore, `${this.runsPath(uid)}/${runId}`);
62473
- }
62474
- runsPath(uid) {
62475
- return `users/${uid}/miniGames/chessimals/challengeRuns`;
62476
- }
62477
- withoutUndefined(value) {
62478
- return Object.entries(value).reduce((acc, [key, entry]) => {
62479
- if (entry !== undefined)
62480
- acc[key] = entry;
62481
- return acc;
62482
- }, {});
62483
- }
62484
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChessimalsChallengeProgressService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
62485
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChessimalsChallengeProgressService, providedIn: 'root' }); }
62486
- }
62487
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChessimalsChallengeProgressService, decorators: [{
62488
- type: Injectable,
62489
- args: [{ providedIn: 'root' }]
62490
- }] });
62491
-
62492
62502
  const MINI_GAMES_I18N = {
62493
62503
  es: {
62494
62504
  menuTitle: 'Mini juegos',
@@ -62501,6 +62511,58 @@ const MINI_GAMES_I18N = {
62501
62511
  bubbleDescription: 'Revienta grupos de burbujas, encadena combos y sube tu puntaje.',
62502
62512
  chessimalsTitle: 'Chessimals',
62503
62513
  chessimalsDescription: 'Una carrera de peones con cartas de animales y poderes tácticos.',
62514
+ christianityTitle: 'Christianity',
62515
+ christianityDescription: 'Un juego de cartas familiar con líderes, ofrendas y decisiones tácticas.',
62516
+ christianityEyebrow: 'MVP de mesa',
62517
+ christianityTable: 'Mesa de Christianity',
62518
+ christianityTurn: 'Turno',
62519
+ christianityOfferings: 'Ofrendas',
62520
+ christianityHand: 'Mano',
62521
+ christianityOpponentBattle: 'Zona de batalla rival',
62522
+ christianityYourBattle: 'Tu zona de batalla',
62523
+ christianityOpponentHand: 'Mano rival',
62524
+ christianitySharedZone: 'Zona compartida',
62525
+ christianityMatch: 'Match',
62526
+ christianityMatchScore: 'Marcador de match',
62527
+ christianityHistory: 'Historia',
62528
+ christianityDeck: 'Mazo',
62529
+ christianityPlace: 'Lugar',
62530
+ christianityEmpty: 'Vacío',
62531
+ christianityYourHand: 'Tu mano',
62532
+ christianityCost: 'Coste',
62533
+ christianityOfferingCard: 'Ofrenda',
62534
+ christianityCharacterCard: 'Personaje',
62535
+ christianityLeaderCard: 'Líder',
62536
+ christianityHiddenCard: 'Carta oculta',
62537
+ christianityPreviewCard: 'Ver carta',
62538
+ christianityEndTurn: 'Terminar turno',
62539
+ christianityPlayCard: 'Jugar carta',
62540
+ christianityPlayOffering: 'Jugar ofrenda',
62541
+ christianityPlayHere: 'Jugar aquí',
62542
+ christianityReset: 'Reiniciar mock',
62543
+ christianityWaitTurn: 'Espera el turno rival.',
62544
+ christianityChooseTarget: 'Elige un objetivo para atacar.',
62545
+ christianityChooseCharacterTarget: 'El rival tiene personajes: debes atacarlos antes que al líder.',
62546
+ christianityReadyToPlay: 'Puedes jugar esta carta.',
62547
+ christianityChooseSlot: 'Elige una casilla disponible para jugar esta carta.',
62548
+ christianityPlaceOffering: 'Puedes jugar esta ofrenda con el botón de acción.',
62549
+ christianityNeedOfferings: 'Necesitas más ofrendas para jugar esa carta.',
62550
+ christianityChooseCard: 'Elige una carta o un personaje listo para actuar.',
62551
+ christianityLeaderProtected: 'No puedes atacar directamente al líder mientras tenga personajes en batalla.',
62552
+ christianityLeaderBody: 'Si su vida llega a 0, la partida termina.',
62553
+ christianityOfferingReady: 'Lista',
62554
+ christianityOfferingExhausted: 'Agotada',
62555
+ christianityOfferingBody: 'Se agota para pagar costes y vuelve a estar lista al comenzar tu turno.',
62556
+ christianityOfferingNoAbility: 'Esta ofrenda no tiene habilidad activable.',
62557
+ christianityUseAbility: 'Usar',
62558
+ christianityCloseOfferings: 'Cerrar ofrendas',
62559
+ christianityCharacterBody: 'Entra a batalla y debe esperar un turno para atacar.',
62560
+ christianityCharacterReady: 'Listo para atacar.',
62561
+ christianityCharacterExhausted: 'No puede atacar todavía.',
62562
+ christianityDeckBody: 'La primera carta de esta pila se roba automaticamente al comenzar cada turno.',
62563
+ christianityClosePreview: 'Cerrar previsualizacion de carta',
62564
+ christianityCloseHistory: 'Cerrar historia',
62565
+ christianityHistoryEmpty: 'Todavía no hay cartas en historia.',
62504
62566
  soonTitle: 'Próximamente',
62505
62567
  openGame: 'Jugar',
62506
62568
  close: 'Cerrar',
@@ -62625,10 +62687,10 @@ const MINI_GAMES_I18N = {
62625
62687
  chessimalsRulePowersTitle: 'Cuándo se activan los poderes',
62626
62688
  chessimalsRulePowersBody: 'Tus cartas se desbloquean cuando uno de tus peones cruza la línea central o cuando un peón rival entra en tu mitad del tablero.',
62627
62689
  chessimalsRuleCardsTitle: 'Cartas de animales',
62628
- chessimalsRuleEagle: 'Águila: se mueve hasta 3 casillas en diagonal, hacia adelante o atrás.',
62629
- chessimalsRuleBull: 'Toro: se mueve hasta 3 casillas en línea recta, incluso hacia los lados.',
62690
+ chessimalsRuleEagle: 'Águila: se mueve en diagonal por todo el tablero, hacia adelante o atrás, sin entrar a la última fila.',
62691
+ chessimalsRuleBull: 'Toro: se mueve en línea recta por todo el tablero, incluso hacia los lados, sin entrar a la última fila.',
62630
62692
  chessimalsRuleKangaroo: 'Canguro: salta en L, como el caballo del ajedrez. Puede saltar por encima de piezas y caer libre o capturar una pieza rival.',
62631
- chessimalsRuleLion: 'León: se mueve hasta 3 casillas en cualquier dirección.',
62693
+ chessimalsRuleLion: 'León: se mueve en cualquier dirección por todo el tablero, sin entrar a la última fila.',
62632
62694
  chessimalsRuleLimitsTitle: 'Reglas de equilibrio',
62633
62695
  chessimalsRuleLimitsBody: 'Cada carta se usa una sola vez por partida. Ningún poder puede entrar directamente a la última fila: el paso final para ganar siempre debe ser un avance normal.',
62634
62696
  chessimalsBoardSize: 'Tamaño del tablero',
@@ -62741,6 +62803,18 @@ const MINI_GAMES_I18N = {
62741
62803
  chessimalsBotSprinterBody: 'Optimiza rutas de promoción.',
62742
62804
  chessimalsBotSentinel: 'Centinela',
62743
62805
  chessimalsBotSentinelBody: 'Defiende sólido y castiga errores.',
62806
+ chessimalsBotOracle: 'Oráculo',
62807
+ chessimalsBotOracleBody: 'Lee respuestas y evita trampas profundas.',
62808
+ chessimalsBotAmbusher: 'Emboscador',
62809
+ chessimalsBotAmbusherBody: 'Prepara capturas dobles con poderes largos.',
62810
+ chessimalsBotLocksmith: 'Cerrajero',
62811
+ chessimalsBotLocksmithBody: 'Cierra el centro y reduce tus rutas.',
62812
+ chessimalsBotStorm: 'Tormenta',
62813
+ chessimalsBotStormBody: 'Usa poderes largos para presionar todo el tablero.',
62814
+ chessimalsBotMatriarch: 'Matriarca',
62815
+ chessimalsBotMatriarchBody: 'Protege su estructura y gana por desgaste.',
62816
+ chessimalsBotEndgame: 'Finalista',
62817
+ chessimalsBotEndgameBody: 'Convierte ventajas pequeñas en promoción.',
62744
62818
  chessimalsBotExplorerTendency: 'Tiende a variar rutas, probar el centro y cometer errores suaves.',
62745
62819
  chessimalsBotImpulsiveTendency: 'Tiende a capturar rápido, incluso cuando puede quedar expuesto.',
62746
62820
  chessimalsBotRunnerTendency: 'Tiende a avanzar hacia la promoción antes que defender.',
@@ -62751,6 +62825,12 @@ const MINI_GAMES_I18N = {
62751
62825
  chessimalsBotPredatorTendency: 'Tiende a forzar capturas y usar poderes agresivos.',
62752
62826
  chessimalsBotSprinterTendency: 'Tiende a encontrar caminos rápidos de promoción.',
62753
62827
  chessimalsBotSentinelTendency: 'Tiende a defender sólido y castigar errores.',
62828
+ chessimalsBotOracleTendency: 'Tiende a anticipar respuestas y elegir jugadas difíciles de refutar.',
62829
+ chessimalsBotAmbusherTendency: 'Tiende a dejar piezas bajo amenaza múltiple antes de capturar.',
62830
+ chessimalsBotLocksmithTendency: 'Tiende a cortar rutas por el centro y dejarte sin buenas casillas.',
62831
+ chessimalsBotStormTendency: 'Tiende a convertir poderes largos en presión desde varios ángulos.',
62832
+ chessimalsBotMatriarchTendency: 'Tiende a conservar piezas y cambiar solo cuando queda mejor.',
62833
+ chessimalsBotEndgameTendency: 'Tiende a simplificar y correr hacia la promoción cuando ve ventaja.',
62754
62834
  chessimalsBotReportTitle: 'Reporte del bot',
62755
62835
  chessimalsBotReportVs: 'Contra {bot}',
62756
62836
  chessimalsBotReportBody: '{outcome}. Hizo {captures} capturas y usó {powers} poderes. {style}',
@@ -62759,46 +62839,6 @@ const MINI_GAMES_I18N = {
62759
62839
  chessimalsBotThinkingTitle: 'Chessibot está pensando',
62760
62840
  chessimalsBotThinkingBody: 'El bot mueve las negras. Espera un momento para continuar.',
62761
62841
  chessimalsBotYourTurnBody: 'Juegas con blancas. Toca uno de tus peones para ver sus movimientos.',
62762
- chessimalsChallengeEyebrow: 'Nuevo modo',
62763
- chessimalsChallengeTitle: 'Modo desafío',
62764
- chessimalsChallengeBody: 'Tres vidas, ocho rivales y una ruta de peones cada vez más dura.',
62765
- chessimalsChallengeStart: 'Empezar desafío',
62766
- chessimalsChallengeContinue: 'Continuar desafío',
62767
- chessimalsChallengeLives: 'Vidas',
62768
- chessimalsChallengeFirstRival: 'Primer rival',
62769
- chessimalsChallengeBestRound: 'Mejor ronda',
62770
- chessimalsChallengeBestStreak: 'Mejor racha',
62771
- chessimalsChallengePath: 'Ruta de rivales',
62772
- chessimalsChallengeRound: 'Ronda',
62773
- chessimalsChallengeRecentRuns: 'Últimos desafíos',
62774
- chessimalsChallengeRunLine: 'ronda {round} · {wins} victorias',
62775
- chessimalsChallengeStatusActive: 'Activo',
62776
- chessimalsChallengeStatusCompleted: 'Completo',
62777
- chessimalsChallengeStatusFailed: 'Sin vidas',
62778
- chessimalsChallengeStatusAbandoned: 'Abandonado',
62779
- chessimalsChallengeNewRecord: 'Nueva mejor marca',
62780
- chessimalsChallengeNextRival: 'Siguiente rival',
62781
- chessimalsChallengeNextRivalLabel: 'Próximo rival',
62782
- chessimalsChallengePlayAgain: 'Jugar desafío otra vez',
62783
- chessimalsChallengePowersUsed: 'Poderes',
62784
- chessimalsChallengePowerCaptures: 'Capturas poder',
62785
- chessimalsChallengePromotions: 'Promociones',
62786
- chessimalsChallengeRoundWonTitle: 'Rival superado',
62787
- chessimalsChallengeRoundWonBody: 'Derrotaste a {bot}. Te quedan {lives} vidas y usaste {powers} poderes.',
62788
- chessimalsChallengeRoundLostTitle: 'Una vida menos',
62789
- chessimalsChallengeRoundLostBody: '{bot} ganó esta ronda. Te quedan {lives} vidas para remontar.',
62790
- chessimalsChallengeCompletedTitle: 'Desafío completo',
62791
- chessimalsChallengeCompletedBody: 'Derrotaste {wins} rivales. Tus peones llegaron hasta el final.',
62792
- chessimalsChallengeFailedTitle: 'Desafío terminado',
62793
- chessimalsChallengeFailedBody: 'Llegaste lejos con {wins} victorias. La próxima ruta empieza con más colmillo.',
62794
- chessimalsChallengeBotSproutIntro: 'Prueba rutas y te deja respirar.',
62795
- chessimalsChallengeBotSentinelIntro: 'Cuida sus peones y bloquea caminos.',
62796
- chessimalsChallengeBotHunterIntro: 'Busca capturas útiles desde temprano.',
62797
- chessimalsChallengeBotJumperIntro: 'Activa poderes y abre rutas raras.',
62798
- chessimalsChallengeBotPredatorIntro: 'Presiona con capturas y poderes agresivos.',
62799
- chessimalsChallengeBotOracleIntro: 'Calcula amenazas antes de que aparezcan.',
62800
- chessimalsChallengeBotSprinterIntro: 'Corre hacia la promoción sin pedir permiso.',
62801
- chessimalsChallengeBotChampionIntro: 'Defiende, espera y castiga cada apuro.',
62802
62842
  chessimalsCurrentTurn: 'Juegan: {player}',
62803
62843
  chessimalsBoardFlips: 'El tablero se orienta automáticamente para quien tiene el turno.',
62804
62844
  chessimalsRival: 'Rival',
@@ -62838,7 +62878,7 @@ const MINI_GAMES_I18N = {
62838
62878
  chessimalsTutorialStep4Title: 'Devuelve el turno',
62839
62879
  chessimalsTutorialStep4Body: 'Mueve el peón negro de la columna F una casilla hacia abajo para continuar.',
62840
62880
  chessimalsTutorialStep5Title: 'Usa el poder Canguro',
62841
- chessimalsTutorialStep5Body: 'Selecciona la carta Canguro y salta en L para capturar el peón negro.',
62881
+ chessimalsTutorialStep5Body: 'Selecciona la carta Canguro y salta en L para capturar el peón negro. Las otras cartas pueden cruzar todo el tablero, pero ningún poder puede entrar a la última fila.',
62842
62882
  chessimalsTutorialStep6Title: 'Prepara la llegada',
62843
62883
  chessimalsTutorialStep6Body: 'Mueve el último peón negro hacia abajo. Después tendrás camino para ganar.',
62844
62884
  chessimalsTutorialStep7Title: 'Llega a la última fila',
@@ -62902,6 +62942,58 @@ const MINI_GAMES_I18N = {
62902
62942
  bubbleDescription: 'Pop bubble groups, chain combos, and push your score higher.',
62903
62943
  chessimalsTitle: 'Chessimals',
62904
62944
  chessimalsDescription: 'A pawn race with animal cards and tactical powers.',
62945
+ christianityTitle: 'Christianity',
62946
+ christianityDescription: 'A family card game with leaders, offerings, and tactical choices.',
62947
+ christianityEyebrow: 'Table MVP',
62948
+ christianityTable: 'Christianity table',
62949
+ christianityTurn: 'Turn',
62950
+ christianityOfferings: 'Offerings',
62951
+ christianityHand: 'Hand',
62952
+ christianityOpponentBattle: 'Opponent battle zone',
62953
+ christianityYourBattle: 'Your battle zone',
62954
+ christianityOpponentHand: 'Opponent hand',
62955
+ christianitySharedZone: 'Shared zone',
62956
+ christianityMatch: 'Match',
62957
+ christianityMatchScore: 'Match score',
62958
+ christianityHistory: 'History',
62959
+ christianityDeck: 'Deck',
62960
+ christianityPlace: 'Place',
62961
+ christianityEmpty: 'Empty',
62962
+ christianityYourHand: 'Your hand',
62963
+ christianityCost: 'Cost',
62964
+ christianityOfferingCard: 'Offering',
62965
+ christianityCharacterCard: 'Character',
62966
+ christianityLeaderCard: 'Leader',
62967
+ christianityHiddenCard: 'Hidden card',
62968
+ christianityPreviewCard: 'Preview card',
62969
+ christianityEndTurn: 'End turn',
62970
+ christianityPlayCard: 'Play card',
62971
+ christianityPlayOffering: 'Play offering',
62972
+ christianityPlayHere: 'Play here',
62973
+ christianityReset: 'Reset mock',
62974
+ christianityWaitTurn: 'Wait for the opponent turn.',
62975
+ christianityChooseTarget: 'Choose a target to attack.',
62976
+ christianityChooseCharacterTarget: 'The opponent has characters: attack them before the leader.',
62977
+ christianityReadyToPlay: 'You can play this card.',
62978
+ christianityChooseSlot: 'Choose an available slot to play this card.',
62979
+ christianityPlaceOffering: 'You can play this offering with the action button.',
62980
+ christianityNeedOfferings: 'You need more offerings to play that card.',
62981
+ christianityChooseCard: 'Choose a card or a ready character.',
62982
+ christianityLeaderProtected: 'You cannot attack the leader directly while they have characters in battle.',
62983
+ christianityLeaderBody: 'If this leader reaches 0 life, the game ends.',
62984
+ christianityOfferingReady: 'Ready',
62985
+ christianityOfferingExhausted: 'Exhausted',
62986
+ christianityOfferingBody: 'Exhaust it to pay costs. It readies again at the start of your turn.',
62987
+ christianityOfferingNoAbility: 'This offering has no active ability.',
62988
+ christianityUseAbility: 'Use',
62989
+ christianityCloseOfferings: 'Close offerings',
62990
+ christianityCharacterBody: 'Enters battle and must wait one turn before attacking.',
62991
+ christianityCharacterReady: 'Ready to attack.',
62992
+ christianityCharacterExhausted: 'Cannot attack yet.',
62993
+ christianityDeckBody: 'The top card in this pile is drawn automatically at the start of each turn.',
62994
+ christianityClosePreview: 'Close card preview',
62995
+ christianityCloseHistory: 'Close history',
62996
+ christianityHistoryEmpty: 'There are no cards in history yet.',
62905
62997
  soonTitle: 'Coming soon',
62906
62998
  openGame: 'Play',
62907
62999
  close: 'Close',
@@ -63026,10 +63118,10 @@ const MINI_GAMES_I18N = {
63026
63118
  chessimalsRulePowersTitle: 'When powers unlock',
63027
63119
  chessimalsRulePowersBody: 'Your cards unlock when one of your pawns crosses the center line, or when a rival pawn enters your half of the board.',
63028
63120
  chessimalsRuleCardsTitle: 'Animal cards',
63029
- chessimalsRuleEagle: 'Eagle: moves up to 3 squares diagonally, forward or backward.',
63030
- chessimalsRuleBull: 'Bull: moves up to 3 squares in a straight line, including sideways.',
63121
+ chessimalsRuleEagle: 'Eagle: moves diagonally across the whole board, forward or backward, without entering the final row.',
63122
+ chessimalsRuleBull: 'Bull: moves in a straight line across the whole board, including sideways, without entering the final row.',
63031
63123
  chessimalsRuleKangaroo: 'Kangaroo: jumps in an L shape, like a chess knight. It can jump over pieces and land on an empty square or capture a rival piece.',
63032
- chessimalsRuleLion: 'Lion: moves up to 3 squares in any direction.',
63124
+ chessimalsRuleLion: 'Lion: moves in any direction across the whole board, without entering the final row.',
63033
63125
  chessimalsRuleLimitsTitle: 'Balance rules',
63034
63126
  chessimalsRuleLimitsBody: 'Each card can be used once per game. No power can land directly on the final row: the winning step must always be a normal forward move.',
63035
63127
  chessimalsBoardSize: 'Board size',
@@ -63142,6 +63234,18 @@ const MINI_GAMES_I18N = {
63142
63234
  chessimalsBotSprinterBody: 'Optimizes promotion routes.',
63143
63235
  chessimalsBotSentinel: 'Sentinel',
63144
63236
  chessimalsBotSentinelBody: 'Defends solidly and punishes mistakes.',
63237
+ chessimalsBotOracle: 'Oracle',
63238
+ chessimalsBotOracleBody: 'Reads replies and avoids deep traps.',
63239
+ chessimalsBotAmbusher: 'Ambusher',
63240
+ chessimalsBotAmbusherBody: 'Sets up double captures with long powers.',
63241
+ chessimalsBotLocksmith: 'Locksmith',
63242
+ chessimalsBotLocksmithBody: 'Closes the center and reduces your routes.',
63243
+ chessimalsBotStorm: 'Storm',
63244
+ chessimalsBotStormBody: 'Uses long powers to pressure the whole board.',
63245
+ chessimalsBotMatriarch: 'Matriarch',
63246
+ chessimalsBotMatriarchBody: 'Protects structure and wins by attrition.',
63247
+ chessimalsBotEndgame: 'Endgame',
63248
+ chessimalsBotEndgameBody: 'Turns small edges into promotion.',
63145
63249
  chessimalsBotExplorerTendency: 'Tends to vary routes, test the center, and make soft mistakes.',
63146
63250
  chessimalsBotImpulsiveTendency: 'Tends to capture quickly, even when it can become exposed.',
63147
63251
  chessimalsBotRunnerTendency: 'Tends to push toward promotion before defending.',
@@ -63152,6 +63256,12 @@ const MINI_GAMES_I18N = {
63152
63256
  chessimalsBotPredatorTendency: 'Tends to force captures and use aggressive powers.',
63153
63257
  chessimalsBotSprinterTendency: 'Tends to find fast promotion paths.',
63154
63258
  chessimalsBotSentinelTendency: 'Tends to defend solidly and punish mistakes.',
63259
+ chessimalsBotOracleTendency: 'Tends to anticipate replies and choose hard-to-refute moves.',
63260
+ chessimalsBotAmbusherTendency: 'Tends to leave pieces under multiple threats before capturing.',
63261
+ chessimalsBotLocksmithTendency: 'Tends to close central routes and leave you without good squares.',
63262
+ chessimalsBotStormTendency: 'Tends to turn long powers into pressure from several angles.',
63263
+ chessimalsBotMatriarchTendency: 'Tends to preserve pieces and trade only when it improves.',
63264
+ chessimalsBotEndgameTendency: 'Tends to simplify and race toward promotion when ahead.',
63155
63265
  chessimalsBotReportTitle: 'Bot report',
63156
63266
  chessimalsBotReportVs: 'Against {bot}',
63157
63267
  chessimalsBotReportBody: '{outcome}. It made {captures} captures and used {powers} powers. {style}',
@@ -63160,46 +63270,6 @@ const MINI_GAMES_I18N = {
63160
63270
  chessimalsBotThinkingTitle: 'Chessibot is thinking',
63161
63271
  chessimalsBotThinkingBody: 'The bot is moving black. Wait a moment to continue.',
63162
63272
  chessimalsBotYourTurnBody: 'You play white. Tap one of your pawns to see its moves.',
63163
- chessimalsChallengeEyebrow: 'New mode',
63164
- chessimalsChallengeTitle: 'Challenge mode',
63165
- chessimalsChallengeBody: 'Three lives, eight rivals, and a pawn path that gets sharper every round.',
63166
- chessimalsChallengeStart: 'Start challenge',
63167
- chessimalsChallengeContinue: 'Continue challenge',
63168
- chessimalsChallengeLives: 'Lives',
63169
- chessimalsChallengeFirstRival: 'First rival',
63170
- chessimalsChallengeBestRound: 'Best round',
63171
- chessimalsChallengeBestStreak: 'Best streak',
63172
- chessimalsChallengePath: 'Rival path',
63173
- chessimalsChallengeRound: 'Round',
63174
- chessimalsChallengeRecentRuns: 'Recent challenges',
63175
- chessimalsChallengeRunLine: 'round {round} · {wins} wins',
63176
- chessimalsChallengeStatusActive: 'Active',
63177
- chessimalsChallengeStatusCompleted: 'Complete',
63178
- chessimalsChallengeStatusFailed: 'No lives',
63179
- chessimalsChallengeStatusAbandoned: 'Abandoned',
63180
- chessimalsChallengeNewRecord: 'New personal best',
63181
- chessimalsChallengeNextRival: 'Next rival',
63182
- chessimalsChallengeNextRivalLabel: 'Next rival',
63183
- chessimalsChallengePlayAgain: 'Play challenge again',
63184
- chessimalsChallengePowersUsed: 'Powers',
63185
- chessimalsChallengePowerCaptures: 'Power captures',
63186
- chessimalsChallengePromotions: 'Promotions',
63187
- chessimalsChallengeRoundWonTitle: 'Rival cleared',
63188
- chessimalsChallengeRoundWonBody: 'You defeated {bot}. You have {lives} lives left and used {powers} powers.',
63189
- chessimalsChallengeRoundLostTitle: 'One life down',
63190
- chessimalsChallengeRoundLostBody: '{bot} won this round. You have {lives} lives left to climb back.',
63191
- chessimalsChallengeCompletedTitle: 'Challenge complete',
63192
- chessimalsChallengeCompletedBody: 'You defeated {wins} rivals. Your pawns made it all the way.',
63193
- chessimalsChallengeFailedTitle: 'Challenge over',
63194
- chessimalsChallengeFailedBody: 'You got far with {wins} wins. The next run starts wiser.',
63195
- chessimalsChallengeBotSproutIntro: 'Tests routes and gives you room.',
63196
- chessimalsChallengeBotSentinelIntro: 'Protects pawns and blocks paths.',
63197
- chessimalsChallengeBotHunterIntro: 'Looks for useful captures early.',
63198
- chessimalsChallengeBotJumperIntro: 'Unlocks powers and opens odd routes.',
63199
- chessimalsChallengeBotPredatorIntro: 'Pressures with captures and aggressive powers.',
63200
- chessimalsChallengeBotOracleIntro: 'Calculates threats before they appear.',
63201
- chessimalsChallengeBotSprinterIntro: 'Runs toward promotion without asking.',
63202
- chessimalsChallengeBotChampionIntro: 'Defends, waits, and punishes every rush.',
63203
63273
  chessimalsCurrentTurn: '{player} to move',
63204
63274
  chessimalsBoardFlips: 'The board automatically faces the player whose turn it is.',
63205
63275
  chessimalsRival: 'Rival',
@@ -63239,7 +63309,7 @@ const MINI_GAMES_I18N = {
63239
63309
  chessimalsTutorialStep4Title: 'Return the turn',
63240
63310
  chessimalsTutorialStep4Body: 'Move the black pawn on file F one square downward to continue.',
63241
63311
  chessimalsTutorialStep5Title: 'Use the Kangaroo power',
63242
- chessimalsTutorialStep5Body: 'Select the Kangaroo card and jump in an L shape to capture the black pawn.',
63312
+ chessimalsTutorialStep5Body: 'Select the Kangaroo card and jump in an L shape to capture the black pawn. The other cards can cross the whole board, but no power can enter the final row.',
63243
63313
  chessimalsTutorialStep6Title: 'Prepare the finish',
63244
63314
  chessimalsTutorialStep6Body: 'Move the last black pawn downward. Then your path to win is open.',
63245
63315
  chessimalsTutorialStep7Title: 'Reach the last row',
@@ -64331,16 +64401,6 @@ const ANIMALS = [
64331
64401
  { type: 'kangaroo', assetSrc: 'assets/games/chessimals/kangaroo.jpg', tone: 523.25 },
64332
64402
  { type: 'lion', assetSrc: 'assets/games/chessimals/lion.jpg', tone: 392 },
64333
64403
  ];
64334
- const CHESSIMALS_CHALLENGE_LADDER = [
64335
- { id: 'sprout', round: 1, profileId: 'explorer', difficulty: 'easy', boardSize: 6, introKey: 'chessimalsChallengeBotSproutIntro' },
64336
- { id: 'sentinel', round: 2, profileId: 'guardian', difficulty: 'normal', boardSize: 6, introKey: 'chessimalsChallengeBotSentinelIntro' },
64337
- { id: 'hunter', round: 3, profileId: 'hunter', difficulty: 'normal', boardSize: 6, introKey: 'chessimalsChallengeBotHunterIntro' },
64338
- { id: 'jumper', round: 4, profileId: 'jumper', difficulty: 'normal', boardSize: 6, introKey: 'chessimalsChallengeBotJumperIntro' },
64339
- { id: 'predator', round: 5, profileId: 'predator', difficulty: 'hard', boardSize: 8, introKey: 'chessimalsChallengeBotPredatorIntro' },
64340
- { id: 'oracle', round: 6, profileId: 'strategist', difficulty: 'hard', boardSize: 8, introKey: 'chessimalsChallengeBotOracleIntro' },
64341
- { id: 'sprinter', round: 7, profileId: 'sprinter', difficulty: 'hard', boardSize: 8, introKey: 'chessimalsChallengeBotSprinterIntro' },
64342
- { id: 'champion', round: 8, profileId: 'sentinel', difficulty: 'hard', boardSize: 8, introKey: 'chessimalsChallengeBotChampionIntro' },
64343
- ];
64344
64404
  class ChessimalsGameComponent {
64345
64405
  set onlineGameId(value) {
64346
64406
  const gameId = this.online.normalizeGameId(value ?? '');
@@ -64355,7 +64415,6 @@ class ChessimalsGameComponent {
64355
64415
  this.i18n = inject(I18nService);
64356
64416
  this.audio = inject(RetroAudioService);
64357
64417
  this.online = inject(ChessimalsOnlineService);
64358
- this.challengeProgress = inject(ChessimalsChallengeProgressService);
64359
64418
  this.router = inject(Router);
64360
64419
  this.toast = inject(ToastService);
64361
64420
  this.auth = inject(AuthService);
@@ -64367,7 +64426,6 @@ class ChessimalsGameComponent {
64367
64426
  this.localModes = ['one-device', 'bot'];
64368
64427
  this.botDifficulties = ['easy', 'normal', 'hard'];
64369
64428
  this.botProfiles = CHESSIMALS_BOT_PROFILES;
64370
- this.challengeLadder = CHESSIMALS_CHALLENGE_LADDER;
64371
64429
  this.animals = ANIMALS;
64372
64430
  this.valtechComponentsVersion = VERSION;
64373
64431
  this.screen = signal('home');
@@ -64377,14 +64435,6 @@ class ChessimalsGameComponent {
64377
64435
  this.selectedBotProfileId = signal('hunter');
64378
64436
  this.gameBotProfileId = signal(undefined);
64379
64437
  this.game = signal(createChessimalsGame(6));
64380
- this.challengePhase = signal('idle');
64381
- this.challengeRun = signal(undefined);
64382
- this.challengeStats = signal(this.challengeProgress.emptyStats());
64383
- this.challengeHistory = signal([]);
64384
- this.challengeLastWon = signal(undefined);
64385
- this.challengeLastBot = signal(undefined);
64386
- this.challengeLastRoundStats = signal(undefined);
64387
- this.challengeNewRecord = signal(false);
64388
64438
  this.selectedPieceId = signal(undefined);
64389
64439
  this.selectedAnimal = signal(undefined);
64390
64440
  this.isRulesModalOpen = signal(false);
@@ -64421,6 +64471,7 @@ class ChessimalsGameComponent {
64421
64471
  });
64422
64472
  this.botThinking = signal(false);
64423
64473
  this.confirmAction = signal(undefined);
64474
+ this.confirmedAction = signal(undefined);
64424
64475
  this.onlineJoinCode = signal('');
64425
64476
  this.onlineLoading = signal(false);
64426
64477
  this.onlineAction = signal(undefined);
@@ -64505,12 +64556,6 @@ class ChessimalsGameComponent {
64505
64556
  const profileId = this.gameBotProfileId();
64506
64557
  return profileId ? this.botProfiles.find((profile) => profile.id === profileId) : undefined;
64507
64558
  });
64508
- this.activeChallengeBot = computed(() => {
64509
- const run = this.challengeRun();
64510
- if (!run)
64511
- return undefined;
64512
- return this.challengeLadder[Math.max(0, run.currentRound - 1)];
64513
- });
64514
64559
  this.miniGamesRoute = '/mini-games';
64515
64560
  this.projectionMode = false;
64516
64561
  this.replayEntries = computed(() => this.game().moveHistory ?? []);
@@ -64913,30 +64958,13 @@ class ChessimalsGameComponent {
64913
64958
  const user = this.loggedInUser();
64914
64959
  if (user) {
64915
64960
  this.queueHistoryWatch();
64916
- this.watchChallengeStats();
64917
64961
  return;
64918
64962
  }
64919
64963
  this.historyUid = undefined;
64920
64964
  this.historySubscription?.unsubscribe();
64921
64965
  this.historySubscription = undefined;
64922
64966
  this.onlineHistory.set([]);
64923
- this.challengeStatsSubscription?.unsubscribe();
64924
- this.challengeStatsSubscription = undefined;
64925
- this.challengeRunsSubscription?.unsubscribe();
64926
- this.challengeRunsSubscription = undefined;
64927
- this.challengeStats.set(this.challengeProgress.emptyStats());
64928
- this.challengeHistory.set([]);
64929
- }, { allowSignalWrites: true });
64930
- effect(() => {
64931
- const game = this.game();
64932
- if (game.status !== 'finished' || this.challengePhase() !== 'playing')
64933
- return;
64934
- const key = `${game.id}:${game.moveCount}:${game.winner ?? 'none'}:${game.winnerReason ?? 'none'}`;
64935
- if (this.lastChallengeHandledKey === key)
64936
- return;
64937
- this.lastChallengeHandledKey = key;
64938
- this.handleChallengeRoundFinished(game);
64939
- }, { allowSignalWrites: true });
64967
+ });
64940
64968
  }
64941
64969
  ngOnDestroy() {
64942
64970
  this.resetFinishedLocalGameForNextVisit(true);
@@ -64958,8 +64986,6 @@ class ChessimalsGameComponent {
64958
64986
  clearTimeout(this.historyWatchTimer);
64959
64987
  this.onlineSubscription?.unsubscribe();
64960
64988
  this.historySubscription?.unsubscribe();
64961
- this.challengeStatsSubscription?.unsubscribe();
64962
- this.challengeRunsSubscription?.unsubscribe();
64963
64989
  }
64964
64990
  ngOnInit() {
64965
64991
  this.routeSubscription.add(this.router.events.subscribe((event) => {
@@ -64986,82 +65012,11 @@ class ChessimalsGameComponent {
64986
65012
  const raw = typeof value === 'number' ? value : value.upper ?? value.lower ?? 0;
64987
65013
  return Math.min(100, Math.max(0, Math.round(raw)));
64988
65014
  }
64989
- startChallenge() {
64990
- const now = new Date().toISOString();
64991
- const run = {
64992
- id: `challenge-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`,
64993
- status: 'active',
64994
- livesStart: 3,
64995
- livesRemaining: 3,
64996
- currentRound: 1,
64997
- wins: 0,
64998
- losses: 0,
64999
- bestStreakInRun: 0,
65000
- currentStreak: 0,
65001
- botLadder: this.challengeLadder.map((bot) => bot.id),
65002
- roundResults: [],
65003
- startedAt: now,
65004
- updatedAt: now,
65005
- };
65006
- this.challengeRun.set(run);
65007
- this.challengeLastWon.set(undefined);
65008
- this.challengeLastBot.set(undefined);
65009
- this.challengeLastRoundStats.set(undefined);
65010
- this.challengeNewRecord.set(false);
65011
- this.challengeNewRecord.set(false);
65012
- this.startChallengeRound(run);
65013
- void this.challengeProgress.recordChallengeStarted(run).catch((error) => {
65014
- console.warn('[Chessimals] challenge run save failed', error);
65015
- });
65016
- }
65017
- continueChallenge() {
65018
- const run = this.challengeRun();
65019
- if (!run || this.challengePhase() !== 'between')
65020
- return;
65021
- this.startChallengeRound(run);
65022
- }
65023
- startChallengeRound(run) {
65024
- const bot = this.challengeLadder[Math.max(0, run.currentRound - 1)];
65025
- if (!bot) {
65026
- this.challengePhase.set('completed');
65027
- return;
65028
- }
65029
- this.onlineSubscription?.unsubscribe();
65030
- this.openedOnlineGameId = undefined;
65031
- this.openingOnlineGameId = undefined;
65032
- this.clearBotTurn();
65033
- this.tutorialMode.set(false);
65034
- this.onlineConnectionState.set('idle');
65035
- this.selectedLocalMode.set('bot');
65036
- this.selectedBoardSize.set(bot.boardSize);
65037
- this.selectedBotDifficulty.set(bot.difficulty);
65038
- this.selectedBotProfileId.set(bot.profileId);
65039
- this.gameBotProfileId.set(bot.profileId);
65040
- this.challengePhase.set('playing');
65041
- this.lastChallengeHandledKey = undefined;
65042
- this.lastOutcomeSoundKey = undefined;
65043
- this.audio.stopMusic();
65044
- this.game.set(createChessimalsGame(bot.boardSize));
65045
- this.clearReview();
65046
- this.selectedPieceId.set(undefined);
65047
- this.selectedAnimal.set(undefined);
65048
- this.movingPiece.set(undefined);
65049
- this.screen.set('game');
65050
- this.startChessimalsGameMusicSoon();
65051
- this.audio.flip();
65052
- this.focusBoardSoon();
65053
- }
65054
65015
  startGame() {
65055
65016
  this.onlineSubscription?.unsubscribe();
65056
65017
  this.openedOnlineGameId = undefined;
65057
65018
  this.openingOnlineGameId = undefined;
65058
65019
  this.clearBotTurn();
65059
- this.challengePhase.set('idle');
65060
- this.challengeRun.set(undefined);
65061
- this.challengeLastWon.set(undefined);
65062
- this.challengeLastBot.set(undefined);
65063
- this.challengeLastRoundStats.set(undefined);
65064
- this.challengeNewRecord.set(false);
65065
65020
  this.tutorialMode.set(false);
65066
65021
  this.onlineConnectionState.set('idle');
65067
65022
  this.gameBotProfileId.set(this.selectedLocalMode() === 'bot' ? this.selectedBotProfileId() : undefined);
@@ -65078,72 +65033,6 @@ class ChessimalsGameComponent {
65078
65033
  this.focusBoardSoon();
65079
65034
  this.queueBotTurnIfNeeded();
65080
65035
  }
65081
- handleChallengeRoundFinished(game) {
65082
- const run = this.challengeRun();
65083
- const bot = this.activeChallengeBot();
65084
- if (!run || !bot)
65085
- return;
65086
- const won = game.winner === 'white';
65087
- const roundStats = this.createChallengeRoundStats(game);
65088
- const nextLives = won ? run.livesRemaining : Math.max(0, run.livesRemaining - 1);
65089
- const nextStreak = won ? run.currentStreak + 1 : 0;
65090
- const completed = won && run.currentRound >= this.challengeLadder.length;
65091
- const failed = !won && nextLives <= 0;
65092
- const finishedAt = new Date().toISOString();
65093
- const roundResult = {
65094
- round: run.currentRound,
65095
- botId: bot.id,
65096
- profileId: bot.profileId,
65097
- won,
65098
- livesRemaining: nextLives,
65099
- stats: roundStats,
65100
- finishedAt,
65101
- };
65102
- const nextRun = {
65103
- ...run,
65104
- status: completed ? 'completed' : failed ? 'failed' : 'active',
65105
- livesRemaining: nextLives,
65106
- wins: run.wins + (won ? 1 : 0),
65107
- losses: run.losses + (won ? 0 : 1),
65108
- currentStreak: nextStreak,
65109
- bestStreakInRun: Math.max(run.bestStreakInRun, nextStreak),
65110
- currentRound: completed || failed ? run.currentRound : Math.min(this.challengeLadder.length, run.currentRound + 1),
65111
- roundResults: [...run.roundResults, roundResult],
65112
- updatedAt: finishedAt,
65113
- finishedAt: completed || failed ? finishedAt : undefined,
65114
- };
65115
- this.challengeRun.set(nextRun);
65116
- this.challengeLastWon.set(won);
65117
- this.challengeLastBot.set(bot);
65118
- this.challengeLastRoundStats.set(roundStats);
65119
- this.challengeNewRecord.set(run.currentRound > this.challengeStats().bestRoundReached
65120
- || Math.max(run.bestStreakInRun, nextStreak) > this.challengeStats().bestWinStreak);
65121
- this.challengePhase.set(completed ? 'completed' : failed ? 'failed' : 'between');
65122
- void this.challengeProgress.applyRoundResult({
65123
- run: nextRun,
65124
- roundReached: run.currentRound,
65125
- won,
65126
- completed,
65127
- roundStats,
65128
- }).catch((error) => {
65129
- console.warn('[Chessimals] challenge stats save failed', error);
65130
- });
65131
- }
65132
- abandonChallengeIfNeeded() {
65133
- const run = this.challengeRun();
65134
- if (!run || run.status !== 'active' || this.challengePhase() === 'idle')
65135
- return;
65136
- const now = new Date().toISOString();
65137
- const nextRun = {
65138
- ...run,
65139
- status: 'abandoned',
65140
- updatedAt: now,
65141
- finishedAt: now,
65142
- };
65143
- void this.challengeProgress.saveRun(nextRun).catch((error) => {
65144
- console.warn('[Chessimals] challenge abandon save failed', error);
65145
- });
65146
- }
65147
65036
  startTutorial() {
65148
65037
  this.onlineSubscription?.unsubscribe();
65149
65038
  this.openedOnlineGameId = undefined;
@@ -65291,12 +65180,6 @@ class ChessimalsGameComponent {
65291
65180
  this.resetToModeSetup();
65292
65181
  }
65293
65182
  resetToModeSetup() {
65294
- this.abandonChallengeIfNeeded();
65295
- this.challengePhase.set('idle');
65296
- this.challengeRun.set(undefined);
65297
- this.challengeLastWon.set(undefined);
65298
- this.challengeLastBot.set(undefined);
65299
- this.challengeLastRoundStats.set(undefined);
65300
65183
  this.tutorialMode.set(false);
65301
65184
  this.resetFinishedLocalGameForNextVisit();
65302
65185
  this.onlineSubscription?.unsubscribe();
@@ -65341,8 +65224,6 @@ class ChessimalsGameComponent {
65341
65224
  }
65342
65225
  }
65343
65226
  requestRestartGame() {
65344
- if (this.isChallengeActive())
65345
- return;
65346
65227
  if (!this.canControlCurrentGame())
65347
65228
  return;
65348
65229
  this.confirmAction.set('restart');
@@ -65365,13 +65246,12 @@ class ChessimalsGameComponent {
65365
65246
  closeConfirmModal() {
65366
65247
  this.confirmAction.set(undefined);
65367
65248
  }
65368
- confirmPendingAction(token) {
65369
- if (token !== 'confirm') {
65370
- this.closeConfirmModal();
65371
- return;
65372
- }
65373
- const action = this.confirmAction();
65249
+ handleConfirmModalDismissed() {
65374
65250
  this.confirmAction.set(undefined);
65251
+ const action = this.confirmedAction();
65252
+ this.confirmedAction.set(undefined);
65253
+ if (!action)
65254
+ return;
65375
65255
  if (action === 'restart') {
65376
65256
  this.restartGame();
65377
65257
  return;
@@ -65388,6 +65268,15 @@ class ChessimalsGameComponent {
65388
65268
  this.resignGame();
65389
65269
  }
65390
65270
  }
65271
+ confirmPendingAction(token) {
65272
+ if (token !== 'confirm') {
65273
+ this.closeConfirmModal();
65274
+ return;
65275
+ }
65276
+ const action = this.confirmAction();
65277
+ this.confirmedAction.set(action);
65278
+ this.confirmAction.set(undefined);
65279
+ }
65391
65280
  resignGame() {
65392
65281
  const game = this.game();
65393
65282
  if (game.status === 'finished')
@@ -66237,18 +66126,6 @@ class ChessimalsGameComponent {
66237
66126
  error: () => this.onlineHistory.set([]),
66238
66127
  });
66239
66128
  }
66240
- watchChallengeStats() {
66241
- if (this.challengeStatsSubscription)
66242
- return;
66243
- this.challengeStatsSubscription = this.challengeProgress.watchStats().subscribe({
66244
- next: (stats) => this.challengeStats.set(stats ?? this.challengeProgress.emptyStats()),
66245
- error: () => this.challengeStats.set(this.challengeProgress.emptyStats()),
66246
- });
66247
- this.challengeRunsSubscription = this.challengeProgress.watchRecentRuns(4).subscribe({
66248
- next: (runs) => this.challengeHistory.set(runs),
66249
- error: () => this.challengeHistory.set([]),
66250
- });
66251
- }
66252
66129
  unlockedLabel(color) {
66253
66130
  return this.game().players[color].powerUnlocked ? this.t('chessimalsUnlocked') : this.t('chessimalsLocked');
66254
66131
  }
@@ -66280,104 +66157,6 @@ class ChessimalsGameComponent {
66280
66157
  botProfileTendency(profile) {
66281
66158
  return this.t(`chessimalsBot${this.capitalize(profile.id)}Tendency`);
66282
66159
  }
66283
- botProfileAvatar(profileId) {
66284
- return this.botProfiles.find((profile) => profile.id === profileId)?.avatar ?? '♟';
66285
- }
66286
- challengeOpeningBot() {
66287
- return this.challengeLadder[0];
66288
- }
66289
- challengeBotName(bot) {
66290
- const profile = this.botProfiles.find((item) => item.id === bot.profileId);
66291
- return profile ? this.botProfileLabel(profile) : this.t('chessimalsBotName');
66292
- }
66293
- challengeRunStatusLabel(run) {
66294
- if (run.status === 'completed')
66295
- return this.t('chessimalsChallengeStatusCompleted');
66296
- if (run.status === 'failed')
66297
- return this.t('chessimalsChallengeStatusFailed');
66298
- if (run.status === 'abandoned')
66299
- return this.t('chessimalsChallengeStatusAbandoned');
66300
- return this.t('chessimalsChallengeStatusActive');
66301
- }
66302
- challengeRunLine(run) {
66303
- return this.t('chessimalsChallengeRunLine')
66304
- .replace('{round}', String(run.currentRound))
66305
- .replace('{wins}', String(run.wins));
66306
- }
66307
- isChallengeActive() {
66308
- return this.challengePhase() !== 'idle' && !!this.challengeRun();
66309
- }
66310
- challengeRoundLabel() {
66311
- const run = this.challengeRun();
66312
- if (!run)
66313
- return '-';
66314
- return `${run.currentRound}/${this.challengeLadder.length}`;
66315
- }
66316
- challengeLivesLabel() {
66317
- const run = this.challengeRun();
66318
- if (!run)
66319
- return '-';
66320
- return '♥'.repeat(Math.max(0, run.livesRemaining)) || '0';
66321
- }
66322
- challengeOutcomeTitle() {
66323
- const phase = this.challengePhase();
66324
- if (phase === 'completed')
66325
- return this.t('chessimalsChallengeCompletedTitle');
66326
- if (phase === 'failed')
66327
- return this.t('chessimalsChallengeFailedTitle');
66328
- return this.challengeLastWon()
66329
- ? this.t('chessimalsChallengeRoundWonTitle')
66330
- : this.t('chessimalsChallengeRoundLostTitle');
66331
- }
66332
- challengeOutcomeBody() {
66333
- const run = this.challengeRun();
66334
- const stats = this.challengeLastRoundStats();
66335
- const bot = this.challengeLastBot() ?? this.activeChallengeBot();
66336
- const botName = bot ? this.challengeBotName(bot) : this.t('chessimalsBotName');
66337
- const bodyKey = this.challengePhase() === 'completed'
66338
- ? 'chessimalsChallengeCompletedBody'
66339
- : this.challengePhase() === 'failed'
66340
- ? 'chessimalsChallengeFailedBody'
66341
- : this.challengeLastWon()
66342
- ? 'chessimalsChallengeRoundWonBody'
66343
- : 'chessimalsChallengeRoundLostBody';
66344
- return this.t(bodyKey)
66345
- .replace('{bot}', botName)
66346
- .replace('{lives}', String(run?.livesRemaining ?? 0))
66347
- .replace('{wins}', String(run?.wins ?? 0))
66348
- .replace('{powers}', String(this.totalChallengePowers(stats)));
66349
- }
66350
- challengeHasNewRecord() {
66351
- return this.challengeNewRecord();
66352
- }
66353
- totalChallengePowers(stats) {
66354
- if (!stats)
66355
- return 0;
66356
- return stats.powersUsed.eagle + stats.powersUsed.bull + stats.powersUsed.kangaroo + stats.powersUsed.lion;
66357
- }
66358
- createChallengeRoundStats(game) {
66359
- const stats = {
66360
- powersUsed: { eagle: 0, bull: 0, kangaroo: 0, lion: 0 },
66361
- powerCaptures: 0,
66362
- promotions: game.winner === 'white' && game.winnerReason === 'promotion' ? 1 : 0,
66363
- captures: 0,
66364
- moves: 0,
66365
- };
66366
- for (const entry of game.moveHistory ?? []) {
66367
- const move = entry.move;
66368
- if (!move || !move.pieceId.startsWith('W'))
66369
- continue;
66370
- stats.moves += 1;
66371
- if (move.capturesPieceId)
66372
- stats.captures += 1;
66373
- if (!move.animal)
66374
- continue;
66375
- stats.powersUsed[move.animal] += 1;
66376
- if (move.capturesPieceId)
66377
- stats.powerCaptures += 1;
66378
- }
66379
- return stats;
66380
- }
66381
66160
  animalLabel(type) {
66382
66161
  return this.t(`chessimalsAnimal${this.capitalize(type)}`);
66383
66162
  }
@@ -66547,61 +66326,6 @@ class ChessimalsGameComponent {
66547
66326
  </div>
66548
66327
  </article>
66549
66328
 
66550
- <article class="chessimals-challenge-card">
66551
- <div class="chessimals-challenge-card__copy">
66552
- <span>{{ t('chessimalsChallengeEyebrow') }}</span>
66553
- <h2>{{ t('chessimalsChallengeTitle') }}</h2>
66554
- <p>{{ t('chessimalsChallengeBody') }}</p>
66555
- </div>
66556
- <div class="chessimals-challenge-rival">
66557
- <span aria-hidden="true">{{ botProfileAvatar(challengeOpeningBot().profileId) }}</span>
66558
- <div>
66559
- <small>{{ t('chessimalsChallengeFirstRival') }}</small>
66560
- <strong>{{ challengeBotName(challengeOpeningBot()) }}</strong>
66561
- <p>{{ t(challengeOpeningBot().introKey) }}</p>
66562
- </div>
66563
- </div>
66564
- <div class="chessimals-challenge-card__stats">
66565
- <span>
66566
- <small>{{ t('chessimalsChallengeLives') }}</small>
66567
- <strong>3</strong>
66568
- </span>
66569
- <span>
66570
- <small>{{ t('chessimalsChallengeBestRound') }}</small>
66571
- <strong>{{ challengeStats().bestRoundReached || '-' }}</strong>
66572
- </span>
66573
- <span>
66574
- <small>{{ t('chessimalsChallengeBestStreak') }}</small>
66575
- <strong>{{ challengeStats().bestWinStreak || '-' }}</strong>
66576
- </span>
66577
- </div>
66578
- <div class="chessimals-challenge-path" [attr.aria-label]="t('chessimalsChallengePath')">
66579
- @for (bot of challengeLadder; track bot.id) {
66580
- <span
66581
- [class.is-cleared]="challengeStats().bestRoundReached >= bot.round"
66582
- [class.is-current]="challengeStats().bestRoundReached + 1 === bot.round"
66583
- [attr.title]="challengeBotName(bot)"
66584
- >
66585
- {{ botProfileAvatar(bot.profileId) }}
66586
- </span>
66587
- }
66588
- </div>
66589
- @if (challengeHistory().length) {
66590
- <div class="chessimals-challenge-history">
66591
- <small>{{ t('chessimalsChallengeRecentRuns') }}</small>
66592
- @for (run of challengeHistory(); track run.id) {
66593
- <span>
66594
- <b>{{ challengeRunStatusLabel(run) }}</b>
66595
- {{ challengeRunLine(run) }}
66596
- </span>
66597
- }
66598
- </div>
66599
- }
66600
- <button class="chessimals-primary" type="button" (click)="startChallenge()">
66601
- {{ t('chessimalsChallengeStart') }}
66602
- </button>
66603
- </article>
66604
-
66605
66329
  <div class="chessimals-size" role="radiogroup" [attr.aria-label]="t('chessimalsBoardSize')">
66606
66330
  @for (size of boardSizes; track size) {
66607
66331
  <button
@@ -66874,16 +66598,6 @@ class ChessimalsGameComponent {
66874
66598
  }
66875
66599
 
66876
66600
  <div class="chessimals-status">
66877
- @if (isChallengeActive()) {
66878
- <div>
66879
- <small>{{ t('chessimalsChallengeRound') }}</small>
66880
- <strong>{{ challengeRoundLabel() }}</strong>
66881
- </div>
66882
- <div>
66883
- <small>{{ t('chessimalsChallengeLives') }}</small>
66884
- <strong>{{ challengeLivesLabel() }}</strong>
66885
- </div>
66886
- }
66887
66601
  <div>
66888
66602
  <small>{{ t('chessimalsMoves') }}</small>
66889
66603
  <strong>{{ game().moveCount }}</strong>
@@ -67162,54 +66876,6 @@ class ChessimalsGameComponent {
67162
66876
  </div>
67163
66877
  </div>
67164
66878
  }
67165
- @if (isChallengeActive()) {
67166
- <div class="chessimals-challenge-summary">
67167
- <small>{{ t('chessimalsChallengeTitle') }}</small>
67168
- <strong>{{ challengeOutcomeTitle() }}</strong>
67169
- <p>{{ challengeOutcomeBody() }}</p>
67170
- @if (challengeHasNewRecord()) {
67171
- <div class="chessimals-challenge-record">
67172
- <span aria-hidden="true">★</span>
67173
- <strong>{{ t('chessimalsChallengeNewRecord') }}</strong>
67174
- </div>
67175
- }
67176
- @if (challengeLastRoundStats(); as roundStats) {
67177
- <div class="chessimals-challenge-summary__stats">
67178
- <span>
67179
- <small>{{ t('chessimalsChallengePowersUsed') }}</small>
67180
- <b>{{ totalChallengePowers(roundStats) }}</b>
67181
- </span>
67182
- <span>
67183
- <small>{{ t('chessimalsChallengePowerCaptures') }}</small>
67184
- <b>{{ roundStats.powerCaptures }}</b>
67185
- </span>
67186
- <span>
67187
- <small>{{ t('chessimalsChallengePromotions') }}</small>
67188
- <b>{{ roundStats.promotions }}</b>
67189
- </span>
67190
- </div>
67191
- }
67192
- @if (challengePhase() === 'between' && activeChallengeBot(); as nextBot) {
67193
- <div class="chessimals-challenge-rival chessimals-challenge-rival--next">
67194
- <span aria-hidden="true">{{ botProfileAvatar(nextBot.profileId) }}</span>
67195
- <div>
67196
- <small>{{ t('chessimalsChallengeNextRivalLabel') }}</small>
67197
- <strong>{{ challengeBotName(nextBot) }}</strong>
67198
- <p>{{ t(nextBot.introKey) }}</p>
67199
- </div>
67200
- </div>
67201
- }
67202
- @if (challengePhase() === 'between') {
67203
- <button class="chessimals-primary" type="button" (click)="continueChallenge()">
67204
- {{ t('chessimalsChallengeNextRival') }}
67205
- </button>
67206
- } @else {
67207
- <button class="chessimals-primary" type="button" (click)="startChallenge()">
67208
- {{ t('chessimalsChallengePlayAgain') }}
67209
- </button>
67210
- }
67211
- </div>
67212
- }
67213
66879
  @if (seriesSummary()) {
67214
66880
  <div class="chessimals-series">
67215
66881
  <small>{{ t('chessimalsSeriesTitle') }}</small>
@@ -67301,7 +66967,7 @@ class ChessimalsGameComponent {
67301
66967
  {{ rematchActionLabel() }}
67302
66968
  </button>
67303
66969
  }
67304
- @if (game().mode !== 'online' && !isChallengeActive()) {
66970
+ @if (game().mode !== 'online') {
67305
66971
  <button class="chessimals-secondary" type="button" (click)="requestRestartGame()">
67306
66972
  {{ t('restart') }}
67307
66973
  </button>
@@ -67458,7 +67124,7 @@ class ChessimalsGameComponent {
67458
67124
  <ion-modal
67459
67125
  [isOpen]="!!confirmAction()"
67460
67126
  cssClass="val-modal-adaptive"
67461
- (didDismiss)="closeConfirmModal()"
67127
+ (didDismiss)="handleConfirmModalDismissed()"
67462
67128
  >
67463
67129
  <ng-template>
67464
67130
  <val-modal-layout
@@ -67472,7 +67138,7 @@ class ChessimalsGameComponent {
67472
67138
  />
67473
67139
  </ng-template>
67474
67140
  </ion-modal>
67475
- `, isInline: true, styles: [":host{display:block}.chessimals-shell{--chessimals-panel: #ffffff;--chessimals-surface: #fffaf1;--chessimals-border: rgba(46, 58, 44, .18);--chessimals-text: #2e3a2c;--chessimals-muted: #51643d;--chessimals-soft: rgba(111, 122, 60, .1);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-selected: #37f28a;--chessimals-selected-rgb: 55, 242, 138;--chessimals-magic: #f7d45a;--chessimals-magic-rgb: 247, 212, 90;--chessimals-magic-hot: #fff56f;--chessimals-magic-deep: #b77a18;--chessimals-warning: #f4c542;--chessimals-warning-rgb: 244, 197, 66;--chessimals-move: var(--chessimals-sky);--chessimals-move-rgb: var(--chessimals-sky-rgb);--chessimals-capture: #1fcdb3;--chessimals-capture-rgb: 31, 205, 179;--chessimals-last: #8c6b4f;--chessimals-last-rgb: 140, 107, 79;--chessimals-cell-light: #f3f4e8;--chessimals-cell-dark: #7f944d;--chessimals-board-shadow: rgba(46, 58, 44, .14);--chessimals-piece-white-fill: #ffffff;--chessimals-piece-white-side: #f3eadb;--chessimals-piece-white-line: rgba(82, 65, 46, .12);--chessimals-piece-white-shadow: drop-shadow(0 0 1px rgba(84, 62, 34, .52)) drop-shadow(0 .18rem .12rem rgba(72, 58, 36, .22)) drop-shadow(0 .34rem .42rem rgba(72, 58, 36, .22));--chessimals-piece-black-fill: #242936;--chessimals-piece-black-side: #171b25;--chessimals-piece-black-line: rgba(255, 255, 255, .1);--chessimals-piece-black-shadow: drop-shadow(0 0 1px rgba(255, 255, 255, .34)) drop-shadow(0 .18rem .1rem rgba(255, 255, 255, .12)) drop-shadow(0 .32rem .42rem rgba(0, 0, 0, .36));--chessimals-piece-gold: #c79a42;--chessimals-piece-gold-dark: #8a5f22;--chessimals-animal-face-bg: #fffdf7;--chessimals-animal-face-inner-bg: #ffffff;--chessimals-animal-face-border: rgba(46, 58, 44, .12);--chessimals-animal-face-filter: drop-shadow(0 .12rem .16rem rgba(46, 58, 44, .18));--chessimals-animal-face-locked-filter: grayscale(.2) saturate(.72);--chessimals-animal-face-locked-img-opacity: .72;display:grid;gap:1.125rem;width:100%;max-width:min(100%,60rem);margin:0 auto;color:var(--chessimals-text)}@media (prefers-color-scheme: dark){.chessimals-shell{--chessimals-panel: #172116;--chessimals-surface: #0f170f;--chessimals-border: rgba(242, 230, 213, .2);--chessimals-text: #f6f3e9;--chessimals-muted: #c8cfb1;--chessimals-soft: rgba(111, 122, 60, .22);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-cell-light: #f3f4e8;--chessimals-cell-dark: #7f944d;--chessimals-board-shadow: rgba(0, 0, 0, .34);--chessimals-animal-face-border: rgba(242, 230, 213, .24)}}.chessimals-resume-splash{order:0;position:fixed;inset:0;z-index:1000;display:grid;place-items:center;align-content:center;gap:.65rem;padding:1.5rem;text-align:center;color:var(--chessimals-text);background:radial-gradient(circle at 50% 42%,rgba(var(--chessimals-primary-rgb),.18),transparent 22rem),color-mix(in srgb,var(--chessimals-panel) 92%,transparent);backdrop-filter:blur(.9rem)}.chessimals-resume-splash__paw{display:grid;place-items:center;width:clamp(4.6rem,16vw,5.6rem);height:clamp(4.6rem,16vw,5.6rem);border-radius:1.55rem;background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.96),transparent 34%),linear-gradient(145deg,#fffffff5,rgba(var(--chessimals-secondary-rgb),.22)),color-mix(in srgb,var(--chessimals-panel) 82%,white);border:.12rem solid rgba(var(--chessimals-primary-rgb),.22);box-shadow:0 1.15rem 2.6rem rgba(var(--ion-color-dark-rgb, 47, 42, 58),.16),0 0 0 .42rem #ffffff6b,inset 0 -.25rem .6rem rgba(var(--chessimals-primary-rgb),.08);animation:chessimals-resume-pulse 1.2s ease-in-out infinite;font-size:clamp(2.45rem,9vw,3.35rem);line-height:1;filter:drop-shadow(0 .28rem .38rem rgba(var(--ion-color-dark-rgb, 47, 42, 58),.18))}.chessimals-resume-splash strong{font-size:clamp(1.55rem,5vw,2.4rem);font-weight:950;line-height:1.05}.chessimals-resume-splash p{max-width:24rem;margin:0;color:var(--chessimals-muted);font-size:1rem;line-height:1.35}@keyframes chessimals-resume-pulse{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-.25rem) scale(1.04)}}@keyframes chessimals-spin{to{transform:rotate(360deg)}}@keyframes chessimals-online-pulse{0%,to{transform:scale(1);opacity:.78}50%{transform:scale(1.22);opacity:1}}:host-context(html.ion-palette-dark) .chessimals-shell,:host-context([data-theme=\"dark\"]) .chessimals-shell{--chessimals-panel: #172116;--chessimals-surface: #0f170f;--chessimals-border: rgba(246, 227, 213, .22);--chessimals-text: #f6f3e9;--chessimals-muted: #c8cfb1;--chessimals-soft: rgba(111, 122, 60, .22);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-cell-light: #e8eadc;--chessimals-cell-dark: #5f7040;--chessimals-board-shadow: rgba(0, 0, 0, .34);--chessimals-capture: #66f2d7;--chessimals-capture-rgb: 102, 242, 215;--chessimals-last: #cdbe9b;--chessimals-last-rgb: 205, 190, 155;--chessimals-piece-white-fill: #fffaff;--chessimals-piece-white-side: #f0e5d4;--chessimals-piece-white-line: rgba(82, 65, 46, .12);--chessimals-piece-white-shadow: drop-shadow(0 0 1px rgba(84, 62, 34, .48)) drop-shadow(0 .18rem .12rem rgba(0, 0, 0, .24)) drop-shadow(0 .34rem .42rem rgba(0, 0, 0, .3));--chessimals-piece-black-fill: #202633;--chessimals-piece-black-side: #111620;--chessimals-piece-black-line: rgba(255, 255, 255, .12);--chessimals-piece-black-shadow: drop-shadow(0 0 1px rgba(255, 255, 255, .34)) drop-shadow(0 .18rem .1rem rgba(255, 255, 255, .14)) drop-shadow(0 .34rem .44rem rgba(0, 0, 0, .52));--chessimals-animal-face-bg: #fffdf7;--chessimals-animal-face-inner-bg: #ffffff;--chessimals-animal-face-border: rgba(242, 230, 213, .24);--chessimals-animal-face-filter: drop-shadow(0 .12rem .16rem rgba(0, 0, 0, .22));--chessimals-animal-face-locked-filter: grayscale(.32) saturate(.72);--chessimals-animal-face-locked-img-opacity: .58}.chessimals-hero{display:grid;gap:.75rem;justify-items:center;overflow:hidden;border-radius:1.75rem;padding:clamp(1.25rem,5vw,2.5rem);background:radial-gradient(circle at 18% 12%,rgba(255,255,255,.92),transparent 20%),linear-gradient(135deg,#fdf8ee,#fff 40%,#edf3df);color:var(--chessimals-text);text-align:center;border:1px solid var(--chessimals-border)}:host-context(html.ion-palette-dark) .chessimals-hero,:host-context([data-theme=\"dark\"]) .chessimals-hero{background:radial-gradient(circle at 18% 12%,rgba(255,255,255,.08),transparent 22%),linear-gradient(135deg,#111a10,#172116 48%,#0f170f);color:var(--chessimals-text);border-color:#f6e3d538}.chessimals-hero__logo{display:grid;place-items:center;width:min(22rem,82vw);max-width:100%;padding:.5rem;border-radius:1.35rem;background:#fff;box-shadow:0 1rem 2.5rem #2e3a2c1a,inset 0 0 0 1px #2e3a2c14}.chessimals-hero__logo img{display:block;width:100%;height:auto;max-height:12rem;object-fit:contain;border-radius:1rem}.chessimals-hero h1{margin:0;font-size:clamp(2.4rem,9vw,4.5rem);line-height:.95;font-weight:950}.chessimals-hero p,.chessimals-howto p,.chessimals-tip p,.chessimals-result p,.chessimals-powers p{margin:0;line-height:1.45}.chessimals-panel,.chessimals-game,.chessimals-powers{display:grid;gap:1rem;border:1px solid var(--chessimals-border);border-radius:1.625rem;padding:clamp(1rem,4vw,1.5rem);background:var(--chessimals-panel)}.chessimals-online{display:grid;gap:.875rem;border:1px solid var(--chessimals-border);border-radius:1.375rem;padding:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--chessimals-panel)}.chessimals-online--waiting{order:2;border-color:rgba(var(--chessimals-primary-rgb),.34)}.chessimals-online h2,.chessimals-online p{margin:0}.chessimals-online h2{font-size:1.1rem;font-weight:950}.chessimals-online p{color:var(--chessimals-muted);line-height:1.4}.chessimals-online__create,.chessimals-online__join{display:grid;gap:.55rem}.chessimals-online__create small{color:var(--chessimals-muted);font-weight:800;line-height:1.35}.chessimals-online__join{border-top:1px solid var(--chessimals-border);padding-top:.85rem}.chessimals-online__join>strong{font-size:.95rem;font-weight:950}.chessimals-online__error{border-radius:.875rem;padding:.7rem .8rem;background:rgba(var(--ion-color-danger-rgb, 235, 68, 90),.12);color:var(--ion-color-danger, #eb445a)!important;font-weight:800}.chessimals-online__loading{display:flex;align-items:center;gap:.625rem;border:1px solid rgba(var(--chessimals-primary-rgb),.22);border-radius:999px;padding:.65rem .85rem;background:rgba(var(--chessimals-primary-rgb),.08);color:var(--chessimals-text);font-size:.92rem;font-weight:900}.chessimals-online__loading span{width:1rem;height:1rem;border:.15rem solid rgba(var(--chessimals-primary-rgb),.24);border-top-color:var(--chessimals-primary);border-radius:999px;animation:chessimals-spin .75s linear infinite}.chessimals-online-code{display:grid;gap:.4rem;font-weight:950}.chessimals-online-code input{width:100%;min-height:3.3rem;border:1px solid var(--chessimals-border);border-radius:999px;padding:0 1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;font-weight:850;letter-spacing:.05em;text-transform:uppercase}.chessimals-game-code{display:grid;gap:.2rem;border-radius:1rem;padding:.85rem 1rem;background:var(--chessimals-soft)}.chessimals-game-code small{color:var(--chessimals-muted);font-weight:900;letter-spacing:.06em;text-transform:uppercase}.chessimals-game-code strong{font-size:clamp(1.35rem,6vw,2rem);font-weight:950;letter-spacing:.05em}.chessimals-online-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.chessimals-history{gap:.75rem}.chessimals-history__heading{display:flex;align-items:start;justify-content:space-between;gap:.75rem}.chessimals-history__list{display:grid;gap:.5rem}.chessimals-history__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;border:1px solid var(--chessimals-border);border-radius:1rem;padding:.7rem .8rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-history__item span{display:grid;gap:.1rem;min-width:0}.chessimals-history__item strong{font-weight:950;letter-spacing:.04em}.chessimals-history__item small{overflow:hidden;color:var(--chessimals-muted);font-size:.82rem;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.chessimals-history__item em{flex:0 0 auto;color:var(--chessimals-primary);font-size:.86rem;font-style:normal;font-weight:950}.chessimals-home-settings{gap:.8rem}.chessimals-home-settings__actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.625rem}.chessimals-pending-player{display:flex;align-items:center;gap:.7rem;border:1px solid rgba(var(--chessimals-primary-rgb),.22);border-radius:1rem;padding:.75rem;background:var(--chessimals-soft)}.chessimals-pending-player div{display:grid;gap:.1rem;min-width:0}.chessimals-pending-player small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.07em;text-transform:uppercase}.chessimals-pending-player strong{overflow:hidden;font-size:1.05rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-game{display:grid;gap:.875rem}.chessimals-turn-card{order:1;display:flex;align-items:center;justify-content:space-between;gap:.625rem;min-height:3.75rem;overflow:visible;border:1px solid rgba(var(--chessimals-primary-rgb),.24);border-radius:1rem;padding:.55rem .65rem;background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.34),transparent 18%),linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.2),rgba(var(--chessimals-secondary-rgb),.1))}.chessimals-turn-card.is-black-turn{border-color:rgba(var(--ion-color-dark-rgb, 47, 42, 58),.28);background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.12),transparent 18%),linear-gradient(135deg,rgba(var(--ion-color-dark-rgb, 47, 42, 58),.14),rgba(var(--chessimals-primary-rgb),.1))}.chessimals-turn-card.is-finished{border-color:rgba(var(--ion-color-success-rgb, 45, 211, 111),.42);background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.35),transparent 18%),linear-gradient(135deg,rgba(var(--ion-color-success-rgb, 45, 211, 111),.18),rgba(var(--chessimals-primary-rgb),.12))}.chessimals-turn-card.is-finished .chessimals-turn-card__chip{color:var(--ion-color-success, #2dd36f)}.chessimals-turn-card.is-your-turn{border-color:rgba(var(--chessimals-primary-rgb),.48);box-shadow:0 0 0 .12rem rgba(var(--chessimals-primary-rgb),.12),0 .95rem 2rem rgba(var(--chessimals-primary-rgb),.14)}.chessimals-turn-card.is-your-turn .chessimals-turn-card__chip{background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);box-shadow:0 0 0 .32rem rgba(var(--chessimals-primary-rgb),.14);animation:chessimals-turn-pulse 1.45s ease-in-out infinite}.chessimals-turn-card.is-waiting-turn .chessimals-turn-card__chip{color:var(--chessimals-muted)}@keyframes chessimals-turn-pulse{0%,to{transform:translateZ(0) scale(1)}50%{transform:translateZ(0) scale(1.035)}}.chessimals-turn-card__copy{display:grid;min-width:0;gap:.15rem}.chessimals-turn-card__chip{justify-self:start;border-radius:999px;padding:.2rem .5rem;background:var(--chessimals-panel);color:var(--chessimals-primary);font-size:.62rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-turn-card strong{display:block;min-width:0;font-size:clamp(1rem,3.5vw,1.25rem);line-height:1.08;font-weight:950;overflow-wrap:anywhere}.chessimals-turn-card p{display:block;min-width:0;margin:0;color:var(--chessimals-muted);font-size:.78rem;line-height:1.22}.chessimals-player-strip{display:flex;flex:0 0 auto;align-items:center;gap:.45rem;min-width:10rem;max-width:min(17rem,42%);border:1px solid var(--chessimals-border);border-radius:999px;padding:.3rem .55rem .3rem .35rem;background:rgba(var(--ion-color-light-rgb, 244, 245, 248),.72)}:host-context(html.ion-palette-dark) .chessimals-player-strip,:host-context([data-theme=\"dark\"]) .chessimals-player-strip{background:#ffffff0f}.chessimals-player-strip val-user-avatar{display:inline-flex;flex:0 0 auto;line-height:0}.chessimals-player-strip__avatar{display:grid;place-items:center;flex:0 0 2.25rem;width:2.25rem;height:2.25rem;aspect-ratio:1 / 1;overflow:hidden;border-radius:999px;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);font-size:.875rem;line-height:1}.chessimals-player-strip__avatar--initials{font-size:.78rem;font-weight:950}:host ::ng-deep .chessimals-player-strip .chessimals-turn-avatar{width:2.25rem;min-width:2.25rem;height:2.25rem;border-radius:50%}.chessimals-player-strip__text{display:grid;min-width:0;gap:.05rem;line-height:1.1}.chessimals-player-strip__text span{color:var(--chessimals-muted);font-size:.58rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-player-strip__text strong{overflow:hidden;font-size:.82rem;line-height:1.08;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-player-strip__text small{overflow:hidden;color:var(--chessimals-muted);font-size:.66rem;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.chessimals-arena{order:4;display:grid;gap:.875rem;align-items:start}.chessimals-howto,.chessimals-tip,.chessimals-result,.chessimals-replay,.chessimals-rematch-status{display:grid;gap:.375rem;padding:1rem;border-radius:1.25rem;background:var(--chessimals-soft)}.chessimals-howto{border:1px solid var(--chessimals-border);background:var(--chessimals-soft);color:var(--chessimals-text)}.chessimals-howto p{color:var(--chessimals-muted)}.chessimals-howto__actions{display:flex;flex-wrap:wrap;gap:.625rem}:host-context(html.ion-palette-dark) .chessimals-howto,:host-context([data-theme=\"dark\"]) .chessimals-howto{border-color:#f6e3d533;background:#172116;color:#f6f3e9}:host-context(html.ion-palette-dark) .chessimals-howto p,:host-context([data-theme=\"dark\"]) .chessimals-howto p{color:#c8cfb1}.chessimals-result{order:5}.chessimals-result__stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;margin-top:.35rem}.chessimals-result__stats span{display:grid;gap:.15rem;min-width:0;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:.85rem;padding:.58rem .6rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--chessimals-panel)}.chessimals-result__stats small{overflow:hidden;color:var(--chessimals-muted);font-size:.68rem;font-weight:950;letter-spacing:.05em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.chessimals-result__stats b{overflow:hidden;color:var(--chessimals-text);font-size:.92rem;font-weight:950;line-height:1.12;text-overflow:ellipsis;white-space:nowrap}.chessimals-result__detail{margin:.2rem 0 0}.chessimals-bot-report{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.75rem;margin-top:.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1rem;padding:.78rem .85rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.1),transparent),var(--chessimals-panel)}.chessimals-bot-report>span{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:.85rem;background:rgba(var(--chessimals-secondary-rgb),.14);font-size:1.45rem;box-shadow:inset 0 0 0 1px rgba(var(--chessimals-primary-rgb),.14)}.chessimals-bot-report div{display:grid;gap:.12rem;min-width:0}.chessimals-bot-report small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-bot-report strong{color:var(--chessimals-text);font-size:1rem;font-weight:950;line-height:1.15}.chessimals-bot-report p{margin:0;color:var(--chessimals-muted);font-size:.84rem;font-weight:820;line-height:1.28}.chessimals-online-status{order:3;display:grid;grid-template-columns:1.35rem minmax(0,1fr);align-items:center;gap:.85rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1.1rem;padding:.85rem .95rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.09),transparent),var(--chessimals-panel)}.chessimals-online-status>span{justify-self:center;width:.72rem;height:.72rem;border-radius:999px;background:var(--chessimals-primary);box-shadow:0 0 0 .38rem rgba(var(--chessimals-primary-rgb),.12)}.chessimals-online-status.is-syncing>span{animation:chessimals-online-pulse .9s ease-in-out infinite}.chessimals-online-status.is-error{border-color:rgba(var(--ion-color-danger-rgb, 235, 68, 90),.28);background:linear-gradient(135deg,rgba(var(--ion-color-danger-rgb, 235, 68, 90),.1),transparent),var(--chessimals-panel)}.chessimals-online-status.is-error>span{background:var(--ion-color-danger, #eb445a);box-shadow:0 0 0 .38rem rgba(var(--ion-color-danger-rgb, 235, 68, 90),.12)}.chessimals-online-status div{display:grid;gap:.12rem;min-width:0}.chessimals-online-status strong{overflow:hidden;color:var(--chessimals-text);font-size:.95rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-online-status p{margin:0;color:var(--chessimals-muted);font-size:.84rem;font-weight:780;line-height:1.28}.chessimals-series{display:grid;gap:.18rem;margin-top:.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1rem;padding:.78rem .85rem;background:linear-gradient(135deg,rgba(var(--chessimals-secondary-rgb),.12),transparent),var(--chessimals-panel)}.chessimals-series--compact{margin-top:0}.chessimals-series small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-series strong{color:var(--chessimals-text);font-size:1rem;font-weight:950;line-height:1.15}.chessimals-series span{color:var(--chessimals-muted);font-size:.84rem;font-weight:820;line-height:1.28}.chessimals-replay{order:5;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;border:1px solid rgba(var(--chessimals-primary-rgb),.2);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.1),transparent),var(--chessimals-panel)}.chessimals-replay>div:first-child{display:grid;gap:.15rem;min-width:0}.chessimals-replay strong{font-size:1rem;font-weight:950}.chessimals-replay span{color:var(--chessimals-muted);font-size:.86rem;font-weight:800;line-height:1.25}.chessimals-replay__actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}.chessimals-replay__actions .chessimals-secondary{min-height:2.5rem;padding:0 .8rem}.chessimals-tutorial{order:3;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;padding:1rem;border:1px solid rgba(var(--chessimals-primary-rgb),.24);border-radius:1.25rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel)}.chessimals-tutorial>div{display:grid;gap:.18rem;min-width:0}.chessimals-tutorial small{color:var(--chessimals-primary);font-size:.76rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-tutorial strong{font-size:1rem;font-weight:950}.chessimals-tutorial p{margin:0;color:var(--chessimals-muted);font-size:.88rem;font-weight:780;line-height:1.35}.chessimals-tutorial .chessimals-secondary{min-height:2.5rem;padding:0 .85rem}.chessimals-rematch-status{order:5;border:1px solid rgba(var(--chessimals-primary-rgb),.22);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.12),transparent),var(--chessimals-panel)}.chessimals-rematch-status.is-incoming{border-color:rgba(var(--ion-color-success-rgb, 45, 211, 111),.38);background:linear-gradient(135deg,rgba(var(--ion-color-success-rgb, 45, 211, 111),.14),transparent),var(--chessimals-panel)}.chessimals-rematch-status strong{font-size:1rem;font-weight:950}.chessimals-rematch-status p{margin:0;color:var(--chessimals-muted);font-size:.88rem;line-height:1.35}.chessimals-rematch-player{background:#ffffff7a}:host-context(html.ion-palette-dark) .chessimals-rematch-player,:host-context([data-theme=\"dark\"]) .chessimals-rematch-player{background:#ffffff0f}.chessimals-rematch-status__actions{display:flex;justify-content:flex-end}.chessimals-rematch-status__actions .chessimals-secondary{min-height:2.5rem;padding:0 .95rem}.chessimals-howto h2,.chessimals-powers h2{margin:0;font-size:1.15rem;font-weight:950}.chessimals-challenge-card{display:grid;gap:.85rem;border:1px solid rgba(var(--chessimals-sky-rgb),.34);border-radius:1.25rem;padding:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-sky-rgb),.18),transparent 54%),linear-gradient(180deg,#ffffff9e,#fff3),var(--chessimals-panel);box-shadow:0 1rem 2.2rem #4f3a231f}.chessimals-challenge-card__copy{display:grid;gap:.28rem}.chessimals-challenge-card__copy span,.chessimals-challenge-summary small{color:var(--chessimals-sky);font-size:.72rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-challenge-card h2{margin:0;font-size:clamp(1.25rem,3.5vw,1.9rem);font-weight:1000}.chessimals-challenge-card p,.chessimals-challenge-summary p{margin:0;color:var(--chessimals-muted);font-size:.95rem;font-weight:780;line-height:1.35}.chessimals-challenge-card__stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem}.chessimals-challenge-rival{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.7rem;align-items:center;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1rem;padding:.7rem;background:#ffffff8a}.chessimals-challenge-rival>span{display:grid;place-items:center;width:2.65rem;height:2.65rem;border-radius:999px;background:rgba(var(--chessimals-primary-rgb),.12);font-size:1.45rem}.chessimals-challenge-rival div{display:grid;gap:.14rem;min-width:0}.chessimals-challenge-rival small,.chessimals-challenge-history small,.chessimals-challenge-summary__stats small{color:var(--chessimals-muted);font-size:.66rem;font-weight:900;text-transform:uppercase}.chessimals-challenge-rival strong{color:var(--chessimals-text);font-size:1rem;font-weight:1000}.chessimals-challenge-rival p{font-size:.84rem}.chessimals-challenge-rival--next{background:rgba(var(--chessimals-primary-rgb),.08)}.chessimals-challenge-card__stats span{display:grid;gap:.16rem;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:.95rem;padding:.55rem;background:#ffffff85}.chessimals-challenge-card__stats small{color:var(--chessimals-muted);font-size:.66rem;font-weight:900;text-transform:uppercase}.chessimals-challenge-card__stats strong{color:var(--chessimals-text);font-size:1.1rem;font-weight:1000}.chessimals-challenge-path{display:flex;flex-wrap:wrap;gap:.4rem}.chessimals-challenge-path span{display:grid;place-items:center;width:2.15rem;height:2.15rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:999px;background:#ffffff9e;font-size:1.08rem}.chessimals-challenge-path span.is-cleared{border-color:rgba(var(--ion-color-success-rgb, 45, 211, 111),.34);background:rgba(var(--ion-color-success-rgb, 45, 211, 111),.16)}.chessimals-challenge-path span.is-current{border-color:rgba(var(--chessimals-sky-rgb),.48);background:rgba(var(--chessimals-sky-rgb),.18);box-shadow:0 0 0 2px rgba(var(--chessimals-sky-rgb),.12)}.chessimals-challenge-history{display:grid;gap:.35rem;border-top:1px solid rgba(var(--chessimals-primary-rgb),.12);padding-top:.2rem}.chessimals-challenge-history span{display:flex;flex-wrap:wrap;gap:.35rem;color:var(--chessimals-muted);font-size:.82rem;font-weight:820}.chessimals-challenge-history b{color:var(--chessimals-text);font-weight:1000}.chessimals-challenge-summary{display:grid;gap:.45rem;border:1px solid rgba(var(--chessimals-sky-rgb),.24);border-radius:1rem;padding:.8rem;background:linear-gradient(135deg,rgba(var(--chessimals-sky-rgb),.12),transparent),#ffffff6b}.chessimals-challenge-summary strong{font-size:1rem;font-weight:1000}.chessimals-challenge-summary__stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.45rem}.chessimals-challenge-record{display:flex;align-items:center;gap:.45rem;border:1px solid rgba(var(--chessimals-sky-rgb),.34);border-radius:999px;padding:.45rem .65rem;background:rgba(var(--chessimals-sky-rgb),.14);color:var(--chessimals-text)}.chessimals-challenge-record span{display:grid;place-items:center;width:1.45rem;height:1.45rem;border-radius:999px;background:var(--chessimals-sky);color:#fffaf0;font-size:.82rem}.chessimals-challenge-record strong{font-size:.9rem}.chessimals-challenge-summary__stats span{display:grid;gap:.1rem;border:1px solid rgba(var(--chessimals-primary-rgb),.12);border-radius:.8rem;padding:.45rem;background:#ffffff70}.chessimals-challenge-summary__stats b{color:var(--chessimals-text);font-size:1rem;font-weight:1000}.chessimals-tip p,.chessimals-powers p{color:var(--chessimals-muted)}.chessimals-learn-more{justify-self:start;min-height:2.75rem;border:0;border-radius:999px;padding:0 1rem;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);font:inherit;font-weight:950;box-shadow:0 .75rem 1.6rem rgba(var(--chessimals-primary-rgb),.28)}.chessimals-size,.chessimals-mode,.chessimals-status{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.chessimals-status{order:3;grid-template-columns:repeat(3,minmax(0,1fr))}.chessimals-size button,.chessimals-mode button,.chessimals-status div{display:grid;gap:.2rem;align-content:center;min-width:0;min-height:3.875rem;padding:.55rem .65rem;border:1px solid var(--chessimals-border);border-radius:1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-size button.is-selected{border-color:var(--chessimals-primary);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16)}.chessimals-mode button.is-selected{border-color:var(--chessimals-primary);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16)}.chessimals-difficulty{display:flex;flex-wrap:wrap;gap:.55rem}.chessimals-difficulty button{min-height:2.75rem;border:1px solid var(--chessimals-border);border-radius:999px;padding:0 1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;font-weight:950}.chessimals-difficulty button.is-selected{border-color:var(--chessimals-primary);background:var(--chessimals-primary);color:#fff}.chessimals-bots{display:grid;grid-template-columns:repeat(auto-fit,minmax(9.5rem,1fr));gap:.625rem}.chessimals-bots button{display:grid;grid-template-columns:auto 1fr;grid-template-areas:\"avatar title\" \"avatar body\" \"avatar tendency\";column-gap:.55rem;row-gap:.12rem;min-width:0;min-height:4.75rem;border:1px solid var(--chessimals-border);border-radius:1rem;padding:.65rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-bots button>span{grid-area:avatar;display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:50%;background:rgba(var(--chessimals-primary-rgb),.12);font-size:1.2rem}.chessimals-bots button strong{grid-area:title;align-self:end;font-size:.95rem;font-weight:950}.chessimals-bots button small{grid-area:body;color:var(--chessimals-muted);font-size:.75rem;font-weight:750;line-height:1.25}.chessimals-bots button p{grid-area:tendency;margin:.12rem 0 0;color:var(--chessimals-muted);font-size:.72rem;font-weight:820;line-height:1.24}.chessimals-bots button.is-selected{border-color:var(--chessimals-primary);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16),0 .75rem 1.5rem rgba(var(--chessimals-primary-rgb),.1)}.chessimals-size strong,.chessimals-mode strong,.chessimals-status strong,.chessimals-result strong,.chessimals-rematch-status strong,.chessimals-tip strong{font-weight:950}.chessimals-status strong{min-width:0;font-size:clamp(.95rem,2.5vw,1.2rem);line-height:1.08;overflow-wrap:anywhere;white-space:normal}.chessimals-size small,.chessimals-mode small,.chessimals-status small{color:var(--chessimals-muted);font-size:.78rem;line-height:1.12}.chessimals-board-wrap{--chessimals-board-radius: min(.85rem, 14px);display:flex;justify-content:center;min-width:0;max-width:100%;overflow-x:auto;width:100%;padding:.25rem 0}.chessimals-board-wrap.is-orienting .chessimals-board-frame{animation:chessimals-orient-board .32s ease}.chessimals-board-wrap.is-finished{overflow-x:visible}.chessimals-board-frame{flex:0 1 58rem;min-width:0;width:100%;max-width:58rem;border-radius:var(--chessimals-board-radius)}.chessimals-board{position:relative;display:grid;grid-template-columns:repeat(var(--board-size),minmax(0,1fr));grid-template-rows:repeat(var(--board-size),minmax(0,1fr));min-width:0;width:100%;aspect-ratio:1 / 1;overflow:hidden;isolation:isolate;contain:paint;border:1px solid var(--chessimals-border);border-radius:var(--chessimals-board-radius);clip-path:inset(0 round var(--chessimals-board-radius));-webkit-mask-image:-webkit-radial-gradient(white,black);background:radial-gradient(ellipse at 16% 18%,rgba(255,255,255,.34),transparent 18%),radial-gradient(ellipse at 82% 78%,rgba(var(--chessimals-primary-rgb),.1),transparent 22%),radial-gradient(ellipse at 32% 68%,rgba(var(--chessimals-stone-rgb),.05),transparent 30%),radial-gradient(ellipse at 66% 34%,rgba(255,255,255,.08),transparent 24%),var(--chessimals-border);box-shadow:inset 0 0 0 1px #ffffff1a,0 .85rem 2.1rem var(--chessimals-board-shadow)}.chessimals-board-wrap.is-syncing .chessimals-board{cursor:wait}.chessimals-cell-coordinate{position:absolute;z-index:5;color:color-mix(in srgb,var(--chessimals-muted) 78%,var(--chessimals-text));font-size:.68rem;font-weight:950;letter-spacing:.02em;line-height:1;pointer-events:none;text-transform:uppercase;-webkit-user-select:none;user-select:none}.chessimals-cell-coordinate--rank{top:.2rem;left:.24rem}.chessimals-cell-coordinate--file{right:.24rem;bottom:.18rem}@keyframes chessimals-orient-board{0%{opacity:.72;filter:blur(.06rem);transform:scale(.985)}52%{opacity:.92;filter:blur(0);transform:scale(1.012)}to{opacity:1;filter:blur(0);transform:scale(1)}}.chessimals-center-line{position:absolute;top:50%;left:0;right:0;z-index:2;display:flex;align-items:center;justify-content:center;border-top:.08rem dashed rgba(var(--chessimals-primary-rgb),.56);filter:drop-shadow(0 0 .24rem rgba(var(--chessimals-primary-rgb),.26));pointer-events:none}.chessimals-power-trail{position:absolute;inset:0;z-index:5;pointer-events:none;--trail-color: rgba(var(--chessimals-magic-rgb), .88);--trail-glow: rgba(var(--chessimals-magic-rgb), .48)}.chessimals-power-trail.is-capture{--trail-color: rgba(var(--chessimals-capture-rgb), .86);--trail-glow: rgba(var(--chessimals-capture-rgb), .46)}.chessimals-power-trail.effect-eagle{--trail-color: rgba(255, 255, 255, .92);--trail-glow: rgba(120, 210, 255, .54)}.chessimals-power-trail.effect-bull{--trail-color: rgba(188, 131, 76, .86);--trail-glow: rgba(188, 131, 76, .36)}.chessimals-power-trail.effect-kangaroo{--trail-color: rgba(174, 124, 255, .86);--trail-glow: rgba(174, 124, 255, .42)}.chessimals-power-trail.effect-lion{--trail-color: rgba(255, 221, 120, .88);--trail-glow: rgba(255, 190, 56, .42)}.chessimals-power-trail>span{position:absolute;top:var(--trail-y);left:var(--trail-x);width:var(--trail-length);height:.45rem;border-radius:999px;background:linear-gradient(90deg,transparent,var(--trail-color) 42%,rgba(255,255,255,.92));box-shadow:0 0 .75rem var(--trail-glow),0 0 1.45rem var(--trail-glow);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0);transform-origin:0 50%;animation:chessimals-power-trail .72s ease-out both}.chessimals-power-trail.effect-eagle>span{height:.28rem;background:linear-gradient(90deg,transparent,rgba(255,255,255,.95) 44%,rgba(120,210,255,.58)),repeating-linear-gradient(90deg,transparent 0 .7rem,rgba(255,255,255,.66) .7rem .92rem);animation-name:chessimals-eagle-trail}.chessimals-power-trail.effect-bull>span{height:.72rem;background:repeating-linear-gradient(90deg,rgba(255,255,255,.42) 0 .18rem,transparent .18rem .42rem),linear-gradient(90deg,transparent,var(--trail-color),rgba(255,255,255,.86));animation-name:chessimals-bull-trail}.chessimals-power-trail.effect-kangaroo>span{height:1rem;border-top:.16rem dashed var(--trail-color);background:transparent;box-shadow:none;filter:drop-shadow(0 0 .8rem var(--trail-glow));animation-name:chessimals-kangaroo-trail}.chessimals-power-trail.effect-lion>span{height:.62rem;background:linear-gradient(90deg,transparent,var(--trail-color),rgba(255,255,255,.82)),repeating-linear-gradient(115deg,rgba(255,255,255,.55) 0 .12rem,transparent .12rem .34rem);animation-name:chessimals-lion-trail}@keyframes chessimals-power-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0)}28%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.72)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}@keyframes chessimals-eagle-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0) skew(-10deg)}30%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.82) skew(-10deg)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1.05) skew(-10deg)}}@keyframes chessimals-bull-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0) scaleY(1)}38%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.7) scaleY(1.18)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1) scaleY(.82)}}@keyframes chessimals-kangaroo-trail{0%{opacity:0;transform:translateY(-.4rem) rotate(var(--trail-angle)) scaleX(0)}34%{opacity:1;transform:translateY(-1.2rem) rotate(var(--trail-angle)) scaleX(.62)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}@keyframes chessimals-lion-trail{0%{opacity:0;filter:saturate(1);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0)}36%{opacity:1;filter:saturate(1.4);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.76)}to{opacity:0;filter:saturate(1.1);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}.chessimals-board-overlay{position:absolute;inset:0;z-index:8;display:grid;place-content:center;gap:.5rem;padding:1.25rem;background:radial-gradient(circle at 50% 34%,rgba(255,226,129,.34),transparent 24%),radial-gradient(circle at 50% 52%,rgba(var(--chessimals-primary-rgb),.34),transparent 42%),linear-gradient(135deg,#140c16e0,#08120dc7);color:#fff;text-align:center;backdrop-filter:blur(2px);overflow:hidden}.chessimals-board-overlay.is-defeat{background:radial-gradient(circle at 50% 34%,rgba(143,168,206,.26),transparent 24%),radial-gradient(circle at 50% 52%,rgba(72,86,115,.42),transparent 42%),linear-gradient(135deg,#090c14e6,#1c1e2bcc)}.chessimals-board-overlay:before{position:absolute;inset:0;background:radial-gradient(circle at 20% 30%,rgba(255,255,255,.58) 0 .08rem,transparent .1rem),radial-gradient(circle at 75% 25%,rgba(255,226,129,.7) 0 .1rem,transparent .12rem),radial-gradient(circle at 68% 72%,rgba(var(--chessimals-capture-rgb),.54) 0 .08rem,transparent .1rem),radial-gradient(circle at 35% 78%,rgba(255,255,255,.48) 0 .07rem,transparent .09rem),radial-gradient(circle at 84% 66%,rgba(255,255,255,.38) 0 .06rem,transparent .08rem),radial-gradient(circle at 14% 64%,rgba(255,226,129,.48) 0 .07rem,transparent .09rem);content:\"\";opacity:.72;animation:chessimals-victory-sparks 1.5s ease-in-out infinite}.chessimals-board-overlay__rays{position:absolute;inset:-18%;background:conic-gradient(from 8deg,transparent 0 7deg,rgba(255,226,129,.16) 7deg 11deg,transparent 11deg 22deg);opacity:.85;animation:chessimals-finale-rays 8s linear infinite}.chessimals-board-overlay.is-defeat .chessimals-board-overlay__rays{background:conic-gradient(from 8deg,transparent 0 8deg,rgba(180,204,240,.1) 8deg 12deg,transparent 12deg 24deg);animation-duration:12s}.chessimals-board-overlay__ribbon{position:absolute;top:-20%;width:.42rem;height:54%;border-radius:999px;background:linear-gradient(to bottom,transparent,rgba(255,226,129,.72),transparent);opacity:.7;transform:rotate(var(--ribbon-angle, 12deg));animation:chessimals-finale-ribbon 2.5s ease-in-out infinite}.chessimals-board-overlay.is-defeat .chessimals-board-overlay__ribbon{background:linear-gradient(to bottom,transparent,rgba(180,204,240,.42),transparent);opacity:.48}.chessimals-board-overlay__ribbon.ribbon-a{left:18%;--ribbon-angle: -18deg}.chessimals-board-overlay__ribbon.ribbon-b{left:50%;--ribbon-angle: 8deg;animation-delay:.32s}.chessimals-board-overlay__ribbon.ribbon-c{right:18%;--ribbon-angle: 20deg;animation-delay:.64s}.chessimals-board-overlay>*{position:relative;z-index:1}.chessimals-board-overlay span{justify-self:center;border-radius:999px;padding:.32rem .7rem;background:#ffffff26;color:#ffffffe6;font-size:.76rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-board-overlay strong{font-size:clamp(1.65rem,8vw,3rem);line-height:1;font-weight:950;text-shadow:0 0 1.25rem rgba(255,255,255,.26)}.chessimals-board-overlay em{justify-self:center;display:grid;place-items:center;width:clamp(3rem,14vw,4.6rem);height:clamp(3rem,14vw,4.6rem);border:.16rem solid rgba(255,255,255,.62);border-radius:50%;background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.72),transparent 18%),linear-gradient(135deg,#ffe281,#b98436);color:#2d2412;font-size:clamp(1.1rem,5vw,1.65rem);font-style:normal;font-weight:950;box-shadow:0 0 0 .45rem #ffe2811f,0 1rem 2rem #00000042;animation:chessimals-finale-medal 1.8s ease-in-out infinite}.chessimals-board-overlay.is-defeat em{background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.48),transparent 18%),linear-gradient(135deg,#d9e2ef,#69758e);color:#182032;box-shadow:0 0 0 .45rem #b4ccf01a,0 1rem 2rem #00000052}.chessimals-board-overlay em.has-avatar{overflow:hidden;background:#fff;padding:0}.chessimals-board-overlay em.has-avatar img{display:block;width:100%;height:100%;object-fit:cover}.chessimals-board-overlay b{justify-self:center;color:#fffc;font-size:.8rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-board-overlay small{color:#ffffffd1;font-size:clamp(.9rem,3vw,1.1rem);font-weight:800}.chessimals-board-overlay__stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem;width:min(26rem,92%);margin:.2rem auto 0}.chessimals-board-overlay__stats div{display:grid;gap:.08rem;min-width:0;border:1px solid rgba(255,255,255,.18);border-radius:.75rem;padding:.42rem .46rem;background:#ffffff1a;backdrop-filter:blur(3px)}.chessimals-board-overlay__stats dt,.chessimals-board-overlay__stats dd{overflow:hidden;margin:0;text-overflow:ellipsis;white-space:nowrap}.chessimals-board-overlay__stats dt{color:#ffffffad;font-size:clamp(.52rem,2.1vw,.66rem);font-weight:950;letter-spacing:.04em;text-transform:uppercase}.chessimals-board-overlay__stats dd{color:#fff;font-size:clamp(.68rem,2.8vw,.88rem);font-weight:950}@keyframes chessimals-victory-sparks{0%,to{opacity:.46;transform:translateY(0) scale(.98)}50%{opacity:.95;transform:translateY(-.35rem) scale(1.02)}}@keyframes chessimals-finale-rays{to{transform:rotate(360deg)}}@keyframes chessimals-finale-ribbon{0%,to{opacity:.18;transform:translateY(-.5rem) rotate(var(--ribbon-angle))}50%{opacity:.75;transform:translateY(1.4rem) rotate(var(--ribbon-angle))}}@keyframes chessimals-finale-medal{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-.18rem) scale(1.04)}}.chessimals-cell{position:relative;isolation:isolate;--chessimals-cell-bg: var(--chessimals-cell-light);display:grid;place-items:center;min-width:0;min-height:0;aspect-ratio:1;border:0;background:radial-gradient(ellipse at 26% 24%,rgba(255,255,255,.12),transparent 24%),radial-gradient(ellipse at 78% 76%,rgba(61,54,36,.06),transparent 28%),linear-gradient(135deg,rgba(255,255,255,.04),transparent 52%,rgba(52,44,28,.04)),var(--chessimals-cell-bg);color:var(--chessimals-text);font:inherit;overflow:hidden;transition:background .16s ease,box-shadow .16s ease,transform .16s ease}.chessimals-cell:before,.chessimals-cell:after{pointer-events:none}.chessimals-cell-texture{position:absolute;inset:0;z-index:0;display:block;pointer-events:none;opacity:.42;mix-blend-mode:multiply;background:radial-gradient(ellipse at var(--wear-x, 28%) var(--wear-y, 32%),rgba(255,255,255,.16),transparent 17%),radial-gradient(ellipse at var(--wear-x2, 74%) var(--wear-y2, 68%),rgba(75,66,42,.09),transparent 25%),repeating-linear-gradient(var(--wear-angle, 26deg),rgba(75,66,42,.045) 0 1px,transparent 1px .52rem),linear-gradient(135deg,rgba(255,255,255,.06),transparent 42%,rgba(52,44,28,.045))}.chessimals-cell-texture:after{position:absolute;inset:.08rem;border:1px solid rgba(75,66,42,.05);border-radius:.18rem;box-shadow:inset .08rem .08rem #ffffff14,inset -.08rem -.08rem #342c1c0b;content:\"\"}.chessimals-cell.is-edge-cell .chessimals-cell-texture{opacity:.56;background:radial-gradient(ellipse at var(--wear-x, 28%) var(--wear-y, 32%),rgba(255,255,255,.14),transparent 18%),radial-gradient(ellipse at var(--wear-x2, 74%) var(--wear-y2, 68%),rgba(75,66,42,.14),transparent 28%),linear-gradient(135deg,rgba(70,52,28,.055),transparent 44%,rgba(52,44,28,.09)),repeating-linear-gradient(var(--wear-angle, 26deg),rgba(75,66,42,.055) 0 1px,transparent 1px .48rem)}.chessimals-cell.wear-0{--wear-x: 22%;--wear-y: 24%;--wear-x2: 78%;--wear-y2: 72%;--wear-angle: 18deg}.chessimals-cell.wear-1{--wear-x: 64%;--wear-y: 18%;--wear-x2: 30%;--wear-y2: 76%;--wear-angle: -24deg}.chessimals-cell.wear-2{--wear-x: 42%;--wear-y: 58%;--wear-x2: 82%;--wear-y2: 26%;--wear-angle: 42deg}.chessimals-cell.wear-3{--wear-x: 74%;--wear-y: 68%;--wear-x2: 24%;--wear-y2: 28%;--wear-angle: -12deg}.chessimals-cell.wear-4{--wear-x: 34%;--wear-y: 18%;--wear-x2: 62%;--wear-y2: 84%;--wear-angle: 64deg}.chessimals-cell.wear-5{--wear-x: 18%;--wear-y: 70%;--wear-x2: 70%;--wear-y2: 34%;--wear-angle: -48deg}:host-context(html.ion-palette-dark) .chessimals-cell-texture,:host-context([data-theme=\"dark\"]) .chessimals-cell-texture{opacity:.34;mix-blend-mode:soft-light}.chessimals-cell.is-dark-cell{--chessimals-cell-bg: var(--chessimals-cell-dark)}.chessimals-cell.is-selected{z-index:1;background:radial-gradient(circle,rgba(var(--chessimals-selected-rgb),.28) 0 36%,transparent 62%),linear-gradient(135deg,rgba(var(--chessimals-selected-rgb),.22),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .18rem var(--chessimals-selected),inset 0 0 .55rem #ffffffb8,inset 0 0 1.8rem rgba(var(--chessimals-selected-rgb),.42),0 0 .55rem rgba(var(--chessimals-selected-rgb),.56),0 0 1.55rem rgba(var(--chessimals-selected-rgb),.36)}.chessimals-board.is-power-aiming .chessimals-cell.is-selected{background:radial-gradient(circle at 50% 52%,rgba(var(--chessimals-magic-rgb),.38) 0 34%,transparent 64%),radial-gradient(circle at 32% 24%,rgba(255,255,255,.34),transparent 28%),linear-gradient(135deg,rgba(var(--chessimals-magic-rgb),.2),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .18rem var(--chessimals-magic-hot),inset 0 0 .8rem #ffffffa8,inset 0 0 1.9rem rgba(var(--chessimals-magic-rgb),.5),0 0 .7rem rgba(var(--chessimals-magic-rgb),.62),0 0 1.75rem rgba(var(--chessimals-magic-rgb),.42)}.chessimals-board.is-power-aiming .chessimals-cell.is-legal:not(.is-capture):after{border-color:rgba(var(--chessimals-magic-rgb),.94);box-shadow:0 0 .72rem rgba(var(--chessimals-magic-rgb),.48),inset 0 0 .6rem #fff3}.chessimals-board.is-power-aiming .chessimals-target{background:var(--chessimals-magic-hot);box-shadow:0 0 0 .2rem rgba(var(--chessimals-magic-rgb),.2),0 0 .95rem rgba(var(--chessimals-magic-rgb),.62)}.chessimals-cell.is-legal:not(.is-capture):after{position:absolute;inset:13%;z-index:2;border:max(2px,1.8%) solid var(--chessimals-move);border-radius:.55rem;content:\"\";opacity:.74;pointer-events:none}.chessimals-cell.is-last:not(.is-selected):not(.is-legal):not(.is-capture){background:radial-gradient(circle,rgba(var(--chessimals-last-rgb),.16) 0 42%,transparent 68%),var(--chessimals-cell-bg)}.chessimals-cell.is-capture{z-index:2;background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.24),transparent 34%),linear-gradient(135deg,rgba(var(--chessimals-capture-rgb),.14),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .14rem rgba(var(--chessimals-capture-rgb),.84),inset 0 0 1.4rem rgba(var(--chessimals-capture-rgb),.24),0 0 .95rem rgba(var(--chessimals-capture-rgb),.34);animation:chessimals-capture-aura 1.35s ease-in-out infinite}.chessimals-cell.is-capture:before{position:absolute;inset:4%;z-index:1;display:block;border-radius:.64rem;background:linear-gradient(90deg,transparent,rgba(255,255,255,.52),transparent),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.24),transparent 58%);content:\"\";opacity:0;transform:translate(-42%) scale(.9);animation:chessimals-capture-sweep 1.35s ease-in-out infinite}.chessimals-cell.is-capture:after{position:absolute;inset:8%;z-index:3;border:max(2px,1.55%) solid rgba(var(--chessimals-capture-rgb),.9);border-radius:.62rem;box-shadow:0 0 .75rem rgba(var(--chessimals-capture-rgb),.5),inset 0 0 .72rem #ffffff38;content:\"\";pointer-events:none;animation:chessimals-capture-frame 1.35s ease-in-out infinite}.chessimals-cell.has-capture-ready:not(.is-selected):after{position:absolute;inset:16%;z-index:3;border:max(2px,1.45%) solid rgba(var(--chessimals-selected-rgb),.72);border-radius:999px;box-shadow:0 0 .65rem rgba(var(--chessimals-selected-rgb),.34),inset 0 0 .55rem #ffffff2e;content:\"\"}.chessimals-cell.is-winning.is-legal:not(.is-capture):after{border-color:rgba(var(--chessimals-warning-rgb),.92);border-radius:999px;box-shadow:0 0 .75rem rgba(var(--chessimals-warning-rgb),.48),inset 0 0 .58rem #ffffff38}.chessimals-cell.is-winning .chessimals-target{background:var(--chessimals-warning);box-shadow:0 0 0 .22rem rgba(var(--chessimals-warning-rgb),.2),0 0 .95rem rgba(var(--chessimals-warning-rgb),.56)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture){background:radial-gradient(circle at 50% 52%,rgba(var(--chessimals-warning-rgb),.16),transparent 52%),var(--chessimals-cell-bg)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture) .chessimals-piece{filter:drop-shadow(0 0 .38rem rgba(var(--chessimals-warning-rgb),.52)) var(--chessimals-piece-white-shadow)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture) .chessimals-piece.is-black{filter:drop-shadow(0 0 .38rem rgba(var(--chessimals-warning-rgb),.52)) var(--chessimals-piece-black-shadow)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture):before{position:absolute;top:.26rem;right:.26rem;z-index:4;width:.48rem;height:.48rem;border-radius:999px;background:rgba(var(--chessimals-warning-rgb),.96);box-shadow:0 0 0 .18rem rgba(var(--chessimals-warning-rgb),.22);content:\"\"}@keyframes chessimals-capture-aura{0%,to{filter:saturate(1);box-shadow:inset 0 0 0 .12rem rgba(var(--chessimals-capture-rgb),.78),inset 0 0 1rem rgba(var(--chessimals-capture-rgb),.2),0 0 .64rem rgba(var(--chessimals-capture-rgb),.32)}50%{filter:saturate(1.22);box-shadow:inset 0 0 0 .16rem rgba(var(--chessimals-capture-rgb),.96),inset 0 0 1.34rem rgba(var(--chessimals-capture-rgb),.34),0 0 1.2rem rgba(var(--chessimals-capture-rgb),.48)}}@keyframes chessimals-capture-sweep{0%{opacity:0;transform:translate(-52%) scale(.88)}42%{opacity:.66;transform:translate(0) scale(1)}to{opacity:0;transform:translate(48%) scale(.92)}}@keyframes chessimals-capture-frame{0%,to{opacity:.68;transform:scale(.96)}50%{opacity:1;transform:scale(1)}}.chessimals-cell.has-source-effect:not(.is-moving-source){background:radial-gradient(circle,rgba(var(--chessimals-selected-rgb),.12) 0 34%,transparent 64%),var(--chessimals-cell-bg)}.chessimals-cell.has-move-effect{z-index:2;background:radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.22) 0 34%,transparent 68%),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .16rem rgba(var(--chessimals-capture-rgb),.86),inset 0 0 1.2rem rgba(var(--chessimals-capture-rgb),.26),0 0 1.1rem rgba(var(--chessimals-capture-rgb),.42)}.chessimals-cell.has-move-effect:before{position:absolute;inset:.12rem;z-index:1;display:block;border-radius:.7rem;background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.48),transparent 22%),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.42),transparent 58%);content:\"\";opacity:0;transform:scale(.72);animation:chessimals-power-impact .7s ease-out both}.chessimals-cell.has-move-effect:after{position:absolute;inset:.28rem;z-index:4;display:block;border:.14rem solid rgba(255,255,255,.72);border-radius:.58rem;box-shadow:0 0 .5rem #ffffff5c,0 0 1rem rgba(var(--chessimals-capture-rgb),.32);content:\"\";animation:chessimals-power-frame .86s ease-out both}.chessimals-cell.has-capture-effect{animation:chessimals-capture-hit .78s ease-out both}.chessimals-cell.effect-eagle:before{background:linear-gradient(135deg,transparent 10%,rgba(255,255,255,.78) 48%,transparent 52%),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.36),transparent 62%)}.chessimals-cell.effect-bull:before{background:repeating-linear-gradient(90deg,rgba(255,255,255,.34) 0 .16rem,transparent .16rem .34rem),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.38),transparent 62%)}.chessimals-cell.effect-kangaroo:before{border-radius:999px;background:radial-gradient(circle at 42% 44%,rgba(255,255,255,.58),transparent 18%),radial-gradient(circle at 58% 56%,rgba(var(--chessimals-capture-rgb),.4),transparent 64%)}.chessimals-cell.effect-lion:before{background:conic-gradient(from 0deg,transparent,rgba(255,255,255,.56),transparent,rgba(var(--chessimals-capture-rgb),.4),transparent),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.34),transparent 62%)}@keyframes chessimals-power-impact{0%{opacity:0;transform:scale(.54) rotate(0)}28%{opacity:1;transform:scale(.96) rotate(2deg)}to{opacity:0;transform:scale(1.3) rotate(8deg)}}@keyframes chessimals-power-frame{0%{opacity:0;transform:scale(.84)}34%{opacity:1;transform:scale(1.02)}to{opacity:0;transform:scale(1.16)}}@keyframes chessimals-capture-hit{0%,to{filter:saturate(1)}35%{filter:saturate(1.35) brightness(1.08)}}.chessimals-cell.is-moving-source .chessimals-piece{opacity:0}.chessimals-piece{position:relative;z-index:2;display:block;width:68%;height:74%;color:var(--chessimals-primary);--chessimals-piece-fill: var(--chessimals-piece-white-fill);--chessimals-piece-side: var(--chessimals-piece-white-side);--chessimals-piece-line: var(--chessimals-piece-white-line);--chessimals-piece-outline: rgba(82, 65, 46, .34);filter:var(--chessimals-piece-white-shadow)}.chessimals-piece.is-black{color:#fff;--chessimals-piece-fill: var(--chessimals-piece-black-fill);--chessimals-piece-side: var(--chessimals-piece-black-side);--chessimals-piece-line: var(--chessimals-piece-black-line);--chessimals-piece-outline: rgba(255, 255, 255, .22);filter:var(--chessimals-piece-black-shadow)}.chessimals-moving-piece{position:absolute;top:0;left:0;z-index:6;width:calc(100% / var(--board-size));height:calc(100% / var(--board-size));display:grid;place-items:center;pointer-events:none;transform:translate(calc(var(--from-col) * 100%),calc(var(--from-row) * 100%));animation:chessimals-piece-travel .36s cubic-bezier(.2,.82,.24,1) both}@keyframes chessimals-piece-travel{0%{transform:translate(calc(var(--from-col) * 100%),calc(var(--from-row) * 100%)) scale(1)}68%{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%)) scale(1.07)}to{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%)) scale(1)}}.chessimals-piece__side,.chessimals-piece__head,.chessimals-piece__collar,.chessimals-piece__neck,.chessimals-piece__base{position:absolute;display:block;left:50%;background:var(--chessimals-piece-fill);border:max(1px,1.25%) solid var(--chessimals-piece-outline);transform:translate(-50%)}.chessimals-piece__side{top:46%;z-index:0;width:58%;height:41%;border-radius:34% 34% 12% 12%;background:linear-gradient(96deg,var(--chessimals-piece-side) 0 34%,transparent 35%),var(--chessimals-piece-fill);clip-path:polygon(22% 0,78% 0,96% 100%,4% 100%);opacity:.92}.chessimals-piece__head{top:1%;z-index:4;width:48%;height:40%;border-radius:999px;background:radial-gradient(circle at 30% 22%,rgba(255,255,255,.72) 0 13%,transparent 14%),linear-gradient(135deg,rgba(255,255,255,.28) 0 34%,transparent 35%),var(--chessimals-piece-fill);box-shadow:inset -.18rem -.12rem #52412e0f,inset 0 -1px 0 var(--chessimals-piece-line)}.chessimals-piece.is-black .chessimals-piece__head{box-shadow:inset .18rem -.12rem #ffffff0f,inset 0 -1px 0 var(--chessimals-piece-line)}.chessimals-piece__collar{top:37%;z-index:5;width:72%;height:15%;border-radius:999px;background:linear-gradient(180deg,#f5cd77 0%,var(--chessimals-piece-gold) 55%,var(--chessimals-piece-gold-dark) 100%);border-color:color-mix(in srgb,var(--chessimals-piece-gold-dark) 72%,transparent);box-shadow:inset 0 .12rem #ffffff47,inset 0 -.08rem #462e1238,0 .08rem .18rem #462e1224}.chessimals-piece__neck{top:50%;z-index:2;width:52%;height:31%;clip-path:polygon(16% 0,84% 0,100% 100%,0 100%);background:linear-gradient(100deg,var(--chessimals-piece-side) 0 28%,transparent 29%),linear-gradient(180deg,var(--chessimals-piece-fill),color-mix(in srgb,var(--chessimals-piece-fill) 78%,var(--chessimals-piece-side)));box-shadow:inset -.12rem .1rem #ffffff14}.chessimals-piece__base{bottom:0;z-index:6;width:86%;height:17%;border-radius:.42rem .42rem .22rem .22rem;background:linear-gradient(100deg,var(--chessimals-piece-side) 0 18%,transparent 19%),linear-gradient(180deg,color-mix(in srgb,var(--chessimals-piece-fill) 92%,#ffffff),var(--chessimals-piece-fill));box-shadow:inset 0 .12rem #ffffff24,inset 0 -.1rem 0 var(--chessimals-piece-line)}.chessimals-target{width:16%;height:16%;border-radius:999px;background:var(--chessimals-move);opacity:.9;box-shadow:0 0 .9rem rgba(var(--chessimals-move-rgb),.42)}.chessimals-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.625rem}.chessimals-cards button{position:relative;isolation:isolate;display:grid;gap:.375rem;place-items:center;min-height:5.75rem;padding:.625rem;border:1px solid var(--chessimals-border);border-radius:1.125rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.chessimals-powers__heading{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.chessimals-powers p{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.chessimals-powers__heading span{flex:0 0 auto;border-radius:999px;padding:.28rem .62rem;background:rgba(var(--chessimals-primary-rgb),.12);color:var(--chessimals-primary);font-size:.78rem;font-weight:950}.chessimals-cards button.is-selected{border-color:var(--chessimals-magic-hot);background:radial-gradient(circle at 50% 16%,rgba(255,255,255,.42),transparent 30%),radial-gradient(circle at 50% 76%,rgba(var(--chessimals-magic-rgb),.2),transparent 56%),linear-gradient(135deg,rgba(var(--chessimals-magic-rgb),.2),#ffffff0a),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-magic-rgb),.28),0 0 1.35rem rgba(var(--chessimals-magic-rgb),.48),0 .9rem 2rem rgba(var(--chessimals-magic-rgb),.18);transform:translateY(-1px)}.chessimals-cards button.is-selected:before,.chessimals-cards button.is-selected:after{position:absolute;inset:-.5rem;z-index:0;border-radius:inherit;content:\"\";pointer-events:none}.chessimals-cards button>*{position:relative;z-index:1}.chessimals-cards button.is-selected:before{background:radial-gradient(circle at 18% 24%,rgba(var(--chessimals-magic-rgb),.88) 0 .08rem,transparent .1rem),radial-gradient(circle at 78% 20%,rgba(255,255,255,.86) 0 .07rem,transparent .09rem),radial-gradient(circle at 86% 62%,rgba(var(--chessimals-magic-rgb),.72) 0 .06rem,transparent .08rem),radial-gradient(circle at 28% 78%,rgba(255,245,111,.78) 0 .07rem,transparent .09rem),radial-gradient(circle at 54% 8%,rgba(255,255,255,.68) 0 .05rem,transparent .07rem);opacity:.8;animation:chessimalsMagicParticles 1.8s ease-in-out infinite}.chessimals-cards button.is-selected:after{background:conic-gradient(from 12deg,transparent 0 16deg,rgba(var(--chessimals-magic-rgb),.2) 16deg 22deg,transparent 22deg 44deg);opacity:.68;filter:blur(.04rem);animation:chessimalsMagicAura 3.2s linear infinite}.chessimals-cards button.is-used{opacity:.42}.chessimals-animal-face{display:grid;place-items:center;width:3.25rem;height:3.25rem;padding:.34rem;overflow:hidden;border-radius:1.2rem;background:radial-gradient(circle at 35% 22%,rgba(255,255,255,.82),transparent 55%),var(--chessimals-animal-face-bg);color:color-mix(in srgb,var(--chessimals-text) 92%,#000);box-shadow:inset 0 0 0 1px var(--chessimals-animal-face-border),0 .45rem 1.15rem #2e3a2c1a}.chessimals-animal-face img{display:block;width:100%;height:100%;object-fit:contain;border-radius:.72rem;background:var(--chessimals-animal-face-inner-bg);box-shadow:inset 0 0 0 1px #2e3a2c14;transform:none;filter:var(--chessimals-animal-face-filter)}.chessimals-cards button.is-selected .chessimals-animal-face,.chessimals-powers.is-ready .chessimals-cards button:not(.is-used) .chessimals-animal-face{background:radial-gradient(circle at 35% 22%,rgba(255,255,255,.9),transparent 52%),radial-gradient(circle at 62% 78%,rgba(var(--chessimals-magic-rgb),.22),transparent 48%),var(--chessimals-animal-face-bg);color:color-mix(in srgb,var(--chessimals-text) 94%,#000);box-shadow:inset 0 0 0 1px rgba(var(--chessimals-magic-rgb),.34),0 0 .85rem rgba(var(--chessimals-magic-rgb),.34),0 .75rem 1.6rem rgba(var(--chessimals-magic-rgb),.16)}.chessimals-powers.is-locked .chessimals-animal-face{filter:var(--chessimals-animal-face-locked-filter);opacity:.86}.chessimals-powers.is-locked .chessimals-animal-face img,.chessimals-cards button.is-used .chessimals-animal-face img{opacity:var(--chessimals-animal-face-locked-img-opacity)}.chessimals-cards strong{overflow:hidden;max-width:100%;font-size:.82rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-powers.is-locked .chessimals-cards{opacity:.68}.chessimals-powers.is-ready{border-color:rgba(var(--chessimals-magic-rgb),.46);box-shadow:0 0 0 1px rgba(var(--chessimals-magic-rgb),.12),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}.chessimals-powers.is-ready .chessimals-cards button:not(.is-used){animation:chessimalsPowerPulse 1.8s ease-in-out infinite}.chessimals-powers.is-unlock-pulse{animation:chessimalsPowersUnlocked 1.18s ease-out both}.chessimals-powers.is-unlock-pulse .chessimals-cards button:not(.is-used){animation:chessimalsPowerIgnite .76s ease-out both,chessimalsPowerPulse 1.8s ease-in-out .76s infinite}@keyframes chessimalsPowerPulse{0%,to{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}50%{box-shadow:0 0 1.4rem rgba(var(--chessimals-magic-rgb),.24)}}@keyframes chessimalsPowersUnlocked{0%{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}34%{box-shadow:0 0 0 .18rem rgba(var(--chessimals-magic-rgb),.28),0 0 2.2rem rgba(var(--chessimals-magic-rgb),.38),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.16)}to{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}}@keyframes chessimalsPowerIgnite{0%{transform:translateY(0) scale(.96);box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}42%{transform:translateY(-.08rem) scale(1.025);box-shadow:0 0 0 .14rem rgba(var(--chessimals-magic-rgb),.24),0 0 1.5rem rgba(var(--chessimals-magic-rgb),.46)}to{transform:translateY(0) scale(1);box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}}@keyframes chessimalsMagicParticles{0%,to{opacity:.54;transform:translateY(0) scale(.94)}50%{opacity:1;transform:translateY(-.18rem) scale(1.02)}}@keyframes chessimalsMagicAura{to{transform:rotate(1turn)}}.chessimals-actions{order:6;align-self:stretch;justify-self:stretch;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));gap:.625rem;margin-top:1rem}.chessimals-shell--projection .chessimals-game{max-width:min(96vw,90rem)}.chessimals-shell--projection .chessimals-turn-card{padding:.875rem 1rem}.chessimals-shell--projection .chessimals-status,.chessimals-shell--projection .chessimals-actions,.chessimals-shell--projection .chessimals-online,.chessimals-shell--projection .chessimals-replay,.chessimals-shell--projection .chessimals-rematch-status{display:none}.chessimals-shell--projection .chessimals-arena{grid-template-columns:minmax(0,1fr);justify-items:center}.chessimals-shell--projection .chessimals-board-wrap{--chessimals-board-radius: min(.625rem, 10px);width:min(96vw,82vh,58rem);max-width:none}.chessimals-shell--projection .chessimals-board-frame{flex-basis:auto;max-width:none}@media (min-width: 760px){.chessimals-game{gap:1rem}.chessimals-turn-card,.chessimals-status,.chessimals-arena,.chessimals-replay,.chessimals-result,.chessimals-actions{grid-column:1 / -1}.chessimals-arena{grid-template-columns:minmax(0,1fr);justify-items:center;align-items:start;gap:1rem}.chessimals-powers{width:min(100%,44rem);align-content:center;grid-template-columns:minmax(11rem,.68fr) minmax(0,1fr);align-items:center;gap:1rem;padding:1rem}.chessimals-cards{grid-template-columns:repeat(4,minmax(0,1fr))}.chessimals-cards button{min-height:5rem}.chessimals-powers p{-webkit-line-clamp:3}}.chessimals-rules{display:grid;gap:1rem;padding-top:.25rem}.chessimals-settings{display:grid;gap:.85rem}.chessimals-settings article{display:grid;gap:.65rem;padding:.9rem;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--ion-card-background, #fff)}.chessimals-about{display:grid;justify-items:center;gap:1rem;color:var(--ion-text-color, var(--chessimals-text))}.chessimals-about__logo{display:block;width:min(30rem,100%);aspect-ratio:1280 / 698;object-fit:cover;object-position:center;border-radius:1.25rem;background:#fff;box-shadow:0 1rem 2rem #2e3a2c24}.chessimals-about p{margin:0;color:var(--ion-color-medium, var(--chessimals-muted));font-size:.95rem;font-weight:750;line-height:1.45;text-align:center}.chessimals-about dl{display:grid;width:100%;margin:0;gap:.65rem}.chessimals-about dl div{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem .95rem;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--ion-card-background, #fff)}.chessimals-about dt,.chessimals-about dd{margin:0}.chessimals-about dt{color:var(--ion-color-medium, var(--chessimals-muted));font-size:.78rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-about dd{color:var(--ion-text-color, var(--chessimals-text));font-size:.95rem;font-weight:950}.chessimals-rules__hero{display:block;width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:1.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);box-shadow:0 1rem 2.25rem #2e3a2c1f}.chessimals-rules article{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:1rem;padding:1rem;border:1px solid var(--ion-border-color, #e7e4ea);border-radius:1.25rem;background:var(--ion-card-background, #fff);color:var(--ion-text-color, #2f2a3a)}.chessimals-rules article>span{display:grid;place-items:center;width:2rem;height:2rem;border-radius:999px;background:rgba(var(--chessimals-primary-rgb),.12);color:var(--chessimals-primary);font-weight:950}.chessimals-rules article>div{display:grid;min-width:0;gap:.45rem}.chessimals-rules h3,.chessimals-rules p,.chessimals-rules ul{margin:0}.chessimals-rules h3{font-size:1rem;font-weight:950;line-height:1.2}.chessimals-rules p,.chessimals-rules li{color:var(--ion-color-medium, #6f6a7a);line-height:1.5}.chessimals-rules ul{display:grid;gap:.45rem;padding-left:1.15rem}.chessimals-primary,.chessimals-secondary{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:3.625rem;border-radius:999px;font:inherit;font-weight:950}.chessimals-primary{border:0;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);box-shadow:0 1.125rem 2.8rem rgba(var(--chessimals-primary-rgb),.28)}.chessimals-secondary{border:1px solid var(--chessimals-border);background:transparent;color:var(--chessimals-text)}.chessimals-primary.is-working,.chessimals-secondary.is-working{cursor:wait;opacity:.82}.chessimals-button-spinner{width:1rem;height:1rem;flex:0 0 auto;border:.14rem solid currentColor;border-right-color:transparent;border-radius:999px;animation:chessimals-spin .72s linear infinite}@media (max-width: 560px){.chessimals-size,.chessimals-mode,.chessimals-actions{grid-template-columns:1fr}.chessimals-game{gap:.55rem;border-radius:1.25rem;padding:.625rem}.chessimals-turn-card{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.5rem;min-height:0;border-radius:.95rem;padding:.5rem}.chessimals-turn-card__copy{gap:.1rem}.chessimals-turn-card__chip{max-width:100%;padding:.18rem .5rem;font-size:.6rem;letter-spacing:.045em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chessimals-turn-card strong{font-size:clamp(.92rem,4.4vw,1.12rem);line-height:1.08}.chessimals-turn-card p{display:-webkit-box;overflow:hidden;font-size:.72rem;line-height:1.2;-webkit-box-orient:vertical;-webkit-line-clamp:1}.chessimals-player-strip{width:auto;max-width:none;min-width:0;padding:.25rem}.chessimals-player-strip__avatar{flex:0 0 1.8rem;width:1.8rem;height:1.8rem;aspect-ratio:1 / 1}:host ::ng-deep .chessimals-player-strip .chessimals-turn-avatar{width:1.8rem;min-width:1.8rem;height:1.8rem}.chessimals-player-strip__text{display:none}.chessimals-status{grid-template-columns:repeat(3,minmax(0,1fr));gap:.3rem}.chessimals-status div{gap:.14rem;min-height:2.2rem;border-radius:.82rem;padding:.34rem .3rem}.chessimals-status small{font-size:.58rem;line-height:1.05}.chessimals-status strong{font-size:clamp(.78rem,3.2vw,.94rem);line-height:1.05}.chessimals-tip,.chessimals-result,.chessimals-replay,.chessimals-online-status,.chessimals-tutorial{gap:.2rem;border-radius:1rem;padding:.7rem .75rem}.chessimals-tip strong,.chessimals-result strong,.chessimals-replay strong,.chessimals-tutorial strong{font-size:.95rem}.chessimals-tip p,.chessimals-result p{font-size:.9rem;line-height:1.28}.chessimals-result__stats{grid-template-columns:repeat(2,minmax(0,1fr))}.chessimals-replay,.chessimals-tutorial{grid-template-columns:1fr}.chessimals-replay__actions{justify-content:stretch}.chessimals-replay__actions .chessimals-secondary{flex:1 1 8rem}.chessimals-arena{gap:.5rem}.chessimals-board-wrap{width:100%;margin-inline:0;padding:0}.chessimals-board-frame{width:100%}.chessimals-powers{gap:.5rem;border-radius:1rem;padding:.55rem}.chessimals-powers__heading{gap:.4rem}.chessimals-powers h2{font-size:1rem}.chessimals-powers__heading span{padding:.22rem .48rem;font-size:.68rem}.chessimals-powers p{font-size:.78rem;line-height:1.2;-webkit-line-clamp:1}.chessimals-cards{grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem}.chessimals-cards button{gap:.25rem;min-height:3.95rem;border-radius:.85rem;padding:.34rem .22rem}.chessimals-animal-face{width:2.35rem;height:2.35rem;padding:.26rem;border-radius:.85rem}.chessimals-animal-face img{border-radius:.55rem}.chessimals-cards strong{font-size:.62rem}.chessimals-board{border-radius:var(--chessimals-board-radius)}.chessimals-cell-coordinate{font-size:.58rem}}@media (prefers-reduced-motion: reduce){.chessimals-cell.is-capture,.chessimals-cell.is-capture:before,.chessimals-cell.is-capture:after,.chessimals-cell.has-move-effect,.chessimals-cell.has-move-effect:before,.chessimals-cell.has-move-effect:after,.chessimals-cell.has-capture-effect,.chessimals-moving-piece{animation:none!important}.chessimals-moving-piece{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%))}}\n"], dependencies: [{ kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: ModalLayoutComponent, selector: "val-modal-layout", inputs: ["title", "subtitle", "closeLabel", "showClose", "actions", "actionsAlign", "footer", "footerClass"], outputs: ["close", "actionClick"] }, { kind: "component", type: RangeInputComponent, selector: "val-range-input", inputs: ["props"], outputs: ["rangeChange"] }, { kind: "component", type: ToggleInputComponent, selector: "val-toggle-input", inputs: ["preset", "props"] }, { kind: "component", type: UserAvatarComponent, selector: "val-user-avatar", inputs: ["props"], outputs: ["onClick"] }] }); }
67141
+ `, isInline: true, styles: [":host{display:block}.chessimals-shell{--chessimals-panel: #ffffff;--chessimals-surface: #fffaf1;--chessimals-border: rgba(46, 58, 44, .18);--chessimals-text: #2e3a2c;--chessimals-muted: #51643d;--chessimals-soft: rgba(111, 122, 60, .1);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-selected: #37f28a;--chessimals-selected-rgb: 55, 242, 138;--chessimals-magic: #f7d45a;--chessimals-magic-rgb: 247, 212, 90;--chessimals-magic-hot: #fff56f;--chessimals-magic-deep: #b77a18;--chessimals-warning: #f4c542;--chessimals-warning-rgb: 244, 197, 66;--chessimals-move: var(--chessimals-sky);--chessimals-move-rgb: var(--chessimals-sky-rgb);--chessimals-capture: #1fcdb3;--chessimals-capture-rgb: 31, 205, 179;--chessimals-last: #8c6b4f;--chessimals-last-rgb: 140, 107, 79;--chessimals-cell-light: #f3f4e8;--chessimals-cell-dark: #7f944d;--chessimals-board-shadow: rgba(46, 58, 44, .14);--chessimals-piece-white-fill: #ffffff;--chessimals-piece-white-side: #f3eadb;--chessimals-piece-white-line: rgba(82, 65, 46, .12);--chessimals-piece-white-shadow: drop-shadow(0 0 1px rgba(84, 62, 34, .52)) drop-shadow(0 .18rem .12rem rgba(72, 58, 36, .22)) drop-shadow(0 .34rem .42rem rgba(72, 58, 36, .22));--chessimals-piece-black-fill: #242936;--chessimals-piece-black-side: #171b25;--chessimals-piece-black-line: rgba(255, 255, 255, .1);--chessimals-piece-black-shadow: drop-shadow(0 0 1px rgba(255, 255, 255, .34)) drop-shadow(0 .18rem .1rem rgba(255, 255, 255, .12)) drop-shadow(0 .32rem .42rem rgba(0, 0, 0, .36));--chessimals-piece-gold: #c79a42;--chessimals-piece-gold-dark: #8a5f22;--chessimals-animal-face-bg: #fffdf7;--chessimals-animal-face-inner-bg: #ffffff;--chessimals-animal-face-border: rgba(46, 58, 44, .12);--chessimals-animal-face-filter: drop-shadow(0 .12rem .16rem rgba(46, 58, 44, .18));--chessimals-animal-face-locked-filter: grayscale(.2) saturate(.72);--chessimals-animal-face-locked-img-opacity: .72;display:grid;gap:1.125rem;width:100%;max-width:min(100%,60rem);margin:0 auto;color:var(--chessimals-text)}@media (prefers-color-scheme: dark){.chessimals-shell{--chessimals-panel: #172116;--chessimals-surface: #0f170f;--chessimals-border: rgba(242, 230, 213, .2);--chessimals-text: #f6f3e9;--chessimals-muted: #c8cfb1;--chessimals-soft: rgba(111, 122, 60, .22);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-cell-light: #f3f4e8;--chessimals-cell-dark: #7f944d;--chessimals-board-shadow: rgba(0, 0, 0, .34);--chessimals-animal-face-border: rgba(242, 230, 213, .24)}}.chessimals-resume-splash{order:0;position:fixed;inset:0;z-index:1000;display:grid;place-items:center;align-content:center;gap:.65rem;padding:1.5rem;text-align:center;color:var(--chessimals-text);background:radial-gradient(circle at 50% 42%,rgba(var(--chessimals-primary-rgb),.18),transparent 22rem),color-mix(in srgb,var(--chessimals-panel) 92%,transparent);backdrop-filter:blur(.9rem)}.chessimals-resume-splash__paw{display:grid;place-items:center;width:clamp(4.6rem,16vw,5.6rem);height:clamp(4.6rem,16vw,5.6rem);border-radius:1.55rem;background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.96),transparent 34%),linear-gradient(145deg,#fffffff5,rgba(var(--chessimals-secondary-rgb),.22)),color-mix(in srgb,var(--chessimals-panel) 82%,white);border:.12rem solid rgba(var(--chessimals-primary-rgb),.22);box-shadow:0 1.15rem 2.6rem rgba(var(--ion-color-dark-rgb, 47, 42, 58),.16),0 0 0 .42rem #ffffff6b,inset 0 -.25rem .6rem rgba(var(--chessimals-primary-rgb),.08);animation:chessimals-resume-pulse 1.2s ease-in-out infinite;font-size:clamp(2.45rem,9vw,3.35rem);line-height:1;filter:drop-shadow(0 .28rem .38rem rgba(var(--ion-color-dark-rgb, 47, 42, 58),.18))}.chessimals-resume-splash strong{font-size:clamp(1.55rem,5vw,2.4rem);font-weight:950;line-height:1.05}.chessimals-resume-splash p{max-width:24rem;margin:0;color:var(--chessimals-muted);font-size:1rem;line-height:1.35}@keyframes chessimals-resume-pulse{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-.25rem) scale(1.04)}}@keyframes chessimals-spin{to{transform:rotate(360deg)}}@keyframes chessimals-online-pulse{0%,to{transform:scale(1);opacity:.78}50%{transform:scale(1.22);opacity:1}}:host-context(html.ion-palette-dark) .chessimals-shell,:host-context([data-theme=\"dark\"]) .chessimals-shell{--chessimals-panel: #172116;--chessimals-surface: #0f170f;--chessimals-border: rgba(246, 227, 213, .22);--chessimals-text: #f6f3e9;--chessimals-muted: #c8cfb1;--chessimals-soft: rgba(111, 122, 60, .22);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-cell-light: #e8eadc;--chessimals-cell-dark: #5f7040;--chessimals-board-shadow: rgba(0, 0, 0, .34);--chessimals-capture: #66f2d7;--chessimals-capture-rgb: 102, 242, 215;--chessimals-last: #cdbe9b;--chessimals-last-rgb: 205, 190, 155;--chessimals-piece-white-fill: #fffaff;--chessimals-piece-white-side: #f0e5d4;--chessimals-piece-white-line: rgba(82, 65, 46, .12);--chessimals-piece-white-shadow: drop-shadow(0 0 1px rgba(84, 62, 34, .48)) drop-shadow(0 .18rem .12rem rgba(0, 0, 0, .24)) drop-shadow(0 .34rem .42rem rgba(0, 0, 0, .3));--chessimals-piece-black-fill: #202633;--chessimals-piece-black-side: #111620;--chessimals-piece-black-line: rgba(255, 255, 255, .12);--chessimals-piece-black-shadow: drop-shadow(0 0 1px rgba(255, 255, 255, .34)) drop-shadow(0 .18rem .1rem rgba(255, 255, 255, .14)) drop-shadow(0 .34rem .44rem rgba(0, 0, 0, .52));--chessimals-animal-face-bg: #fffdf7;--chessimals-animal-face-inner-bg: #ffffff;--chessimals-animal-face-border: rgba(242, 230, 213, .24);--chessimals-animal-face-filter: drop-shadow(0 .12rem .16rem rgba(0, 0, 0, .22));--chessimals-animal-face-locked-filter: grayscale(.32) saturate(.72);--chessimals-animal-face-locked-img-opacity: .58}.chessimals-hero{display:grid;gap:.75rem;justify-items:center;overflow:hidden;border-radius:1.75rem;padding:clamp(1.25rem,5vw,2.5rem);background:radial-gradient(circle at 18% 12%,rgba(255,255,255,.92),transparent 20%),linear-gradient(135deg,#fdf8ee,#fff 40%,#edf3df);color:var(--chessimals-text);text-align:center;border:1px solid var(--chessimals-border)}:host-context(html.ion-palette-dark) .chessimals-hero,:host-context([data-theme=\"dark\"]) .chessimals-hero{background:radial-gradient(circle at 18% 12%,rgba(255,255,255,.08),transparent 22%),linear-gradient(135deg,#111a10,#172116 48%,#0f170f);color:var(--chessimals-text);border-color:#f6e3d538}.chessimals-hero__logo{display:grid;place-items:center;width:min(22rem,82vw);max-width:100%;padding:.5rem;border-radius:1.35rem;background:#fff;box-shadow:0 1rem 2.5rem #2e3a2c1a,inset 0 0 0 1px #2e3a2c14}.chessimals-hero__logo img{display:block;width:100%;height:auto;max-height:12rem;object-fit:contain;border-radius:1rem}.chessimals-hero h1{margin:0;font-size:clamp(2.4rem,9vw,4.5rem);line-height:.95;font-weight:950}.chessimals-hero p,.chessimals-howto p,.chessimals-tip p,.chessimals-result p,.chessimals-powers p{margin:0;line-height:1.45}.chessimals-panel,.chessimals-game,.chessimals-powers{display:grid;gap:1rem;border:1px solid var(--chessimals-border);border-radius:1.625rem;padding:clamp(1rem,4vw,1.5rem);background:var(--chessimals-panel)}.chessimals-online{display:grid;gap:.875rem;border:1px solid var(--chessimals-border);border-radius:1.375rem;padding:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--chessimals-panel)}.chessimals-online--waiting{order:2;border-color:rgba(var(--chessimals-primary-rgb),.34)}.chessimals-online h2,.chessimals-online p{margin:0}.chessimals-online h2{font-size:1.1rem;font-weight:950}.chessimals-online p{color:var(--chessimals-muted);line-height:1.4}.chessimals-online__create,.chessimals-online__join{display:grid;gap:.55rem}.chessimals-online__create small{color:var(--chessimals-muted);font-weight:800;line-height:1.35}.chessimals-online__join{border-top:1px solid var(--chessimals-border);padding-top:.85rem}.chessimals-online__join>strong{font-size:.95rem;font-weight:950}.chessimals-online__error{border-radius:.875rem;padding:.7rem .8rem;background:rgba(var(--ion-color-danger-rgb, 235, 68, 90),.12);color:var(--ion-color-danger, #eb445a)!important;font-weight:800}.chessimals-online__loading{display:flex;align-items:center;gap:.625rem;border:1px solid rgba(var(--chessimals-primary-rgb),.22);border-radius:999px;padding:.65rem .85rem;background:rgba(var(--chessimals-primary-rgb),.08);color:var(--chessimals-text);font-size:.92rem;font-weight:900}.chessimals-online__loading span{width:1rem;height:1rem;border:.15rem solid rgba(var(--chessimals-primary-rgb),.24);border-top-color:var(--chessimals-primary);border-radius:999px;animation:chessimals-spin .75s linear infinite}.chessimals-online-code{display:grid;gap:.4rem;font-weight:950}.chessimals-online-code input{width:100%;min-height:3.3rem;border:1px solid var(--chessimals-border);border-radius:999px;padding:0 1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;font-weight:850;letter-spacing:.05em;text-transform:uppercase}.chessimals-game-code{display:grid;gap:.2rem;border-radius:1rem;padding:.85rem 1rem;background:var(--chessimals-soft)}.chessimals-game-code small{color:var(--chessimals-muted);font-weight:900;letter-spacing:.06em;text-transform:uppercase}.chessimals-game-code strong{font-size:clamp(1.35rem,6vw,2rem);font-weight:950;letter-spacing:.05em}.chessimals-online-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.chessimals-history{gap:.75rem}.chessimals-history__heading{display:flex;align-items:start;justify-content:space-between;gap:.75rem}.chessimals-history__list{display:grid;gap:.5rem}.chessimals-history__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;border:1px solid var(--chessimals-border);border-radius:1rem;padding:.7rem .8rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-history__item span{display:grid;gap:.1rem;min-width:0}.chessimals-history__item strong{font-weight:950;letter-spacing:.04em}.chessimals-history__item small{overflow:hidden;color:var(--chessimals-muted);font-size:.82rem;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.chessimals-history__item em{flex:0 0 auto;color:var(--chessimals-primary);font-size:.86rem;font-style:normal;font-weight:950}.chessimals-home-settings{gap:.8rem}.chessimals-home-settings__actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.625rem}.chessimals-pending-player{display:flex;align-items:center;gap:.7rem;border:1px solid rgba(var(--chessimals-primary-rgb),.22);border-radius:1rem;padding:.75rem;background:var(--chessimals-soft)}.chessimals-pending-player div{display:grid;gap:.1rem;min-width:0}.chessimals-pending-player small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.07em;text-transform:uppercase}.chessimals-pending-player strong{overflow:hidden;font-size:1.05rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-game{display:grid;gap:.875rem}.chessimals-turn-card{order:1;display:flex;align-items:center;justify-content:space-between;gap:.625rem;min-height:3.75rem;overflow:visible;border:1px solid rgba(var(--chessimals-primary-rgb),.24);border-radius:1rem;padding:.55rem .65rem;background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.34),transparent 18%),linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.2),rgba(var(--chessimals-secondary-rgb),.1))}.chessimals-turn-card.is-black-turn{border-color:rgba(var(--ion-color-dark-rgb, 47, 42, 58),.28);background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.12),transparent 18%),linear-gradient(135deg,rgba(var(--ion-color-dark-rgb, 47, 42, 58),.14),rgba(var(--chessimals-primary-rgb),.1))}.chessimals-turn-card.is-finished{border-color:rgba(var(--ion-color-success-rgb, 45, 211, 111),.42);background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.35),transparent 18%),linear-gradient(135deg,rgba(var(--ion-color-success-rgb, 45, 211, 111),.18),rgba(var(--chessimals-primary-rgb),.12))}.chessimals-turn-card.is-finished .chessimals-turn-card__chip{color:var(--ion-color-success, #2dd36f)}.chessimals-turn-card.is-your-turn{border-color:rgba(var(--chessimals-primary-rgb),.48);box-shadow:0 0 0 .12rem rgba(var(--chessimals-primary-rgb),.12),0 .95rem 2rem rgba(var(--chessimals-primary-rgb),.14)}.chessimals-turn-card.is-your-turn .chessimals-turn-card__chip{background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);box-shadow:0 0 0 .32rem rgba(var(--chessimals-primary-rgb),.14);animation:chessimals-turn-pulse 1.45s ease-in-out infinite}.chessimals-turn-card.is-waiting-turn .chessimals-turn-card__chip{color:var(--chessimals-muted)}@keyframes chessimals-turn-pulse{0%,to{transform:translateZ(0) scale(1)}50%{transform:translateZ(0) scale(1.035)}}.chessimals-turn-card__copy{display:grid;min-width:0;gap:.15rem}.chessimals-turn-card__chip{justify-self:start;border-radius:999px;padding:.2rem .5rem;background:var(--chessimals-panel);color:var(--chessimals-primary);font-size:.62rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-turn-card strong{display:block;min-width:0;font-size:clamp(1rem,3.5vw,1.25rem);line-height:1.08;font-weight:950;overflow-wrap:anywhere}.chessimals-turn-card p{display:block;min-width:0;margin:0;color:var(--chessimals-muted);font-size:.78rem;line-height:1.22}.chessimals-player-strip{display:flex;flex:0 0 auto;align-items:center;gap:.45rem;min-width:10rem;max-width:min(17rem,42%);border:1px solid var(--chessimals-border);border-radius:999px;padding:.3rem .55rem .3rem .35rem;background:rgba(var(--ion-color-light-rgb, 244, 245, 248),.72)}:host-context(html.ion-palette-dark) .chessimals-player-strip,:host-context([data-theme=\"dark\"]) .chessimals-player-strip{background:#ffffff0f}.chessimals-player-strip val-user-avatar{display:inline-flex;flex:0 0 auto;line-height:0}.chessimals-player-strip__avatar{display:grid;place-items:center;flex:0 0 2.25rem;width:2.25rem;height:2.25rem;aspect-ratio:1 / 1;overflow:hidden;border-radius:999px;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);font-size:.875rem;line-height:1}.chessimals-player-strip__avatar--initials{font-size:.78rem;font-weight:950}:host ::ng-deep .chessimals-player-strip .chessimals-turn-avatar{width:2.25rem;min-width:2.25rem;height:2.25rem;border-radius:50%}.chessimals-player-strip__text{display:grid;min-width:0;gap:.05rem;line-height:1.1}.chessimals-player-strip__text span{color:var(--chessimals-muted);font-size:.58rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-player-strip__text strong{overflow:hidden;font-size:.82rem;line-height:1.08;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-player-strip__text small{overflow:hidden;color:var(--chessimals-muted);font-size:.66rem;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.chessimals-arena{order:4;display:grid;gap:.875rem;align-items:start}.chessimals-howto,.chessimals-tip,.chessimals-result,.chessimals-replay,.chessimals-rematch-status{display:grid;gap:.375rem;padding:1rem;border-radius:1.25rem;background:var(--chessimals-soft)}.chessimals-howto{border:1px solid var(--chessimals-border);background:var(--chessimals-soft);color:var(--chessimals-text)}.chessimals-howto p{color:var(--chessimals-muted)}.chessimals-howto__actions{display:flex;flex-wrap:wrap;gap:.625rem}:host-context(html.ion-palette-dark) .chessimals-howto,:host-context([data-theme=\"dark\"]) .chessimals-howto{border-color:#f6e3d533;background:#172116;color:#f6f3e9}:host-context(html.ion-palette-dark) .chessimals-howto p,:host-context([data-theme=\"dark\"]) .chessimals-howto p{color:#c8cfb1}.chessimals-result{order:5}.chessimals-result__stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;margin-top:.35rem}.chessimals-result__stats span{display:grid;gap:.15rem;min-width:0;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:.85rem;padding:.58rem .6rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--chessimals-panel)}.chessimals-result__stats small{overflow:hidden;color:var(--chessimals-muted);font-size:.68rem;font-weight:950;letter-spacing:.05em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.chessimals-result__stats b{overflow:hidden;color:var(--chessimals-text);font-size:.92rem;font-weight:950;line-height:1.12;text-overflow:ellipsis;white-space:nowrap}.chessimals-result__detail{margin:.2rem 0 0}.chessimals-bot-report{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.75rem;margin-top:.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1rem;padding:.78rem .85rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.1),transparent),var(--chessimals-panel)}.chessimals-bot-report>span{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:.85rem;background:rgba(var(--chessimals-secondary-rgb),.14);font-size:1.45rem;box-shadow:inset 0 0 0 1px rgba(var(--chessimals-primary-rgb),.14)}.chessimals-bot-report div{display:grid;gap:.12rem;min-width:0}.chessimals-bot-report small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-bot-report strong{color:var(--chessimals-text);font-size:1rem;font-weight:950;line-height:1.15}.chessimals-bot-report p{margin:0;color:var(--chessimals-muted);font-size:.84rem;font-weight:820;line-height:1.28}.chessimals-online-status{order:3;display:grid;grid-template-columns:1.35rem minmax(0,1fr);align-items:center;gap:.85rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1.1rem;padding:.85rem .95rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.09),transparent),var(--chessimals-panel)}.chessimals-online-status>span{justify-self:center;width:.72rem;height:.72rem;border-radius:999px;background:var(--chessimals-primary);box-shadow:0 0 0 .38rem rgba(var(--chessimals-primary-rgb),.12)}.chessimals-online-status.is-syncing>span{animation:chessimals-online-pulse .9s ease-in-out infinite}.chessimals-online-status.is-error{border-color:rgba(var(--ion-color-danger-rgb, 235, 68, 90),.28);background:linear-gradient(135deg,rgba(var(--ion-color-danger-rgb, 235, 68, 90),.1),transparent),var(--chessimals-panel)}.chessimals-online-status.is-error>span{background:var(--ion-color-danger, #eb445a);box-shadow:0 0 0 .38rem rgba(var(--ion-color-danger-rgb, 235, 68, 90),.12)}.chessimals-online-status div{display:grid;gap:.12rem;min-width:0}.chessimals-online-status strong{overflow:hidden;color:var(--chessimals-text);font-size:.95rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-online-status p{margin:0;color:var(--chessimals-muted);font-size:.84rem;font-weight:780;line-height:1.28}.chessimals-series{display:grid;gap:.18rem;margin-top:.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1rem;padding:.78rem .85rem;background:linear-gradient(135deg,rgba(var(--chessimals-secondary-rgb),.12),transparent),var(--chessimals-panel)}.chessimals-series--compact{margin-top:0}.chessimals-series small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-series strong{color:var(--chessimals-text);font-size:1rem;font-weight:950;line-height:1.15}.chessimals-series span{color:var(--chessimals-muted);font-size:.84rem;font-weight:820;line-height:1.28}.chessimals-replay{order:5;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;border:1px solid rgba(var(--chessimals-primary-rgb),.2);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.1),transparent),var(--chessimals-panel)}.chessimals-replay>div:first-child{display:grid;gap:.15rem;min-width:0}.chessimals-replay strong{font-size:1rem;font-weight:950}.chessimals-replay span{color:var(--chessimals-muted);font-size:.86rem;font-weight:800;line-height:1.25}.chessimals-replay__actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}.chessimals-replay__actions .chessimals-secondary{min-height:2.5rem;padding:0 .8rem}.chessimals-tutorial{order:3;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;padding:1rem;border:1px solid rgba(var(--chessimals-primary-rgb),.24);border-radius:1.25rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel)}.chessimals-tutorial>div{display:grid;gap:.18rem;min-width:0}.chessimals-tutorial small{color:var(--chessimals-primary);font-size:.76rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-tutorial strong{font-size:1rem;font-weight:950}.chessimals-tutorial p{margin:0;color:var(--chessimals-muted);font-size:.88rem;font-weight:780;line-height:1.35}.chessimals-tutorial .chessimals-secondary{min-height:2.5rem;padding:0 .85rem}.chessimals-rematch-status{order:5;border:1px solid rgba(var(--chessimals-primary-rgb),.22);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.12),transparent),var(--chessimals-panel)}.chessimals-rematch-status.is-incoming{border-color:rgba(var(--ion-color-success-rgb, 45, 211, 111),.38);background:linear-gradient(135deg,rgba(var(--ion-color-success-rgb, 45, 211, 111),.14),transparent),var(--chessimals-panel)}.chessimals-rematch-status strong{font-size:1rem;font-weight:950}.chessimals-rematch-status p{margin:0;color:var(--chessimals-muted);font-size:.88rem;line-height:1.35}.chessimals-rematch-player{background:#ffffff7a}:host-context(html.ion-palette-dark) .chessimals-rematch-player,:host-context([data-theme=\"dark\"]) .chessimals-rematch-player{background:#ffffff0f}.chessimals-rematch-status__actions{display:flex;justify-content:flex-end}.chessimals-rematch-status__actions .chessimals-secondary{min-height:2.5rem;padding:0 .95rem}.chessimals-howto h2,.chessimals-powers h2{margin:0;font-size:1.15rem;font-weight:950}.chessimals-tip p,.chessimals-powers p{color:var(--chessimals-muted)}.chessimals-learn-more{justify-self:start;min-height:2.75rem;border:0;border-radius:999px;padding:0 1rem;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);font:inherit;font-weight:950;box-shadow:0 .75rem 1.6rem rgba(var(--chessimals-primary-rgb),.28)}.chessimals-size,.chessimals-mode,.chessimals-status{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.chessimals-status{order:3;grid-template-columns:repeat(3,minmax(0,1fr))}.chessimals-size button,.chessimals-mode button,.chessimals-status div{display:grid;gap:.2rem;align-content:center;min-width:0;min-height:3.875rem;padding:.55rem .65rem;border:1px solid var(--chessimals-border);border-radius:1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-size button.is-selected{border-color:var(--chessimals-primary);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16)}.chessimals-mode button.is-selected{border-color:var(--chessimals-primary);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16)}.chessimals-difficulty{display:flex;flex-wrap:wrap;gap:.55rem}.chessimals-difficulty button{min-height:2.75rem;border:1px solid var(--chessimals-border);border-radius:999px;padding:0 1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;font-weight:950}.chessimals-difficulty button.is-selected{border-color:var(--chessimals-primary);background:var(--chessimals-primary);color:#fff}.chessimals-bots{display:grid;grid-template-columns:repeat(auto-fit,minmax(9.5rem,1fr));gap:.625rem}.chessimals-bots button{display:grid;grid-template-columns:auto 1fr;grid-template-areas:\"avatar title\" \"avatar body\" \"avatar tendency\";column-gap:.55rem;row-gap:.12rem;min-width:0;min-height:4.75rem;border:1px solid var(--chessimals-border);border-radius:1rem;padding:.65rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-bots button>span{grid-area:avatar;display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:50%;background:rgba(var(--chessimals-primary-rgb),.12);font-size:1.2rem}.chessimals-bots button strong{grid-area:title;align-self:end;font-size:.95rem;font-weight:950}.chessimals-bots button small{grid-area:body;color:var(--chessimals-muted);font-size:.75rem;font-weight:750;line-height:1.25}.chessimals-bots button p{grid-area:tendency;margin:.12rem 0 0;color:var(--chessimals-muted);font-size:.72rem;font-weight:820;line-height:1.24}.chessimals-bots button.is-selected{border-color:var(--chessimals-primary);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16),0 .75rem 1.5rem rgba(var(--chessimals-primary-rgb),.1)}.chessimals-size strong,.chessimals-mode strong,.chessimals-status strong,.chessimals-result strong,.chessimals-rematch-status strong,.chessimals-tip strong{font-weight:950}.chessimals-status strong{min-width:0;font-size:clamp(.95rem,2.5vw,1.2rem);line-height:1.08;overflow-wrap:anywhere;white-space:normal}.chessimals-size small,.chessimals-mode small,.chessimals-status small{color:var(--chessimals-muted);font-size:.78rem;line-height:1.12}.chessimals-board-wrap{--chessimals-board-radius: min(.85rem, 14px);display:flex;justify-content:center;min-width:0;max-width:100%;overflow-x:auto;width:100%;padding:.25rem 0}.chessimals-board-wrap.is-orienting .chessimals-board-frame{animation:chessimals-orient-board .32s ease}.chessimals-board-wrap.is-finished{overflow-x:visible}.chessimals-board-frame{flex:0 1 58rem;min-width:0;width:100%;max-width:58rem;border-radius:var(--chessimals-board-radius)}.chessimals-board{position:relative;display:grid;grid-template-columns:repeat(var(--board-size),minmax(0,1fr));grid-template-rows:repeat(var(--board-size),minmax(0,1fr));min-width:0;width:100%;aspect-ratio:1 / 1;overflow:hidden;isolation:isolate;contain:paint;border:1px solid var(--chessimals-border);border-radius:var(--chessimals-board-radius);clip-path:inset(0 round var(--chessimals-board-radius));-webkit-mask-image:-webkit-radial-gradient(white,black);background:radial-gradient(ellipse at 16% 18%,rgba(255,255,255,.34),transparent 18%),radial-gradient(ellipse at 82% 78%,rgba(var(--chessimals-primary-rgb),.1),transparent 22%),radial-gradient(ellipse at 32% 68%,rgba(var(--chessimals-stone-rgb),.05),transparent 30%),radial-gradient(ellipse at 66% 34%,rgba(255,255,255,.08),transparent 24%),var(--chessimals-border);box-shadow:inset 0 0 0 1px #ffffff1a,0 .85rem 2.1rem var(--chessimals-board-shadow)}.chessimals-board-wrap.is-syncing .chessimals-board{cursor:wait}.chessimals-cell-coordinate{position:absolute;z-index:5;color:color-mix(in srgb,var(--chessimals-muted) 78%,var(--chessimals-text));font-size:.68rem;font-weight:950;letter-spacing:.02em;line-height:1;pointer-events:none;text-transform:uppercase;-webkit-user-select:none;user-select:none}.chessimals-cell-coordinate--rank{top:.2rem;left:.24rem}.chessimals-cell-coordinate--file{right:.24rem;bottom:.18rem}@keyframes chessimals-orient-board{0%{opacity:.72;filter:blur(.06rem);transform:scale(.985)}52%{opacity:.92;filter:blur(0);transform:scale(1.012)}to{opacity:1;filter:blur(0);transform:scale(1)}}.chessimals-center-line{position:absolute;top:50%;left:0;right:0;z-index:2;display:flex;align-items:center;justify-content:center;border-top:.08rem dashed rgba(var(--chessimals-primary-rgb),.56);filter:drop-shadow(0 0 .24rem rgba(var(--chessimals-primary-rgb),.26));pointer-events:none}.chessimals-power-trail{position:absolute;inset:0;z-index:5;pointer-events:none;--trail-color: rgba(var(--chessimals-magic-rgb), .88);--trail-glow: rgba(var(--chessimals-magic-rgb), .48)}.chessimals-power-trail.is-capture{--trail-color: rgba(var(--chessimals-capture-rgb), .86);--trail-glow: rgba(var(--chessimals-capture-rgb), .46)}.chessimals-power-trail.effect-eagle{--trail-color: rgba(255, 255, 255, .92);--trail-glow: rgba(120, 210, 255, .54)}.chessimals-power-trail.effect-bull{--trail-color: rgba(188, 131, 76, .86);--trail-glow: rgba(188, 131, 76, .36)}.chessimals-power-trail.effect-kangaroo{--trail-color: rgba(174, 124, 255, .86);--trail-glow: rgba(174, 124, 255, .42)}.chessimals-power-trail.effect-lion{--trail-color: rgba(255, 221, 120, .88);--trail-glow: rgba(255, 190, 56, .42)}.chessimals-power-trail>span{position:absolute;top:var(--trail-y);left:var(--trail-x);width:var(--trail-length);height:.45rem;border-radius:999px;background:linear-gradient(90deg,transparent,var(--trail-color) 42%,rgba(255,255,255,.92));box-shadow:0 0 .75rem var(--trail-glow),0 0 1.45rem var(--trail-glow);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0);transform-origin:0 50%;animation:chessimals-power-trail .72s ease-out both}.chessimals-power-trail.effect-eagle>span{height:.28rem;background:linear-gradient(90deg,transparent,rgba(255,255,255,.95) 44%,rgba(120,210,255,.58)),repeating-linear-gradient(90deg,transparent 0 .7rem,rgba(255,255,255,.66) .7rem .92rem);animation-name:chessimals-eagle-trail}.chessimals-power-trail.effect-bull>span{height:.72rem;background:repeating-linear-gradient(90deg,rgba(255,255,255,.42) 0 .18rem,transparent .18rem .42rem),linear-gradient(90deg,transparent,var(--trail-color),rgba(255,255,255,.86));animation-name:chessimals-bull-trail}.chessimals-power-trail.effect-kangaroo>span{height:1rem;border-top:.16rem dashed var(--trail-color);background:transparent;box-shadow:none;filter:drop-shadow(0 0 .8rem var(--trail-glow));animation-name:chessimals-kangaroo-trail}.chessimals-power-trail.effect-lion>span{height:.62rem;background:linear-gradient(90deg,transparent,var(--trail-color),rgba(255,255,255,.82)),repeating-linear-gradient(115deg,rgba(255,255,255,.55) 0 .12rem,transparent .12rem .34rem);animation-name:chessimals-lion-trail}@keyframes chessimals-power-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0)}28%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.72)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}@keyframes chessimals-eagle-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0) skew(-10deg)}30%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.82) skew(-10deg)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1.05) skew(-10deg)}}@keyframes chessimals-bull-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0) scaleY(1)}38%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.7) scaleY(1.18)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1) scaleY(.82)}}@keyframes chessimals-kangaroo-trail{0%{opacity:0;transform:translateY(-.4rem) rotate(var(--trail-angle)) scaleX(0)}34%{opacity:1;transform:translateY(-1.2rem) rotate(var(--trail-angle)) scaleX(.62)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}@keyframes chessimals-lion-trail{0%{opacity:0;filter:saturate(1);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0)}36%{opacity:1;filter:saturate(1.4);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.76)}to{opacity:0;filter:saturate(1.1);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}.chessimals-board-overlay{position:absolute;inset:0;z-index:8;display:grid;place-content:center;gap:.5rem;padding:1.25rem;background:radial-gradient(circle at 50% 34%,rgba(255,226,129,.34),transparent 24%),radial-gradient(circle at 50% 52%,rgba(var(--chessimals-primary-rgb),.34),transparent 42%),linear-gradient(135deg,#140c16e0,#08120dc7);color:#fff;text-align:center;backdrop-filter:blur(2px);overflow:hidden}.chessimals-board-overlay.is-defeat{background:radial-gradient(circle at 50% 34%,rgba(143,168,206,.26),transparent 24%),radial-gradient(circle at 50% 52%,rgba(72,86,115,.42),transparent 42%),linear-gradient(135deg,#090c14e6,#1c1e2bcc)}.chessimals-board-overlay:before{position:absolute;inset:0;background:radial-gradient(circle at 20% 30%,rgba(255,255,255,.58) 0 .08rem,transparent .1rem),radial-gradient(circle at 75% 25%,rgba(255,226,129,.7) 0 .1rem,transparent .12rem),radial-gradient(circle at 68% 72%,rgba(var(--chessimals-capture-rgb),.54) 0 .08rem,transparent .1rem),radial-gradient(circle at 35% 78%,rgba(255,255,255,.48) 0 .07rem,transparent .09rem),radial-gradient(circle at 84% 66%,rgba(255,255,255,.38) 0 .06rem,transparent .08rem),radial-gradient(circle at 14% 64%,rgba(255,226,129,.48) 0 .07rem,transparent .09rem);content:\"\";opacity:.72;animation:chessimals-victory-sparks 1.5s ease-in-out infinite}.chessimals-board-overlay__rays{position:absolute;inset:-18%;background:conic-gradient(from 8deg,transparent 0 7deg,rgba(255,226,129,.16) 7deg 11deg,transparent 11deg 22deg);opacity:.85;animation:chessimals-finale-rays 8s linear infinite}.chessimals-board-overlay.is-defeat .chessimals-board-overlay__rays{background:conic-gradient(from 8deg,transparent 0 8deg,rgba(180,204,240,.1) 8deg 12deg,transparent 12deg 24deg);animation-duration:12s}.chessimals-board-overlay__ribbon{position:absolute;top:-20%;width:.42rem;height:54%;border-radius:999px;background:linear-gradient(to bottom,transparent,rgba(255,226,129,.72),transparent);opacity:.7;transform:rotate(var(--ribbon-angle, 12deg));animation:chessimals-finale-ribbon 2.5s ease-in-out infinite}.chessimals-board-overlay.is-defeat .chessimals-board-overlay__ribbon{background:linear-gradient(to bottom,transparent,rgba(180,204,240,.42),transparent);opacity:.48}.chessimals-board-overlay__ribbon.ribbon-a{left:18%;--ribbon-angle: -18deg}.chessimals-board-overlay__ribbon.ribbon-b{left:50%;--ribbon-angle: 8deg;animation-delay:.32s}.chessimals-board-overlay__ribbon.ribbon-c{right:18%;--ribbon-angle: 20deg;animation-delay:.64s}.chessimals-board-overlay>*{position:relative;z-index:1}.chessimals-board-overlay span{justify-self:center;border-radius:999px;padding:.32rem .7rem;background:#ffffff26;color:#ffffffe6;font-size:.76rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-board-overlay strong{font-size:clamp(1.65rem,8vw,3rem);line-height:1;font-weight:950;text-shadow:0 0 1.25rem rgba(255,255,255,.26)}.chessimals-board-overlay em{justify-self:center;display:grid;place-items:center;width:clamp(3rem,14vw,4.6rem);height:clamp(3rem,14vw,4.6rem);border:.16rem solid rgba(255,255,255,.62);border-radius:50%;background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.72),transparent 18%),linear-gradient(135deg,#ffe281,#b98436);color:#2d2412;font-size:clamp(1.1rem,5vw,1.65rem);font-style:normal;font-weight:950;box-shadow:0 0 0 .45rem #ffe2811f,0 1rem 2rem #00000042;animation:chessimals-finale-medal 1.8s ease-in-out infinite}.chessimals-board-overlay.is-defeat em{background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.48),transparent 18%),linear-gradient(135deg,#d9e2ef,#69758e);color:#182032;box-shadow:0 0 0 .45rem #b4ccf01a,0 1rem 2rem #00000052}.chessimals-board-overlay em.has-avatar{overflow:hidden;background:#fff;padding:0}.chessimals-board-overlay em.has-avatar img{display:block;width:100%;height:100%;object-fit:cover}.chessimals-board-overlay b{justify-self:center;color:#fffc;font-size:.8rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-board-overlay small{color:#ffffffd1;font-size:clamp(.9rem,3vw,1.1rem);font-weight:800}.chessimals-board-overlay__stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem;width:min(26rem,92%);margin:.2rem auto 0}.chessimals-board-overlay__stats div{display:grid;gap:.08rem;min-width:0;border:1px solid rgba(255,255,255,.18);border-radius:.75rem;padding:.42rem .46rem;background:#ffffff1a;backdrop-filter:blur(3px)}.chessimals-board-overlay__stats dt,.chessimals-board-overlay__stats dd{overflow:hidden;margin:0;text-overflow:ellipsis;white-space:nowrap}.chessimals-board-overlay__stats dt{color:#ffffffad;font-size:clamp(.52rem,2.1vw,.66rem);font-weight:950;letter-spacing:.04em;text-transform:uppercase}.chessimals-board-overlay__stats dd{color:#fff;font-size:clamp(.68rem,2.8vw,.88rem);font-weight:950}@keyframes chessimals-victory-sparks{0%,to{opacity:.46;transform:translateY(0) scale(.98)}50%{opacity:.95;transform:translateY(-.35rem) scale(1.02)}}@keyframes chessimals-finale-rays{to{transform:rotate(360deg)}}@keyframes chessimals-finale-ribbon{0%,to{opacity:.18;transform:translateY(-.5rem) rotate(var(--ribbon-angle))}50%{opacity:.75;transform:translateY(1.4rem) rotate(var(--ribbon-angle))}}@keyframes chessimals-finale-medal{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-.18rem) scale(1.04)}}.chessimals-cell{position:relative;isolation:isolate;--chessimals-cell-bg: var(--chessimals-cell-light);display:grid;place-items:center;min-width:0;min-height:0;aspect-ratio:1;border:0;background:radial-gradient(ellipse at 26% 24%,rgba(255,255,255,.12),transparent 24%),radial-gradient(ellipse at 78% 76%,rgba(61,54,36,.06),transparent 28%),linear-gradient(135deg,rgba(255,255,255,.04),transparent 52%,rgba(52,44,28,.04)),var(--chessimals-cell-bg);color:var(--chessimals-text);font:inherit;overflow:hidden;transition:background .16s ease,box-shadow .16s ease,transform .16s ease}.chessimals-cell:before,.chessimals-cell:after{pointer-events:none}.chessimals-cell-texture{position:absolute;inset:0;z-index:0;display:block;pointer-events:none;opacity:.42;mix-blend-mode:multiply;background:radial-gradient(ellipse at var(--wear-x, 28%) var(--wear-y, 32%),rgba(255,255,255,.16),transparent 17%),radial-gradient(ellipse at var(--wear-x2, 74%) var(--wear-y2, 68%),rgba(75,66,42,.09),transparent 25%),repeating-linear-gradient(var(--wear-angle, 26deg),rgba(75,66,42,.045) 0 1px,transparent 1px .52rem),linear-gradient(135deg,rgba(255,255,255,.06),transparent 42%,rgba(52,44,28,.045))}.chessimals-cell-texture:after{position:absolute;inset:.08rem;border:1px solid rgba(75,66,42,.05);border-radius:.18rem;box-shadow:inset .08rem .08rem #ffffff14,inset -.08rem -.08rem #342c1c0b;content:\"\"}.chessimals-cell.is-edge-cell .chessimals-cell-texture{opacity:.56;background:radial-gradient(ellipse at var(--wear-x, 28%) var(--wear-y, 32%),rgba(255,255,255,.14),transparent 18%),radial-gradient(ellipse at var(--wear-x2, 74%) var(--wear-y2, 68%),rgba(75,66,42,.14),transparent 28%),linear-gradient(135deg,rgba(70,52,28,.055),transparent 44%,rgba(52,44,28,.09)),repeating-linear-gradient(var(--wear-angle, 26deg),rgba(75,66,42,.055) 0 1px,transparent 1px .48rem)}.chessimals-cell.wear-0{--wear-x: 22%;--wear-y: 24%;--wear-x2: 78%;--wear-y2: 72%;--wear-angle: 18deg}.chessimals-cell.wear-1{--wear-x: 64%;--wear-y: 18%;--wear-x2: 30%;--wear-y2: 76%;--wear-angle: -24deg}.chessimals-cell.wear-2{--wear-x: 42%;--wear-y: 58%;--wear-x2: 82%;--wear-y2: 26%;--wear-angle: 42deg}.chessimals-cell.wear-3{--wear-x: 74%;--wear-y: 68%;--wear-x2: 24%;--wear-y2: 28%;--wear-angle: -12deg}.chessimals-cell.wear-4{--wear-x: 34%;--wear-y: 18%;--wear-x2: 62%;--wear-y2: 84%;--wear-angle: 64deg}.chessimals-cell.wear-5{--wear-x: 18%;--wear-y: 70%;--wear-x2: 70%;--wear-y2: 34%;--wear-angle: -48deg}:host-context(html.ion-palette-dark) .chessimals-cell-texture,:host-context([data-theme=\"dark\"]) .chessimals-cell-texture{opacity:.34;mix-blend-mode:soft-light}.chessimals-cell.is-dark-cell{--chessimals-cell-bg: var(--chessimals-cell-dark)}.chessimals-cell.is-selected{z-index:1;background:radial-gradient(circle,rgba(var(--chessimals-selected-rgb),.28) 0 36%,transparent 62%),linear-gradient(135deg,rgba(var(--chessimals-selected-rgb),.22),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .18rem var(--chessimals-selected),inset 0 0 .55rem #ffffffb8,inset 0 0 1.8rem rgba(var(--chessimals-selected-rgb),.42),0 0 .55rem rgba(var(--chessimals-selected-rgb),.56),0 0 1.55rem rgba(var(--chessimals-selected-rgb),.36)}.chessimals-board.is-power-aiming .chessimals-cell.is-selected{background:radial-gradient(circle at 50% 52%,rgba(var(--chessimals-magic-rgb),.38) 0 34%,transparent 64%),radial-gradient(circle at 32% 24%,rgba(255,255,255,.34),transparent 28%),linear-gradient(135deg,rgba(var(--chessimals-magic-rgb),.2),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .18rem var(--chessimals-magic-hot),inset 0 0 .8rem #ffffffa8,inset 0 0 1.9rem rgba(var(--chessimals-magic-rgb),.5),0 0 .7rem rgba(var(--chessimals-magic-rgb),.62),0 0 1.75rem rgba(var(--chessimals-magic-rgb),.42)}.chessimals-board.is-power-aiming .chessimals-cell.is-legal:not(.is-capture):after{border-color:rgba(var(--chessimals-magic-rgb),.94);box-shadow:0 0 .72rem rgba(var(--chessimals-magic-rgb),.48),inset 0 0 .6rem #fff3}.chessimals-board.is-power-aiming .chessimals-target{background:var(--chessimals-magic-hot);box-shadow:0 0 0 .2rem rgba(var(--chessimals-magic-rgb),.2),0 0 .95rem rgba(var(--chessimals-magic-rgb),.62)}.chessimals-cell.is-legal:not(.is-capture):after{position:absolute;inset:13%;z-index:2;border:max(2px,1.8%) solid var(--chessimals-move);border-radius:.55rem;content:\"\";opacity:.74;pointer-events:none}.chessimals-cell.is-last:not(.is-selected):not(.is-legal):not(.is-capture){background:radial-gradient(circle,rgba(var(--chessimals-last-rgb),.16) 0 42%,transparent 68%),var(--chessimals-cell-bg)}.chessimals-cell.is-capture{z-index:2;background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.24),transparent 34%),linear-gradient(135deg,rgba(var(--chessimals-capture-rgb),.14),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .14rem rgba(var(--chessimals-capture-rgb),.84),inset 0 0 1.4rem rgba(var(--chessimals-capture-rgb),.24),0 0 .95rem rgba(var(--chessimals-capture-rgb),.34);animation:chessimals-capture-aura 1.35s ease-in-out infinite}.chessimals-cell.is-capture:before{position:absolute;inset:4%;z-index:1;display:block;border-radius:.64rem;background:linear-gradient(90deg,transparent,rgba(255,255,255,.52),transparent),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.24),transparent 58%);content:\"\";opacity:0;transform:translate(-42%) scale(.9);animation:chessimals-capture-sweep 1.35s ease-in-out infinite}.chessimals-cell.is-capture:after{position:absolute;inset:8%;z-index:3;border:max(2px,1.55%) solid rgba(var(--chessimals-capture-rgb),.9);border-radius:.62rem;box-shadow:0 0 .75rem rgba(var(--chessimals-capture-rgb),.5),inset 0 0 .72rem #ffffff38;content:\"\";pointer-events:none;animation:chessimals-capture-frame 1.35s ease-in-out infinite}.chessimals-cell.has-capture-ready:not(.is-selected):after{position:absolute;inset:16%;z-index:3;border:max(2px,1.45%) solid rgba(var(--chessimals-selected-rgb),.72);border-radius:999px;box-shadow:0 0 .65rem rgba(var(--chessimals-selected-rgb),.34),inset 0 0 .55rem #ffffff2e;content:\"\"}.chessimals-cell.is-winning.is-legal:not(.is-capture):after{border-color:rgba(var(--chessimals-warning-rgb),.92);border-radius:999px;box-shadow:0 0 .75rem rgba(var(--chessimals-warning-rgb),.48),inset 0 0 .58rem #ffffff38}.chessimals-cell.is-winning .chessimals-target{background:var(--chessimals-warning);box-shadow:0 0 0 .22rem rgba(var(--chessimals-warning-rgb),.2),0 0 .95rem rgba(var(--chessimals-warning-rgb),.56)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture){background:radial-gradient(circle at 50% 52%,rgba(var(--chessimals-warning-rgb),.16),transparent 52%),var(--chessimals-cell-bg)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture) .chessimals-piece{filter:drop-shadow(0 0 .38rem rgba(var(--chessimals-warning-rgb),.52)) var(--chessimals-piece-white-shadow)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture) .chessimals-piece.is-black{filter:drop-shadow(0 0 .38rem rgba(var(--chessimals-warning-rgb),.52)) var(--chessimals-piece-black-shadow)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture):before{position:absolute;top:.26rem;right:.26rem;z-index:4;width:.48rem;height:.48rem;border-radius:999px;background:rgba(var(--chessimals-warning-rgb),.96);box-shadow:0 0 0 .18rem rgba(var(--chessimals-warning-rgb),.22);content:\"\"}@keyframes chessimals-capture-aura{0%,to{filter:saturate(1);box-shadow:inset 0 0 0 .12rem rgba(var(--chessimals-capture-rgb),.78),inset 0 0 1rem rgba(var(--chessimals-capture-rgb),.2),0 0 .64rem rgba(var(--chessimals-capture-rgb),.32)}50%{filter:saturate(1.22);box-shadow:inset 0 0 0 .16rem rgba(var(--chessimals-capture-rgb),.96),inset 0 0 1.34rem rgba(var(--chessimals-capture-rgb),.34),0 0 1.2rem rgba(var(--chessimals-capture-rgb),.48)}}@keyframes chessimals-capture-sweep{0%{opacity:0;transform:translate(-52%) scale(.88)}42%{opacity:.66;transform:translate(0) scale(1)}to{opacity:0;transform:translate(48%) scale(.92)}}@keyframes chessimals-capture-frame{0%,to{opacity:.68;transform:scale(.96)}50%{opacity:1;transform:scale(1)}}.chessimals-cell.has-source-effect:not(.is-moving-source){background:radial-gradient(circle,rgba(var(--chessimals-selected-rgb),.12) 0 34%,transparent 64%),var(--chessimals-cell-bg)}.chessimals-cell.has-move-effect{z-index:2;background:radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.22) 0 34%,transparent 68%),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .16rem rgba(var(--chessimals-capture-rgb),.86),inset 0 0 1.2rem rgba(var(--chessimals-capture-rgb),.26),0 0 1.1rem rgba(var(--chessimals-capture-rgb),.42)}.chessimals-cell.has-move-effect:before{position:absolute;inset:.12rem;z-index:1;display:block;border-radius:.7rem;background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.48),transparent 22%),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.42),transparent 58%);content:\"\";opacity:0;transform:scale(.72);animation:chessimals-power-impact .7s ease-out both}.chessimals-cell.has-move-effect:after{position:absolute;inset:.28rem;z-index:4;display:block;border:.14rem solid rgba(255,255,255,.72);border-radius:.58rem;box-shadow:0 0 .5rem #ffffff5c,0 0 1rem rgba(var(--chessimals-capture-rgb),.32);content:\"\";animation:chessimals-power-frame .86s ease-out both}.chessimals-cell.has-capture-effect{animation:chessimals-capture-hit .78s ease-out both}.chessimals-cell.effect-eagle:before{background:linear-gradient(135deg,transparent 10%,rgba(255,255,255,.78) 48%,transparent 52%),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.36),transparent 62%)}.chessimals-cell.effect-bull:before{background:repeating-linear-gradient(90deg,rgba(255,255,255,.34) 0 .16rem,transparent .16rem .34rem),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.38),transparent 62%)}.chessimals-cell.effect-kangaroo:before{border-radius:999px;background:radial-gradient(circle at 42% 44%,rgba(255,255,255,.58),transparent 18%),radial-gradient(circle at 58% 56%,rgba(var(--chessimals-capture-rgb),.4),transparent 64%)}.chessimals-cell.effect-lion:before{background:conic-gradient(from 0deg,transparent,rgba(255,255,255,.56),transparent,rgba(var(--chessimals-capture-rgb),.4),transparent),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.34),transparent 62%)}@keyframes chessimals-power-impact{0%{opacity:0;transform:scale(.54) rotate(0)}28%{opacity:1;transform:scale(.96) rotate(2deg)}to{opacity:0;transform:scale(1.3) rotate(8deg)}}@keyframes chessimals-power-frame{0%{opacity:0;transform:scale(.84)}34%{opacity:1;transform:scale(1.02)}to{opacity:0;transform:scale(1.16)}}@keyframes chessimals-capture-hit{0%,to{filter:saturate(1)}35%{filter:saturate(1.35) brightness(1.08)}}.chessimals-cell.is-moving-source .chessimals-piece{opacity:0}.chessimals-piece{position:relative;z-index:2;display:block;width:68%;height:74%;color:var(--chessimals-primary);--chessimals-piece-fill: var(--chessimals-piece-white-fill);--chessimals-piece-side: var(--chessimals-piece-white-side);--chessimals-piece-line: var(--chessimals-piece-white-line);--chessimals-piece-outline: rgba(82, 65, 46, .34);filter:var(--chessimals-piece-white-shadow)}.chessimals-piece.is-black{color:#fff;--chessimals-piece-fill: var(--chessimals-piece-black-fill);--chessimals-piece-side: var(--chessimals-piece-black-side);--chessimals-piece-line: var(--chessimals-piece-black-line);--chessimals-piece-outline: rgba(255, 255, 255, .22);filter:var(--chessimals-piece-black-shadow)}.chessimals-moving-piece{position:absolute;top:0;left:0;z-index:6;width:calc(100% / var(--board-size));height:calc(100% / var(--board-size));display:grid;place-items:center;pointer-events:none;transform:translate(calc(var(--from-col) * 100%),calc(var(--from-row) * 100%));animation:chessimals-piece-travel .36s cubic-bezier(.2,.82,.24,1) both}@keyframes chessimals-piece-travel{0%{transform:translate(calc(var(--from-col) * 100%),calc(var(--from-row) * 100%)) scale(1)}68%{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%)) scale(1.07)}to{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%)) scale(1)}}.chessimals-piece__side,.chessimals-piece__head,.chessimals-piece__collar,.chessimals-piece__neck,.chessimals-piece__base{position:absolute;display:block;left:50%;background:var(--chessimals-piece-fill);border:max(1px,1.25%) solid var(--chessimals-piece-outline);transform:translate(-50%)}.chessimals-piece__side{top:46%;z-index:0;width:58%;height:41%;border-radius:34% 34% 12% 12%;background:linear-gradient(96deg,var(--chessimals-piece-side) 0 34%,transparent 35%),var(--chessimals-piece-fill);clip-path:polygon(22% 0,78% 0,96% 100%,4% 100%);opacity:.92}.chessimals-piece__head{top:1%;z-index:4;width:48%;height:40%;border-radius:999px;background:radial-gradient(circle at 30% 22%,rgba(255,255,255,.72) 0 13%,transparent 14%),linear-gradient(135deg,rgba(255,255,255,.28) 0 34%,transparent 35%),var(--chessimals-piece-fill);box-shadow:inset -.18rem -.12rem #52412e0f,inset 0 -1px 0 var(--chessimals-piece-line)}.chessimals-piece.is-black .chessimals-piece__head{box-shadow:inset .18rem -.12rem #ffffff0f,inset 0 -1px 0 var(--chessimals-piece-line)}.chessimals-piece__collar{top:37%;z-index:5;width:72%;height:15%;border-radius:999px;background:linear-gradient(180deg,#f5cd77 0%,var(--chessimals-piece-gold) 55%,var(--chessimals-piece-gold-dark) 100%);border-color:color-mix(in srgb,var(--chessimals-piece-gold-dark) 72%,transparent);box-shadow:inset 0 .12rem #ffffff47,inset 0 -.08rem #462e1238,0 .08rem .18rem #462e1224}.chessimals-piece__neck{top:50%;z-index:2;width:52%;height:31%;clip-path:polygon(16% 0,84% 0,100% 100%,0 100%);background:linear-gradient(100deg,var(--chessimals-piece-side) 0 28%,transparent 29%),linear-gradient(180deg,var(--chessimals-piece-fill),color-mix(in srgb,var(--chessimals-piece-fill) 78%,var(--chessimals-piece-side)));box-shadow:inset -.12rem .1rem #ffffff14}.chessimals-piece__base{bottom:0;z-index:6;width:86%;height:17%;border-radius:.42rem .42rem .22rem .22rem;background:linear-gradient(100deg,var(--chessimals-piece-side) 0 18%,transparent 19%),linear-gradient(180deg,color-mix(in srgb,var(--chessimals-piece-fill) 92%,#ffffff),var(--chessimals-piece-fill));box-shadow:inset 0 .12rem #ffffff24,inset 0 -.1rem 0 var(--chessimals-piece-line)}.chessimals-target{width:16%;height:16%;border-radius:999px;background:var(--chessimals-move);opacity:.9;box-shadow:0 0 .9rem rgba(var(--chessimals-move-rgb),.42)}.chessimals-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.625rem}.chessimals-cards button{position:relative;isolation:isolate;display:grid;gap:.375rem;place-items:center;min-height:5.75rem;padding:.625rem;border:1px solid var(--chessimals-border);border-radius:1.125rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.chessimals-powers__heading{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.chessimals-powers p{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.chessimals-powers__heading span{flex:0 0 auto;border-radius:999px;padding:.28rem .62rem;background:rgba(var(--chessimals-primary-rgb),.12);color:var(--chessimals-primary);font-size:.78rem;font-weight:950}.chessimals-cards button.is-selected{border-color:var(--chessimals-magic-hot);background:radial-gradient(circle at 50% 16%,rgba(255,255,255,.42),transparent 30%),radial-gradient(circle at 50% 76%,rgba(var(--chessimals-magic-rgb),.2),transparent 56%),linear-gradient(135deg,rgba(var(--chessimals-magic-rgb),.2),#ffffff0a),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-magic-rgb),.28),0 0 1.35rem rgba(var(--chessimals-magic-rgb),.48),0 .9rem 2rem rgba(var(--chessimals-magic-rgb),.18);transform:translateY(-1px)}.chessimals-cards button.is-selected:before,.chessimals-cards button.is-selected:after{position:absolute;inset:-.5rem;z-index:0;border-radius:inherit;content:\"\";pointer-events:none}.chessimals-cards button>*{position:relative;z-index:1}.chessimals-cards button.is-selected:before{background:radial-gradient(circle at 18% 24%,rgba(var(--chessimals-magic-rgb),.88) 0 .08rem,transparent .1rem),radial-gradient(circle at 78% 20%,rgba(255,255,255,.86) 0 .07rem,transparent .09rem),radial-gradient(circle at 86% 62%,rgba(var(--chessimals-magic-rgb),.72) 0 .06rem,transparent .08rem),radial-gradient(circle at 28% 78%,rgba(255,245,111,.78) 0 .07rem,transparent .09rem),radial-gradient(circle at 54% 8%,rgba(255,255,255,.68) 0 .05rem,transparent .07rem);opacity:.8;animation:chessimalsMagicParticles 1.8s ease-in-out infinite}.chessimals-cards button.is-selected:after{background:conic-gradient(from 12deg,transparent 0 16deg,rgba(var(--chessimals-magic-rgb),.2) 16deg 22deg,transparent 22deg 44deg);opacity:.68;filter:blur(.04rem);animation:chessimalsMagicAura 3.2s linear infinite}.chessimals-cards button.is-used{opacity:.42}.chessimals-animal-face{display:grid;place-items:center;width:3.25rem;height:3.25rem;padding:.34rem;overflow:hidden;border-radius:1.2rem;background:radial-gradient(circle at 35% 22%,rgba(255,255,255,.82),transparent 55%),var(--chessimals-animal-face-bg);color:color-mix(in srgb,var(--chessimals-text) 92%,#000);box-shadow:inset 0 0 0 1px var(--chessimals-animal-face-border),0 .45rem 1.15rem #2e3a2c1a}.chessimals-animal-face img{display:block;width:100%;height:100%;object-fit:contain;border-radius:.72rem;background:var(--chessimals-animal-face-inner-bg);box-shadow:inset 0 0 0 1px #2e3a2c14;transform:none;filter:var(--chessimals-animal-face-filter)}.chessimals-cards button.is-selected .chessimals-animal-face,.chessimals-powers.is-ready .chessimals-cards button:not(.is-used) .chessimals-animal-face{background:radial-gradient(circle at 35% 22%,rgba(255,255,255,.9),transparent 52%),radial-gradient(circle at 62% 78%,rgba(var(--chessimals-magic-rgb),.22),transparent 48%),var(--chessimals-animal-face-bg);color:color-mix(in srgb,var(--chessimals-text) 94%,#000);box-shadow:inset 0 0 0 1px rgba(var(--chessimals-magic-rgb),.34),0 0 .85rem rgba(var(--chessimals-magic-rgb),.34),0 .75rem 1.6rem rgba(var(--chessimals-magic-rgb),.16)}.chessimals-powers.is-locked .chessimals-animal-face{filter:var(--chessimals-animal-face-locked-filter);opacity:.86}.chessimals-powers.is-locked .chessimals-animal-face img,.chessimals-cards button.is-used .chessimals-animal-face img{opacity:var(--chessimals-animal-face-locked-img-opacity)}.chessimals-cards strong{overflow:hidden;max-width:100%;font-size:.82rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-powers.is-locked .chessimals-cards{opacity:.68}.chessimals-powers.is-ready{border-color:rgba(var(--chessimals-magic-rgb),.46);box-shadow:0 0 0 1px rgba(var(--chessimals-magic-rgb),.12),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}.chessimals-powers.is-ready .chessimals-cards button:not(.is-used){animation:chessimalsPowerPulse 1.8s ease-in-out infinite}.chessimals-powers.is-unlock-pulse{animation:chessimalsPowersUnlocked 1.18s ease-out both}.chessimals-powers.is-unlock-pulse .chessimals-cards button:not(.is-used){animation:chessimalsPowerIgnite .76s ease-out both,chessimalsPowerPulse 1.8s ease-in-out .76s infinite}@keyframes chessimalsPowerPulse{0%,to{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}50%{box-shadow:0 0 1.4rem rgba(var(--chessimals-magic-rgb),.24)}}@keyframes chessimalsPowersUnlocked{0%{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}34%{box-shadow:0 0 0 .18rem rgba(var(--chessimals-magic-rgb),.28),0 0 2.2rem rgba(var(--chessimals-magic-rgb),.38),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.16)}to{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}}@keyframes chessimalsPowerIgnite{0%{transform:translateY(0) scale(.96);box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}42%{transform:translateY(-.08rem) scale(1.025);box-shadow:0 0 0 .14rem rgba(var(--chessimals-magic-rgb),.24),0 0 1.5rem rgba(var(--chessimals-magic-rgb),.46)}to{transform:translateY(0) scale(1);box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}}@keyframes chessimalsMagicParticles{0%,to{opacity:.54;transform:translateY(0) scale(.94)}50%{opacity:1;transform:translateY(-.18rem) scale(1.02)}}@keyframes chessimalsMagicAura{to{transform:rotate(1turn)}}.chessimals-actions{order:6;align-self:stretch;justify-self:stretch;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));gap:.625rem;margin-top:1rem}.chessimals-shell--projection .chessimals-game{max-width:min(96vw,90rem)}.chessimals-shell--projection .chessimals-turn-card{padding:.875rem 1rem}.chessimals-shell--projection .chessimals-status,.chessimals-shell--projection .chessimals-actions,.chessimals-shell--projection .chessimals-online,.chessimals-shell--projection .chessimals-replay,.chessimals-shell--projection .chessimals-rematch-status{display:none}.chessimals-shell--projection .chessimals-arena{grid-template-columns:minmax(0,1fr);justify-items:center}.chessimals-shell--projection .chessimals-board-wrap{--chessimals-board-radius: min(.625rem, 10px);width:min(96vw,82vh,58rem);max-width:none}.chessimals-shell--projection .chessimals-board-frame{flex-basis:auto;max-width:none}@media (min-width: 760px){.chessimals-game{gap:1rem}.chessimals-turn-card,.chessimals-status,.chessimals-arena,.chessimals-replay,.chessimals-result,.chessimals-actions{grid-column:1 / -1}.chessimals-arena{grid-template-columns:minmax(0,1fr);justify-items:center;align-items:start;gap:1rem}.chessimals-powers{width:min(100%,44rem);align-content:center;grid-template-columns:minmax(11rem,.68fr) minmax(0,1fr);align-items:center;gap:1rem;padding:1rem}.chessimals-cards{grid-template-columns:repeat(4,minmax(0,1fr))}.chessimals-cards button{min-height:5rem}.chessimals-powers p{-webkit-line-clamp:3}}.chessimals-rules{display:grid;gap:1rem;padding-top:.25rem}.chessimals-settings{display:grid;gap:.85rem}.chessimals-settings article{display:grid;gap:.65rem;padding:.9rem;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--ion-card-background, #fff)}.chessimals-about{display:grid;justify-items:center;gap:1rem;color:var(--ion-text-color, var(--chessimals-text))}.chessimals-about__logo{display:block;width:min(30rem,100%);aspect-ratio:1280 / 698;object-fit:cover;object-position:center;border-radius:1.25rem;background:#fff;box-shadow:0 1rem 2rem #2e3a2c24}.chessimals-about p{margin:0;color:var(--ion-color-medium, var(--chessimals-muted));font-size:.95rem;font-weight:750;line-height:1.45;text-align:center}.chessimals-about dl{display:grid;width:100%;margin:0;gap:.65rem}.chessimals-about dl div{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem .95rem;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--ion-card-background, #fff)}.chessimals-about dt,.chessimals-about dd{margin:0}.chessimals-about dt{color:var(--ion-color-medium, var(--chessimals-muted));font-size:.78rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-about dd{color:var(--ion-text-color, var(--chessimals-text));font-size:.95rem;font-weight:950}.chessimals-rules__hero{display:block;width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:1.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);box-shadow:0 1rem 2.25rem #2e3a2c1f}.chessimals-rules article{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:1rem;padding:1rem;border:1px solid var(--ion-border-color, #e7e4ea);border-radius:1.25rem;background:var(--ion-card-background, #fff);color:var(--ion-text-color, #2f2a3a)}.chessimals-rules article>span{display:grid;place-items:center;width:2rem;height:2rem;border-radius:999px;background:rgba(var(--chessimals-primary-rgb),.12);color:var(--chessimals-primary);font-weight:950}.chessimals-rules article>div{display:grid;min-width:0;gap:.45rem}.chessimals-rules h3,.chessimals-rules p,.chessimals-rules ul{margin:0}.chessimals-rules h3{font-size:1rem;font-weight:950;line-height:1.2}.chessimals-rules p,.chessimals-rules li{color:var(--ion-color-medium, #6f6a7a);line-height:1.5}.chessimals-rules ul{display:grid;gap:.45rem;padding-left:1.15rem}.chessimals-primary,.chessimals-secondary{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:3.625rem;border-radius:999px;font:inherit;font-weight:950}.chessimals-primary{border:0;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);box-shadow:0 1.125rem 2.8rem rgba(var(--chessimals-primary-rgb),.28)}.chessimals-secondary{border:1px solid var(--chessimals-border);background:transparent;color:var(--chessimals-text)}.chessimals-primary.is-working,.chessimals-secondary.is-working{cursor:wait;opacity:.82}.chessimals-button-spinner{width:1rem;height:1rem;flex:0 0 auto;border:.14rem solid currentColor;border-right-color:transparent;border-radius:999px;animation:chessimals-spin .72s linear infinite}@media (max-width: 560px){.chessimals-size,.chessimals-mode,.chessimals-actions{grid-template-columns:1fr}.chessimals-game{gap:.55rem;border-radius:1.25rem;padding:.625rem}.chessimals-turn-card{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.5rem;min-height:0;border-radius:.95rem;padding:.5rem}.chessimals-turn-card__copy{gap:.1rem}.chessimals-turn-card__chip{max-width:100%;padding:.18rem .5rem;font-size:.6rem;letter-spacing:.045em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chessimals-turn-card strong{font-size:clamp(.92rem,4.4vw,1.12rem);line-height:1.08}.chessimals-turn-card p{display:-webkit-box;overflow:hidden;font-size:.72rem;line-height:1.2;-webkit-box-orient:vertical;-webkit-line-clamp:1}.chessimals-player-strip{width:auto;max-width:none;min-width:0;padding:.25rem}.chessimals-player-strip__avatar{flex:0 0 1.8rem;width:1.8rem;height:1.8rem;aspect-ratio:1 / 1}:host ::ng-deep .chessimals-player-strip .chessimals-turn-avatar{width:1.8rem;min-width:1.8rem;height:1.8rem}.chessimals-player-strip__text{display:none}.chessimals-status{grid-template-columns:repeat(3,minmax(0,1fr));gap:.3rem}.chessimals-status div{gap:.14rem;min-height:2.2rem;border-radius:.82rem;padding:.34rem .3rem}.chessimals-status small{font-size:.58rem;line-height:1.05}.chessimals-status strong{font-size:clamp(.78rem,3.2vw,.94rem);line-height:1.05}.chessimals-tip,.chessimals-result,.chessimals-replay,.chessimals-online-status,.chessimals-tutorial{gap:.2rem;border-radius:1rem;padding:.7rem .75rem}.chessimals-tip strong,.chessimals-result strong,.chessimals-replay strong,.chessimals-tutorial strong{font-size:.95rem}.chessimals-tip p,.chessimals-result p{font-size:.9rem;line-height:1.28}.chessimals-result__stats{grid-template-columns:repeat(2,minmax(0,1fr))}.chessimals-replay,.chessimals-tutorial{grid-template-columns:1fr}.chessimals-replay__actions{justify-content:stretch}.chessimals-replay__actions .chessimals-secondary{flex:1 1 8rem}.chessimals-arena{gap:.5rem}.chessimals-board-wrap{width:100%;margin-inline:0;padding:0}.chessimals-board-frame{width:100%}.chessimals-powers{gap:.5rem;border-radius:1rem;padding:.55rem}.chessimals-powers__heading{gap:.4rem}.chessimals-powers h2{font-size:1rem}.chessimals-powers__heading span{padding:.22rem .48rem;font-size:.68rem}.chessimals-powers p{font-size:.78rem;line-height:1.2;-webkit-line-clamp:1}.chessimals-cards{grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem}.chessimals-cards button{gap:.25rem;min-height:3.95rem;border-radius:.85rem;padding:.34rem .22rem}.chessimals-animal-face{width:2.35rem;height:2.35rem;padding:.26rem;border-radius:.85rem}.chessimals-animal-face img{border-radius:.55rem}.chessimals-cards strong{font-size:.62rem}.chessimals-board{border-radius:var(--chessimals-board-radius)}.chessimals-cell-coordinate{font-size:.58rem}}@media (prefers-reduced-motion: reduce){.chessimals-cell.is-capture,.chessimals-cell.is-capture:before,.chessimals-cell.is-capture:after,.chessimals-cell.has-move-effect,.chessimals-cell.has-move-effect:before,.chessimals-cell.has-move-effect:after,.chessimals-cell.has-capture-effect,.chessimals-moving-piece{animation:none!important}.chessimals-moving-piece{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%))}}\n"], dependencies: [{ kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: ModalLayoutComponent, selector: "val-modal-layout", inputs: ["title", "subtitle", "closeLabel", "showClose", "actions", "actionsAlign", "footer", "footerClass"], outputs: ["close", "actionClick"] }, { kind: "component", type: RangeInputComponent, selector: "val-range-input", inputs: ["props"], outputs: ["rangeChange"] }, { kind: "component", type: ToggleInputComponent, selector: "val-toggle-input", inputs: ["preset", "props"] }, { kind: "component", type: UserAvatarComponent, selector: "val-user-avatar", inputs: ["props"], outputs: ["onClick"] }] }); }
67476
67142
  }
67477
67143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChessimalsGameComponent, decorators: [{
67478
67144
  type: Component,
@@ -67501,61 +67167,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
67501
67167
  </div>
67502
67168
  </article>
67503
67169
 
67504
- <article class="chessimals-challenge-card">
67505
- <div class="chessimals-challenge-card__copy">
67506
- <span>{{ t('chessimalsChallengeEyebrow') }}</span>
67507
- <h2>{{ t('chessimalsChallengeTitle') }}</h2>
67508
- <p>{{ t('chessimalsChallengeBody') }}</p>
67509
- </div>
67510
- <div class="chessimals-challenge-rival">
67511
- <span aria-hidden="true">{{ botProfileAvatar(challengeOpeningBot().profileId) }}</span>
67512
- <div>
67513
- <small>{{ t('chessimalsChallengeFirstRival') }}</small>
67514
- <strong>{{ challengeBotName(challengeOpeningBot()) }}</strong>
67515
- <p>{{ t(challengeOpeningBot().introKey) }}</p>
67516
- </div>
67517
- </div>
67518
- <div class="chessimals-challenge-card__stats">
67519
- <span>
67520
- <small>{{ t('chessimalsChallengeLives') }}</small>
67521
- <strong>3</strong>
67522
- </span>
67523
- <span>
67524
- <small>{{ t('chessimalsChallengeBestRound') }}</small>
67525
- <strong>{{ challengeStats().bestRoundReached || '-' }}</strong>
67526
- </span>
67527
- <span>
67528
- <small>{{ t('chessimalsChallengeBestStreak') }}</small>
67529
- <strong>{{ challengeStats().bestWinStreak || '-' }}</strong>
67530
- </span>
67531
- </div>
67532
- <div class="chessimals-challenge-path" [attr.aria-label]="t('chessimalsChallengePath')">
67533
- @for (bot of challengeLadder; track bot.id) {
67534
- <span
67535
- [class.is-cleared]="challengeStats().bestRoundReached >= bot.round"
67536
- [class.is-current]="challengeStats().bestRoundReached + 1 === bot.round"
67537
- [attr.title]="challengeBotName(bot)"
67538
- >
67539
- {{ botProfileAvatar(bot.profileId) }}
67540
- </span>
67541
- }
67542
- </div>
67543
- @if (challengeHistory().length) {
67544
- <div class="chessimals-challenge-history">
67545
- <small>{{ t('chessimalsChallengeRecentRuns') }}</small>
67546
- @for (run of challengeHistory(); track run.id) {
67547
- <span>
67548
- <b>{{ challengeRunStatusLabel(run) }}</b>
67549
- {{ challengeRunLine(run) }}
67550
- </span>
67551
- }
67552
- </div>
67553
- }
67554
- <button class="chessimals-primary" type="button" (click)="startChallenge()">
67555
- {{ t('chessimalsChallengeStart') }}
67556
- </button>
67557
- </article>
67558
-
67559
67170
  <div class="chessimals-size" role="radiogroup" [attr.aria-label]="t('chessimalsBoardSize')">
67560
67171
  @for (size of boardSizes; track size) {
67561
67172
  <button
@@ -67828,16 +67439,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
67828
67439
  }
67829
67440
 
67830
67441
  <div class="chessimals-status">
67831
- @if (isChallengeActive()) {
67832
- <div>
67833
- <small>{{ t('chessimalsChallengeRound') }}</small>
67834
- <strong>{{ challengeRoundLabel() }}</strong>
67835
- </div>
67836
- <div>
67837
- <small>{{ t('chessimalsChallengeLives') }}</small>
67838
- <strong>{{ challengeLivesLabel() }}</strong>
67839
- </div>
67840
- }
67841
67442
  <div>
67842
67443
  <small>{{ t('chessimalsMoves') }}</small>
67843
67444
  <strong>{{ game().moveCount }}</strong>
@@ -68116,54 +67717,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68116
67717
  </div>
68117
67718
  </div>
68118
67719
  }
68119
- @if (isChallengeActive()) {
68120
- <div class="chessimals-challenge-summary">
68121
- <small>{{ t('chessimalsChallengeTitle') }}</small>
68122
- <strong>{{ challengeOutcomeTitle() }}</strong>
68123
- <p>{{ challengeOutcomeBody() }}</p>
68124
- @if (challengeHasNewRecord()) {
68125
- <div class="chessimals-challenge-record">
68126
- <span aria-hidden="true">★</span>
68127
- <strong>{{ t('chessimalsChallengeNewRecord') }}</strong>
68128
- </div>
68129
- }
68130
- @if (challengeLastRoundStats(); as roundStats) {
68131
- <div class="chessimals-challenge-summary__stats">
68132
- <span>
68133
- <small>{{ t('chessimalsChallengePowersUsed') }}</small>
68134
- <b>{{ totalChallengePowers(roundStats) }}</b>
68135
- </span>
68136
- <span>
68137
- <small>{{ t('chessimalsChallengePowerCaptures') }}</small>
68138
- <b>{{ roundStats.powerCaptures }}</b>
68139
- </span>
68140
- <span>
68141
- <small>{{ t('chessimalsChallengePromotions') }}</small>
68142
- <b>{{ roundStats.promotions }}</b>
68143
- </span>
68144
- </div>
68145
- }
68146
- @if (challengePhase() === 'between' && activeChallengeBot(); as nextBot) {
68147
- <div class="chessimals-challenge-rival chessimals-challenge-rival--next">
68148
- <span aria-hidden="true">{{ botProfileAvatar(nextBot.profileId) }}</span>
68149
- <div>
68150
- <small>{{ t('chessimalsChallengeNextRivalLabel') }}</small>
68151
- <strong>{{ challengeBotName(nextBot) }}</strong>
68152
- <p>{{ t(nextBot.introKey) }}</p>
68153
- </div>
68154
- </div>
68155
- }
68156
- @if (challengePhase() === 'between') {
68157
- <button class="chessimals-primary" type="button" (click)="continueChallenge()">
68158
- {{ t('chessimalsChallengeNextRival') }}
68159
- </button>
68160
- } @else {
68161
- <button class="chessimals-primary" type="button" (click)="startChallenge()">
68162
- {{ t('chessimalsChallengePlayAgain') }}
68163
- </button>
68164
- }
68165
- </div>
68166
- }
68167
67720
  @if (seriesSummary()) {
68168
67721
  <div class="chessimals-series">
68169
67722
  <small>{{ t('chessimalsSeriesTitle') }}</small>
@@ -68255,7 +67808,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68255
67808
  {{ rematchActionLabel() }}
68256
67809
  </button>
68257
67810
  }
68258
- @if (game().mode !== 'online' && !isChallengeActive()) {
67811
+ @if (game().mode !== 'online') {
68259
67812
  <button class="chessimals-secondary" type="button" (click)="requestRestartGame()">
68260
67813
  {{ t('restart') }}
68261
67814
  </button>
@@ -68412,7 +67965,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68412
67965
  <ion-modal
68413
67966
  [isOpen]="!!confirmAction()"
68414
67967
  cssClass="val-modal-adaptive"
68415
- (didDismiss)="closeConfirmModal()"
67968
+ (didDismiss)="handleConfirmModalDismissed()"
68416
67969
  >
68417
67970
  <ng-template>
68418
67971
  <val-modal-layout
@@ -68426,7 +67979,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68426
67979
  />
68427
67980
  </ng-template>
68428
67981
  </ion-modal>
68429
- `, styles: [":host{display:block}.chessimals-shell{--chessimals-panel: #ffffff;--chessimals-surface: #fffaf1;--chessimals-border: rgba(46, 58, 44, .18);--chessimals-text: #2e3a2c;--chessimals-muted: #51643d;--chessimals-soft: rgba(111, 122, 60, .1);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-selected: #37f28a;--chessimals-selected-rgb: 55, 242, 138;--chessimals-magic: #f7d45a;--chessimals-magic-rgb: 247, 212, 90;--chessimals-magic-hot: #fff56f;--chessimals-magic-deep: #b77a18;--chessimals-warning: #f4c542;--chessimals-warning-rgb: 244, 197, 66;--chessimals-move: var(--chessimals-sky);--chessimals-move-rgb: var(--chessimals-sky-rgb);--chessimals-capture: #1fcdb3;--chessimals-capture-rgb: 31, 205, 179;--chessimals-last: #8c6b4f;--chessimals-last-rgb: 140, 107, 79;--chessimals-cell-light: #f3f4e8;--chessimals-cell-dark: #7f944d;--chessimals-board-shadow: rgba(46, 58, 44, .14);--chessimals-piece-white-fill: #ffffff;--chessimals-piece-white-side: #f3eadb;--chessimals-piece-white-line: rgba(82, 65, 46, .12);--chessimals-piece-white-shadow: drop-shadow(0 0 1px rgba(84, 62, 34, .52)) drop-shadow(0 .18rem .12rem rgba(72, 58, 36, .22)) drop-shadow(0 .34rem .42rem rgba(72, 58, 36, .22));--chessimals-piece-black-fill: #242936;--chessimals-piece-black-side: #171b25;--chessimals-piece-black-line: rgba(255, 255, 255, .1);--chessimals-piece-black-shadow: drop-shadow(0 0 1px rgba(255, 255, 255, .34)) drop-shadow(0 .18rem .1rem rgba(255, 255, 255, .12)) drop-shadow(0 .32rem .42rem rgba(0, 0, 0, .36));--chessimals-piece-gold: #c79a42;--chessimals-piece-gold-dark: #8a5f22;--chessimals-animal-face-bg: #fffdf7;--chessimals-animal-face-inner-bg: #ffffff;--chessimals-animal-face-border: rgba(46, 58, 44, .12);--chessimals-animal-face-filter: drop-shadow(0 .12rem .16rem rgba(46, 58, 44, .18));--chessimals-animal-face-locked-filter: grayscale(.2) saturate(.72);--chessimals-animal-face-locked-img-opacity: .72;display:grid;gap:1.125rem;width:100%;max-width:min(100%,60rem);margin:0 auto;color:var(--chessimals-text)}@media (prefers-color-scheme: dark){.chessimals-shell{--chessimals-panel: #172116;--chessimals-surface: #0f170f;--chessimals-border: rgba(242, 230, 213, .2);--chessimals-text: #f6f3e9;--chessimals-muted: #c8cfb1;--chessimals-soft: rgba(111, 122, 60, .22);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-cell-light: #f3f4e8;--chessimals-cell-dark: #7f944d;--chessimals-board-shadow: rgba(0, 0, 0, .34);--chessimals-animal-face-border: rgba(242, 230, 213, .24)}}.chessimals-resume-splash{order:0;position:fixed;inset:0;z-index:1000;display:grid;place-items:center;align-content:center;gap:.65rem;padding:1.5rem;text-align:center;color:var(--chessimals-text);background:radial-gradient(circle at 50% 42%,rgba(var(--chessimals-primary-rgb),.18),transparent 22rem),color-mix(in srgb,var(--chessimals-panel) 92%,transparent);backdrop-filter:blur(.9rem)}.chessimals-resume-splash__paw{display:grid;place-items:center;width:clamp(4.6rem,16vw,5.6rem);height:clamp(4.6rem,16vw,5.6rem);border-radius:1.55rem;background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.96),transparent 34%),linear-gradient(145deg,#fffffff5,rgba(var(--chessimals-secondary-rgb),.22)),color-mix(in srgb,var(--chessimals-panel) 82%,white);border:.12rem solid rgba(var(--chessimals-primary-rgb),.22);box-shadow:0 1.15rem 2.6rem rgba(var(--ion-color-dark-rgb, 47, 42, 58),.16),0 0 0 .42rem #ffffff6b,inset 0 -.25rem .6rem rgba(var(--chessimals-primary-rgb),.08);animation:chessimals-resume-pulse 1.2s ease-in-out infinite;font-size:clamp(2.45rem,9vw,3.35rem);line-height:1;filter:drop-shadow(0 .28rem .38rem rgba(var(--ion-color-dark-rgb, 47, 42, 58),.18))}.chessimals-resume-splash strong{font-size:clamp(1.55rem,5vw,2.4rem);font-weight:950;line-height:1.05}.chessimals-resume-splash p{max-width:24rem;margin:0;color:var(--chessimals-muted);font-size:1rem;line-height:1.35}@keyframes chessimals-resume-pulse{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-.25rem) scale(1.04)}}@keyframes chessimals-spin{to{transform:rotate(360deg)}}@keyframes chessimals-online-pulse{0%,to{transform:scale(1);opacity:.78}50%{transform:scale(1.22);opacity:1}}:host-context(html.ion-palette-dark) .chessimals-shell,:host-context([data-theme=\"dark\"]) .chessimals-shell{--chessimals-panel: #172116;--chessimals-surface: #0f170f;--chessimals-border: rgba(246, 227, 213, .22);--chessimals-text: #f6f3e9;--chessimals-muted: #c8cfb1;--chessimals-soft: rgba(111, 122, 60, .22);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-cell-light: #e8eadc;--chessimals-cell-dark: #5f7040;--chessimals-board-shadow: rgba(0, 0, 0, .34);--chessimals-capture: #66f2d7;--chessimals-capture-rgb: 102, 242, 215;--chessimals-last: #cdbe9b;--chessimals-last-rgb: 205, 190, 155;--chessimals-piece-white-fill: #fffaff;--chessimals-piece-white-side: #f0e5d4;--chessimals-piece-white-line: rgba(82, 65, 46, .12);--chessimals-piece-white-shadow: drop-shadow(0 0 1px rgba(84, 62, 34, .48)) drop-shadow(0 .18rem .12rem rgba(0, 0, 0, .24)) drop-shadow(0 .34rem .42rem rgba(0, 0, 0, .3));--chessimals-piece-black-fill: #202633;--chessimals-piece-black-side: #111620;--chessimals-piece-black-line: rgba(255, 255, 255, .12);--chessimals-piece-black-shadow: drop-shadow(0 0 1px rgba(255, 255, 255, .34)) drop-shadow(0 .18rem .1rem rgba(255, 255, 255, .14)) drop-shadow(0 .34rem .44rem rgba(0, 0, 0, .52));--chessimals-animal-face-bg: #fffdf7;--chessimals-animal-face-inner-bg: #ffffff;--chessimals-animal-face-border: rgba(242, 230, 213, .24);--chessimals-animal-face-filter: drop-shadow(0 .12rem .16rem rgba(0, 0, 0, .22));--chessimals-animal-face-locked-filter: grayscale(.32) saturate(.72);--chessimals-animal-face-locked-img-opacity: .58}.chessimals-hero{display:grid;gap:.75rem;justify-items:center;overflow:hidden;border-radius:1.75rem;padding:clamp(1.25rem,5vw,2.5rem);background:radial-gradient(circle at 18% 12%,rgba(255,255,255,.92),transparent 20%),linear-gradient(135deg,#fdf8ee,#fff 40%,#edf3df);color:var(--chessimals-text);text-align:center;border:1px solid var(--chessimals-border)}:host-context(html.ion-palette-dark) .chessimals-hero,:host-context([data-theme=\"dark\"]) .chessimals-hero{background:radial-gradient(circle at 18% 12%,rgba(255,255,255,.08),transparent 22%),linear-gradient(135deg,#111a10,#172116 48%,#0f170f);color:var(--chessimals-text);border-color:#f6e3d538}.chessimals-hero__logo{display:grid;place-items:center;width:min(22rem,82vw);max-width:100%;padding:.5rem;border-radius:1.35rem;background:#fff;box-shadow:0 1rem 2.5rem #2e3a2c1a,inset 0 0 0 1px #2e3a2c14}.chessimals-hero__logo img{display:block;width:100%;height:auto;max-height:12rem;object-fit:contain;border-radius:1rem}.chessimals-hero h1{margin:0;font-size:clamp(2.4rem,9vw,4.5rem);line-height:.95;font-weight:950}.chessimals-hero p,.chessimals-howto p,.chessimals-tip p,.chessimals-result p,.chessimals-powers p{margin:0;line-height:1.45}.chessimals-panel,.chessimals-game,.chessimals-powers{display:grid;gap:1rem;border:1px solid var(--chessimals-border);border-radius:1.625rem;padding:clamp(1rem,4vw,1.5rem);background:var(--chessimals-panel)}.chessimals-online{display:grid;gap:.875rem;border:1px solid var(--chessimals-border);border-radius:1.375rem;padding:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--chessimals-panel)}.chessimals-online--waiting{order:2;border-color:rgba(var(--chessimals-primary-rgb),.34)}.chessimals-online h2,.chessimals-online p{margin:0}.chessimals-online h2{font-size:1.1rem;font-weight:950}.chessimals-online p{color:var(--chessimals-muted);line-height:1.4}.chessimals-online__create,.chessimals-online__join{display:grid;gap:.55rem}.chessimals-online__create small{color:var(--chessimals-muted);font-weight:800;line-height:1.35}.chessimals-online__join{border-top:1px solid var(--chessimals-border);padding-top:.85rem}.chessimals-online__join>strong{font-size:.95rem;font-weight:950}.chessimals-online__error{border-radius:.875rem;padding:.7rem .8rem;background:rgba(var(--ion-color-danger-rgb, 235, 68, 90),.12);color:var(--ion-color-danger, #eb445a)!important;font-weight:800}.chessimals-online__loading{display:flex;align-items:center;gap:.625rem;border:1px solid rgba(var(--chessimals-primary-rgb),.22);border-radius:999px;padding:.65rem .85rem;background:rgba(var(--chessimals-primary-rgb),.08);color:var(--chessimals-text);font-size:.92rem;font-weight:900}.chessimals-online__loading span{width:1rem;height:1rem;border:.15rem solid rgba(var(--chessimals-primary-rgb),.24);border-top-color:var(--chessimals-primary);border-radius:999px;animation:chessimals-spin .75s linear infinite}.chessimals-online-code{display:grid;gap:.4rem;font-weight:950}.chessimals-online-code input{width:100%;min-height:3.3rem;border:1px solid var(--chessimals-border);border-radius:999px;padding:0 1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;font-weight:850;letter-spacing:.05em;text-transform:uppercase}.chessimals-game-code{display:grid;gap:.2rem;border-radius:1rem;padding:.85rem 1rem;background:var(--chessimals-soft)}.chessimals-game-code small{color:var(--chessimals-muted);font-weight:900;letter-spacing:.06em;text-transform:uppercase}.chessimals-game-code strong{font-size:clamp(1.35rem,6vw,2rem);font-weight:950;letter-spacing:.05em}.chessimals-online-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.chessimals-history{gap:.75rem}.chessimals-history__heading{display:flex;align-items:start;justify-content:space-between;gap:.75rem}.chessimals-history__list{display:grid;gap:.5rem}.chessimals-history__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;border:1px solid var(--chessimals-border);border-radius:1rem;padding:.7rem .8rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-history__item span{display:grid;gap:.1rem;min-width:0}.chessimals-history__item strong{font-weight:950;letter-spacing:.04em}.chessimals-history__item small{overflow:hidden;color:var(--chessimals-muted);font-size:.82rem;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.chessimals-history__item em{flex:0 0 auto;color:var(--chessimals-primary);font-size:.86rem;font-style:normal;font-weight:950}.chessimals-home-settings{gap:.8rem}.chessimals-home-settings__actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.625rem}.chessimals-pending-player{display:flex;align-items:center;gap:.7rem;border:1px solid rgba(var(--chessimals-primary-rgb),.22);border-radius:1rem;padding:.75rem;background:var(--chessimals-soft)}.chessimals-pending-player div{display:grid;gap:.1rem;min-width:0}.chessimals-pending-player small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.07em;text-transform:uppercase}.chessimals-pending-player strong{overflow:hidden;font-size:1.05rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-game{display:grid;gap:.875rem}.chessimals-turn-card{order:1;display:flex;align-items:center;justify-content:space-between;gap:.625rem;min-height:3.75rem;overflow:visible;border:1px solid rgba(var(--chessimals-primary-rgb),.24);border-radius:1rem;padding:.55rem .65rem;background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.34),transparent 18%),linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.2),rgba(var(--chessimals-secondary-rgb),.1))}.chessimals-turn-card.is-black-turn{border-color:rgba(var(--ion-color-dark-rgb, 47, 42, 58),.28);background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.12),transparent 18%),linear-gradient(135deg,rgba(var(--ion-color-dark-rgb, 47, 42, 58),.14),rgba(var(--chessimals-primary-rgb),.1))}.chessimals-turn-card.is-finished{border-color:rgba(var(--ion-color-success-rgb, 45, 211, 111),.42);background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.35),transparent 18%),linear-gradient(135deg,rgba(var(--ion-color-success-rgb, 45, 211, 111),.18),rgba(var(--chessimals-primary-rgb),.12))}.chessimals-turn-card.is-finished .chessimals-turn-card__chip{color:var(--ion-color-success, #2dd36f)}.chessimals-turn-card.is-your-turn{border-color:rgba(var(--chessimals-primary-rgb),.48);box-shadow:0 0 0 .12rem rgba(var(--chessimals-primary-rgb),.12),0 .95rem 2rem rgba(var(--chessimals-primary-rgb),.14)}.chessimals-turn-card.is-your-turn .chessimals-turn-card__chip{background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);box-shadow:0 0 0 .32rem rgba(var(--chessimals-primary-rgb),.14);animation:chessimals-turn-pulse 1.45s ease-in-out infinite}.chessimals-turn-card.is-waiting-turn .chessimals-turn-card__chip{color:var(--chessimals-muted)}@keyframes chessimals-turn-pulse{0%,to{transform:translateZ(0) scale(1)}50%{transform:translateZ(0) scale(1.035)}}.chessimals-turn-card__copy{display:grid;min-width:0;gap:.15rem}.chessimals-turn-card__chip{justify-self:start;border-radius:999px;padding:.2rem .5rem;background:var(--chessimals-panel);color:var(--chessimals-primary);font-size:.62rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-turn-card strong{display:block;min-width:0;font-size:clamp(1rem,3.5vw,1.25rem);line-height:1.08;font-weight:950;overflow-wrap:anywhere}.chessimals-turn-card p{display:block;min-width:0;margin:0;color:var(--chessimals-muted);font-size:.78rem;line-height:1.22}.chessimals-player-strip{display:flex;flex:0 0 auto;align-items:center;gap:.45rem;min-width:10rem;max-width:min(17rem,42%);border:1px solid var(--chessimals-border);border-radius:999px;padding:.3rem .55rem .3rem .35rem;background:rgba(var(--ion-color-light-rgb, 244, 245, 248),.72)}:host-context(html.ion-palette-dark) .chessimals-player-strip,:host-context([data-theme=\"dark\"]) .chessimals-player-strip{background:#ffffff0f}.chessimals-player-strip val-user-avatar{display:inline-flex;flex:0 0 auto;line-height:0}.chessimals-player-strip__avatar{display:grid;place-items:center;flex:0 0 2.25rem;width:2.25rem;height:2.25rem;aspect-ratio:1 / 1;overflow:hidden;border-radius:999px;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);font-size:.875rem;line-height:1}.chessimals-player-strip__avatar--initials{font-size:.78rem;font-weight:950}:host ::ng-deep .chessimals-player-strip .chessimals-turn-avatar{width:2.25rem;min-width:2.25rem;height:2.25rem;border-radius:50%}.chessimals-player-strip__text{display:grid;min-width:0;gap:.05rem;line-height:1.1}.chessimals-player-strip__text span{color:var(--chessimals-muted);font-size:.58rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-player-strip__text strong{overflow:hidden;font-size:.82rem;line-height:1.08;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-player-strip__text small{overflow:hidden;color:var(--chessimals-muted);font-size:.66rem;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.chessimals-arena{order:4;display:grid;gap:.875rem;align-items:start}.chessimals-howto,.chessimals-tip,.chessimals-result,.chessimals-replay,.chessimals-rematch-status{display:grid;gap:.375rem;padding:1rem;border-radius:1.25rem;background:var(--chessimals-soft)}.chessimals-howto{border:1px solid var(--chessimals-border);background:var(--chessimals-soft);color:var(--chessimals-text)}.chessimals-howto p{color:var(--chessimals-muted)}.chessimals-howto__actions{display:flex;flex-wrap:wrap;gap:.625rem}:host-context(html.ion-palette-dark) .chessimals-howto,:host-context([data-theme=\"dark\"]) .chessimals-howto{border-color:#f6e3d533;background:#172116;color:#f6f3e9}:host-context(html.ion-palette-dark) .chessimals-howto p,:host-context([data-theme=\"dark\"]) .chessimals-howto p{color:#c8cfb1}.chessimals-result{order:5}.chessimals-result__stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;margin-top:.35rem}.chessimals-result__stats span{display:grid;gap:.15rem;min-width:0;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:.85rem;padding:.58rem .6rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--chessimals-panel)}.chessimals-result__stats small{overflow:hidden;color:var(--chessimals-muted);font-size:.68rem;font-weight:950;letter-spacing:.05em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.chessimals-result__stats b{overflow:hidden;color:var(--chessimals-text);font-size:.92rem;font-weight:950;line-height:1.12;text-overflow:ellipsis;white-space:nowrap}.chessimals-result__detail{margin:.2rem 0 0}.chessimals-bot-report{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.75rem;margin-top:.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1rem;padding:.78rem .85rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.1),transparent),var(--chessimals-panel)}.chessimals-bot-report>span{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:.85rem;background:rgba(var(--chessimals-secondary-rgb),.14);font-size:1.45rem;box-shadow:inset 0 0 0 1px rgba(var(--chessimals-primary-rgb),.14)}.chessimals-bot-report div{display:grid;gap:.12rem;min-width:0}.chessimals-bot-report small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-bot-report strong{color:var(--chessimals-text);font-size:1rem;font-weight:950;line-height:1.15}.chessimals-bot-report p{margin:0;color:var(--chessimals-muted);font-size:.84rem;font-weight:820;line-height:1.28}.chessimals-online-status{order:3;display:grid;grid-template-columns:1.35rem minmax(0,1fr);align-items:center;gap:.85rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1.1rem;padding:.85rem .95rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.09),transparent),var(--chessimals-panel)}.chessimals-online-status>span{justify-self:center;width:.72rem;height:.72rem;border-radius:999px;background:var(--chessimals-primary);box-shadow:0 0 0 .38rem rgba(var(--chessimals-primary-rgb),.12)}.chessimals-online-status.is-syncing>span{animation:chessimals-online-pulse .9s ease-in-out infinite}.chessimals-online-status.is-error{border-color:rgba(var(--ion-color-danger-rgb, 235, 68, 90),.28);background:linear-gradient(135deg,rgba(var(--ion-color-danger-rgb, 235, 68, 90),.1),transparent),var(--chessimals-panel)}.chessimals-online-status.is-error>span{background:var(--ion-color-danger, #eb445a);box-shadow:0 0 0 .38rem rgba(var(--ion-color-danger-rgb, 235, 68, 90),.12)}.chessimals-online-status div{display:grid;gap:.12rem;min-width:0}.chessimals-online-status strong{overflow:hidden;color:var(--chessimals-text);font-size:.95rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-online-status p{margin:0;color:var(--chessimals-muted);font-size:.84rem;font-weight:780;line-height:1.28}.chessimals-series{display:grid;gap:.18rem;margin-top:.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1rem;padding:.78rem .85rem;background:linear-gradient(135deg,rgba(var(--chessimals-secondary-rgb),.12),transparent),var(--chessimals-panel)}.chessimals-series--compact{margin-top:0}.chessimals-series small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-series strong{color:var(--chessimals-text);font-size:1rem;font-weight:950;line-height:1.15}.chessimals-series span{color:var(--chessimals-muted);font-size:.84rem;font-weight:820;line-height:1.28}.chessimals-replay{order:5;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;border:1px solid rgba(var(--chessimals-primary-rgb),.2);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.1),transparent),var(--chessimals-panel)}.chessimals-replay>div:first-child{display:grid;gap:.15rem;min-width:0}.chessimals-replay strong{font-size:1rem;font-weight:950}.chessimals-replay span{color:var(--chessimals-muted);font-size:.86rem;font-weight:800;line-height:1.25}.chessimals-replay__actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}.chessimals-replay__actions .chessimals-secondary{min-height:2.5rem;padding:0 .8rem}.chessimals-tutorial{order:3;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;padding:1rem;border:1px solid rgba(var(--chessimals-primary-rgb),.24);border-radius:1.25rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel)}.chessimals-tutorial>div{display:grid;gap:.18rem;min-width:0}.chessimals-tutorial small{color:var(--chessimals-primary);font-size:.76rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-tutorial strong{font-size:1rem;font-weight:950}.chessimals-tutorial p{margin:0;color:var(--chessimals-muted);font-size:.88rem;font-weight:780;line-height:1.35}.chessimals-tutorial .chessimals-secondary{min-height:2.5rem;padding:0 .85rem}.chessimals-rematch-status{order:5;border:1px solid rgba(var(--chessimals-primary-rgb),.22);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.12),transparent),var(--chessimals-panel)}.chessimals-rematch-status.is-incoming{border-color:rgba(var(--ion-color-success-rgb, 45, 211, 111),.38);background:linear-gradient(135deg,rgba(var(--ion-color-success-rgb, 45, 211, 111),.14),transparent),var(--chessimals-panel)}.chessimals-rematch-status strong{font-size:1rem;font-weight:950}.chessimals-rematch-status p{margin:0;color:var(--chessimals-muted);font-size:.88rem;line-height:1.35}.chessimals-rematch-player{background:#ffffff7a}:host-context(html.ion-palette-dark) .chessimals-rematch-player,:host-context([data-theme=\"dark\"]) .chessimals-rematch-player{background:#ffffff0f}.chessimals-rematch-status__actions{display:flex;justify-content:flex-end}.chessimals-rematch-status__actions .chessimals-secondary{min-height:2.5rem;padding:0 .95rem}.chessimals-howto h2,.chessimals-powers h2{margin:0;font-size:1.15rem;font-weight:950}.chessimals-challenge-card{display:grid;gap:.85rem;border:1px solid rgba(var(--chessimals-sky-rgb),.34);border-radius:1.25rem;padding:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-sky-rgb),.18),transparent 54%),linear-gradient(180deg,#ffffff9e,#fff3),var(--chessimals-panel);box-shadow:0 1rem 2.2rem #4f3a231f}.chessimals-challenge-card__copy{display:grid;gap:.28rem}.chessimals-challenge-card__copy span,.chessimals-challenge-summary small{color:var(--chessimals-sky);font-size:.72rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-challenge-card h2{margin:0;font-size:clamp(1.25rem,3.5vw,1.9rem);font-weight:1000}.chessimals-challenge-card p,.chessimals-challenge-summary p{margin:0;color:var(--chessimals-muted);font-size:.95rem;font-weight:780;line-height:1.35}.chessimals-challenge-card__stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem}.chessimals-challenge-rival{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.7rem;align-items:center;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1rem;padding:.7rem;background:#ffffff8a}.chessimals-challenge-rival>span{display:grid;place-items:center;width:2.65rem;height:2.65rem;border-radius:999px;background:rgba(var(--chessimals-primary-rgb),.12);font-size:1.45rem}.chessimals-challenge-rival div{display:grid;gap:.14rem;min-width:0}.chessimals-challenge-rival small,.chessimals-challenge-history small,.chessimals-challenge-summary__stats small{color:var(--chessimals-muted);font-size:.66rem;font-weight:900;text-transform:uppercase}.chessimals-challenge-rival strong{color:var(--chessimals-text);font-size:1rem;font-weight:1000}.chessimals-challenge-rival p{font-size:.84rem}.chessimals-challenge-rival--next{background:rgba(var(--chessimals-primary-rgb),.08)}.chessimals-challenge-card__stats span{display:grid;gap:.16rem;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:.95rem;padding:.55rem;background:#ffffff85}.chessimals-challenge-card__stats small{color:var(--chessimals-muted);font-size:.66rem;font-weight:900;text-transform:uppercase}.chessimals-challenge-card__stats strong{color:var(--chessimals-text);font-size:1.1rem;font-weight:1000}.chessimals-challenge-path{display:flex;flex-wrap:wrap;gap:.4rem}.chessimals-challenge-path span{display:grid;place-items:center;width:2.15rem;height:2.15rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:999px;background:#ffffff9e;font-size:1.08rem}.chessimals-challenge-path span.is-cleared{border-color:rgba(var(--ion-color-success-rgb, 45, 211, 111),.34);background:rgba(var(--ion-color-success-rgb, 45, 211, 111),.16)}.chessimals-challenge-path span.is-current{border-color:rgba(var(--chessimals-sky-rgb),.48);background:rgba(var(--chessimals-sky-rgb),.18);box-shadow:0 0 0 2px rgba(var(--chessimals-sky-rgb),.12)}.chessimals-challenge-history{display:grid;gap:.35rem;border-top:1px solid rgba(var(--chessimals-primary-rgb),.12);padding-top:.2rem}.chessimals-challenge-history span{display:flex;flex-wrap:wrap;gap:.35rem;color:var(--chessimals-muted);font-size:.82rem;font-weight:820}.chessimals-challenge-history b{color:var(--chessimals-text);font-weight:1000}.chessimals-challenge-summary{display:grid;gap:.45rem;border:1px solid rgba(var(--chessimals-sky-rgb),.24);border-radius:1rem;padding:.8rem;background:linear-gradient(135deg,rgba(var(--chessimals-sky-rgb),.12),transparent),#ffffff6b}.chessimals-challenge-summary strong{font-size:1rem;font-weight:1000}.chessimals-challenge-summary__stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.45rem}.chessimals-challenge-record{display:flex;align-items:center;gap:.45rem;border:1px solid rgba(var(--chessimals-sky-rgb),.34);border-radius:999px;padding:.45rem .65rem;background:rgba(var(--chessimals-sky-rgb),.14);color:var(--chessimals-text)}.chessimals-challenge-record span{display:grid;place-items:center;width:1.45rem;height:1.45rem;border-radius:999px;background:var(--chessimals-sky);color:#fffaf0;font-size:.82rem}.chessimals-challenge-record strong{font-size:.9rem}.chessimals-challenge-summary__stats span{display:grid;gap:.1rem;border:1px solid rgba(var(--chessimals-primary-rgb),.12);border-radius:.8rem;padding:.45rem;background:#ffffff70}.chessimals-challenge-summary__stats b{color:var(--chessimals-text);font-size:1rem;font-weight:1000}.chessimals-tip p,.chessimals-powers p{color:var(--chessimals-muted)}.chessimals-learn-more{justify-self:start;min-height:2.75rem;border:0;border-radius:999px;padding:0 1rem;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);font:inherit;font-weight:950;box-shadow:0 .75rem 1.6rem rgba(var(--chessimals-primary-rgb),.28)}.chessimals-size,.chessimals-mode,.chessimals-status{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.chessimals-status{order:3;grid-template-columns:repeat(3,minmax(0,1fr))}.chessimals-size button,.chessimals-mode button,.chessimals-status div{display:grid;gap:.2rem;align-content:center;min-width:0;min-height:3.875rem;padding:.55rem .65rem;border:1px solid var(--chessimals-border);border-radius:1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-size button.is-selected{border-color:var(--chessimals-primary);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16)}.chessimals-mode button.is-selected{border-color:var(--chessimals-primary);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16)}.chessimals-difficulty{display:flex;flex-wrap:wrap;gap:.55rem}.chessimals-difficulty button{min-height:2.75rem;border:1px solid var(--chessimals-border);border-radius:999px;padding:0 1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;font-weight:950}.chessimals-difficulty button.is-selected{border-color:var(--chessimals-primary);background:var(--chessimals-primary);color:#fff}.chessimals-bots{display:grid;grid-template-columns:repeat(auto-fit,minmax(9.5rem,1fr));gap:.625rem}.chessimals-bots button{display:grid;grid-template-columns:auto 1fr;grid-template-areas:\"avatar title\" \"avatar body\" \"avatar tendency\";column-gap:.55rem;row-gap:.12rem;min-width:0;min-height:4.75rem;border:1px solid var(--chessimals-border);border-radius:1rem;padding:.65rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-bots button>span{grid-area:avatar;display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:50%;background:rgba(var(--chessimals-primary-rgb),.12);font-size:1.2rem}.chessimals-bots button strong{grid-area:title;align-self:end;font-size:.95rem;font-weight:950}.chessimals-bots button small{grid-area:body;color:var(--chessimals-muted);font-size:.75rem;font-weight:750;line-height:1.25}.chessimals-bots button p{grid-area:tendency;margin:.12rem 0 0;color:var(--chessimals-muted);font-size:.72rem;font-weight:820;line-height:1.24}.chessimals-bots button.is-selected{border-color:var(--chessimals-primary);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16),0 .75rem 1.5rem rgba(var(--chessimals-primary-rgb),.1)}.chessimals-size strong,.chessimals-mode strong,.chessimals-status strong,.chessimals-result strong,.chessimals-rematch-status strong,.chessimals-tip strong{font-weight:950}.chessimals-status strong{min-width:0;font-size:clamp(.95rem,2.5vw,1.2rem);line-height:1.08;overflow-wrap:anywhere;white-space:normal}.chessimals-size small,.chessimals-mode small,.chessimals-status small{color:var(--chessimals-muted);font-size:.78rem;line-height:1.12}.chessimals-board-wrap{--chessimals-board-radius: min(.85rem, 14px);display:flex;justify-content:center;min-width:0;max-width:100%;overflow-x:auto;width:100%;padding:.25rem 0}.chessimals-board-wrap.is-orienting .chessimals-board-frame{animation:chessimals-orient-board .32s ease}.chessimals-board-wrap.is-finished{overflow-x:visible}.chessimals-board-frame{flex:0 1 58rem;min-width:0;width:100%;max-width:58rem;border-radius:var(--chessimals-board-radius)}.chessimals-board{position:relative;display:grid;grid-template-columns:repeat(var(--board-size),minmax(0,1fr));grid-template-rows:repeat(var(--board-size),minmax(0,1fr));min-width:0;width:100%;aspect-ratio:1 / 1;overflow:hidden;isolation:isolate;contain:paint;border:1px solid var(--chessimals-border);border-radius:var(--chessimals-board-radius);clip-path:inset(0 round var(--chessimals-board-radius));-webkit-mask-image:-webkit-radial-gradient(white,black);background:radial-gradient(ellipse at 16% 18%,rgba(255,255,255,.34),transparent 18%),radial-gradient(ellipse at 82% 78%,rgba(var(--chessimals-primary-rgb),.1),transparent 22%),radial-gradient(ellipse at 32% 68%,rgba(var(--chessimals-stone-rgb),.05),transparent 30%),radial-gradient(ellipse at 66% 34%,rgba(255,255,255,.08),transparent 24%),var(--chessimals-border);box-shadow:inset 0 0 0 1px #ffffff1a,0 .85rem 2.1rem var(--chessimals-board-shadow)}.chessimals-board-wrap.is-syncing .chessimals-board{cursor:wait}.chessimals-cell-coordinate{position:absolute;z-index:5;color:color-mix(in srgb,var(--chessimals-muted) 78%,var(--chessimals-text));font-size:.68rem;font-weight:950;letter-spacing:.02em;line-height:1;pointer-events:none;text-transform:uppercase;-webkit-user-select:none;user-select:none}.chessimals-cell-coordinate--rank{top:.2rem;left:.24rem}.chessimals-cell-coordinate--file{right:.24rem;bottom:.18rem}@keyframes chessimals-orient-board{0%{opacity:.72;filter:blur(.06rem);transform:scale(.985)}52%{opacity:.92;filter:blur(0);transform:scale(1.012)}to{opacity:1;filter:blur(0);transform:scale(1)}}.chessimals-center-line{position:absolute;top:50%;left:0;right:0;z-index:2;display:flex;align-items:center;justify-content:center;border-top:.08rem dashed rgba(var(--chessimals-primary-rgb),.56);filter:drop-shadow(0 0 .24rem rgba(var(--chessimals-primary-rgb),.26));pointer-events:none}.chessimals-power-trail{position:absolute;inset:0;z-index:5;pointer-events:none;--trail-color: rgba(var(--chessimals-magic-rgb), .88);--trail-glow: rgba(var(--chessimals-magic-rgb), .48)}.chessimals-power-trail.is-capture{--trail-color: rgba(var(--chessimals-capture-rgb), .86);--trail-glow: rgba(var(--chessimals-capture-rgb), .46)}.chessimals-power-trail.effect-eagle{--trail-color: rgba(255, 255, 255, .92);--trail-glow: rgba(120, 210, 255, .54)}.chessimals-power-trail.effect-bull{--trail-color: rgba(188, 131, 76, .86);--trail-glow: rgba(188, 131, 76, .36)}.chessimals-power-trail.effect-kangaroo{--trail-color: rgba(174, 124, 255, .86);--trail-glow: rgba(174, 124, 255, .42)}.chessimals-power-trail.effect-lion{--trail-color: rgba(255, 221, 120, .88);--trail-glow: rgba(255, 190, 56, .42)}.chessimals-power-trail>span{position:absolute;top:var(--trail-y);left:var(--trail-x);width:var(--trail-length);height:.45rem;border-radius:999px;background:linear-gradient(90deg,transparent,var(--trail-color) 42%,rgba(255,255,255,.92));box-shadow:0 0 .75rem var(--trail-glow),0 0 1.45rem var(--trail-glow);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0);transform-origin:0 50%;animation:chessimals-power-trail .72s ease-out both}.chessimals-power-trail.effect-eagle>span{height:.28rem;background:linear-gradient(90deg,transparent,rgba(255,255,255,.95) 44%,rgba(120,210,255,.58)),repeating-linear-gradient(90deg,transparent 0 .7rem,rgba(255,255,255,.66) .7rem .92rem);animation-name:chessimals-eagle-trail}.chessimals-power-trail.effect-bull>span{height:.72rem;background:repeating-linear-gradient(90deg,rgba(255,255,255,.42) 0 .18rem,transparent .18rem .42rem),linear-gradient(90deg,transparent,var(--trail-color),rgba(255,255,255,.86));animation-name:chessimals-bull-trail}.chessimals-power-trail.effect-kangaroo>span{height:1rem;border-top:.16rem dashed var(--trail-color);background:transparent;box-shadow:none;filter:drop-shadow(0 0 .8rem var(--trail-glow));animation-name:chessimals-kangaroo-trail}.chessimals-power-trail.effect-lion>span{height:.62rem;background:linear-gradient(90deg,transparent,var(--trail-color),rgba(255,255,255,.82)),repeating-linear-gradient(115deg,rgba(255,255,255,.55) 0 .12rem,transparent .12rem .34rem);animation-name:chessimals-lion-trail}@keyframes chessimals-power-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0)}28%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.72)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}@keyframes chessimals-eagle-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0) skew(-10deg)}30%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.82) skew(-10deg)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1.05) skew(-10deg)}}@keyframes chessimals-bull-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0) scaleY(1)}38%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.7) scaleY(1.18)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1) scaleY(.82)}}@keyframes chessimals-kangaroo-trail{0%{opacity:0;transform:translateY(-.4rem) rotate(var(--trail-angle)) scaleX(0)}34%{opacity:1;transform:translateY(-1.2rem) rotate(var(--trail-angle)) scaleX(.62)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}@keyframes chessimals-lion-trail{0%{opacity:0;filter:saturate(1);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0)}36%{opacity:1;filter:saturate(1.4);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.76)}to{opacity:0;filter:saturate(1.1);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}.chessimals-board-overlay{position:absolute;inset:0;z-index:8;display:grid;place-content:center;gap:.5rem;padding:1.25rem;background:radial-gradient(circle at 50% 34%,rgba(255,226,129,.34),transparent 24%),radial-gradient(circle at 50% 52%,rgba(var(--chessimals-primary-rgb),.34),transparent 42%),linear-gradient(135deg,#140c16e0,#08120dc7);color:#fff;text-align:center;backdrop-filter:blur(2px);overflow:hidden}.chessimals-board-overlay.is-defeat{background:radial-gradient(circle at 50% 34%,rgba(143,168,206,.26),transparent 24%),radial-gradient(circle at 50% 52%,rgba(72,86,115,.42),transparent 42%),linear-gradient(135deg,#090c14e6,#1c1e2bcc)}.chessimals-board-overlay:before{position:absolute;inset:0;background:radial-gradient(circle at 20% 30%,rgba(255,255,255,.58) 0 .08rem,transparent .1rem),radial-gradient(circle at 75% 25%,rgba(255,226,129,.7) 0 .1rem,transparent .12rem),radial-gradient(circle at 68% 72%,rgba(var(--chessimals-capture-rgb),.54) 0 .08rem,transparent .1rem),radial-gradient(circle at 35% 78%,rgba(255,255,255,.48) 0 .07rem,transparent .09rem),radial-gradient(circle at 84% 66%,rgba(255,255,255,.38) 0 .06rem,transparent .08rem),radial-gradient(circle at 14% 64%,rgba(255,226,129,.48) 0 .07rem,transparent .09rem);content:\"\";opacity:.72;animation:chessimals-victory-sparks 1.5s ease-in-out infinite}.chessimals-board-overlay__rays{position:absolute;inset:-18%;background:conic-gradient(from 8deg,transparent 0 7deg,rgba(255,226,129,.16) 7deg 11deg,transparent 11deg 22deg);opacity:.85;animation:chessimals-finale-rays 8s linear infinite}.chessimals-board-overlay.is-defeat .chessimals-board-overlay__rays{background:conic-gradient(from 8deg,transparent 0 8deg,rgba(180,204,240,.1) 8deg 12deg,transparent 12deg 24deg);animation-duration:12s}.chessimals-board-overlay__ribbon{position:absolute;top:-20%;width:.42rem;height:54%;border-radius:999px;background:linear-gradient(to bottom,transparent,rgba(255,226,129,.72),transparent);opacity:.7;transform:rotate(var(--ribbon-angle, 12deg));animation:chessimals-finale-ribbon 2.5s ease-in-out infinite}.chessimals-board-overlay.is-defeat .chessimals-board-overlay__ribbon{background:linear-gradient(to bottom,transparent,rgba(180,204,240,.42),transparent);opacity:.48}.chessimals-board-overlay__ribbon.ribbon-a{left:18%;--ribbon-angle: -18deg}.chessimals-board-overlay__ribbon.ribbon-b{left:50%;--ribbon-angle: 8deg;animation-delay:.32s}.chessimals-board-overlay__ribbon.ribbon-c{right:18%;--ribbon-angle: 20deg;animation-delay:.64s}.chessimals-board-overlay>*{position:relative;z-index:1}.chessimals-board-overlay span{justify-self:center;border-radius:999px;padding:.32rem .7rem;background:#ffffff26;color:#ffffffe6;font-size:.76rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-board-overlay strong{font-size:clamp(1.65rem,8vw,3rem);line-height:1;font-weight:950;text-shadow:0 0 1.25rem rgba(255,255,255,.26)}.chessimals-board-overlay em{justify-self:center;display:grid;place-items:center;width:clamp(3rem,14vw,4.6rem);height:clamp(3rem,14vw,4.6rem);border:.16rem solid rgba(255,255,255,.62);border-radius:50%;background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.72),transparent 18%),linear-gradient(135deg,#ffe281,#b98436);color:#2d2412;font-size:clamp(1.1rem,5vw,1.65rem);font-style:normal;font-weight:950;box-shadow:0 0 0 .45rem #ffe2811f,0 1rem 2rem #00000042;animation:chessimals-finale-medal 1.8s ease-in-out infinite}.chessimals-board-overlay.is-defeat em{background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.48),transparent 18%),linear-gradient(135deg,#d9e2ef,#69758e);color:#182032;box-shadow:0 0 0 .45rem #b4ccf01a,0 1rem 2rem #00000052}.chessimals-board-overlay em.has-avatar{overflow:hidden;background:#fff;padding:0}.chessimals-board-overlay em.has-avatar img{display:block;width:100%;height:100%;object-fit:cover}.chessimals-board-overlay b{justify-self:center;color:#fffc;font-size:.8rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-board-overlay small{color:#ffffffd1;font-size:clamp(.9rem,3vw,1.1rem);font-weight:800}.chessimals-board-overlay__stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem;width:min(26rem,92%);margin:.2rem auto 0}.chessimals-board-overlay__stats div{display:grid;gap:.08rem;min-width:0;border:1px solid rgba(255,255,255,.18);border-radius:.75rem;padding:.42rem .46rem;background:#ffffff1a;backdrop-filter:blur(3px)}.chessimals-board-overlay__stats dt,.chessimals-board-overlay__stats dd{overflow:hidden;margin:0;text-overflow:ellipsis;white-space:nowrap}.chessimals-board-overlay__stats dt{color:#ffffffad;font-size:clamp(.52rem,2.1vw,.66rem);font-weight:950;letter-spacing:.04em;text-transform:uppercase}.chessimals-board-overlay__stats dd{color:#fff;font-size:clamp(.68rem,2.8vw,.88rem);font-weight:950}@keyframes chessimals-victory-sparks{0%,to{opacity:.46;transform:translateY(0) scale(.98)}50%{opacity:.95;transform:translateY(-.35rem) scale(1.02)}}@keyframes chessimals-finale-rays{to{transform:rotate(360deg)}}@keyframes chessimals-finale-ribbon{0%,to{opacity:.18;transform:translateY(-.5rem) rotate(var(--ribbon-angle))}50%{opacity:.75;transform:translateY(1.4rem) rotate(var(--ribbon-angle))}}@keyframes chessimals-finale-medal{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-.18rem) scale(1.04)}}.chessimals-cell{position:relative;isolation:isolate;--chessimals-cell-bg: var(--chessimals-cell-light);display:grid;place-items:center;min-width:0;min-height:0;aspect-ratio:1;border:0;background:radial-gradient(ellipse at 26% 24%,rgba(255,255,255,.12),transparent 24%),radial-gradient(ellipse at 78% 76%,rgba(61,54,36,.06),transparent 28%),linear-gradient(135deg,rgba(255,255,255,.04),transparent 52%,rgba(52,44,28,.04)),var(--chessimals-cell-bg);color:var(--chessimals-text);font:inherit;overflow:hidden;transition:background .16s ease,box-shadow .16s ease,transform .16s ease}.chessimals-cell:before,.chessimals-cell:after{pointer-events:none}.chessimals-cell-texture{position:absolute;inset:0;z-index:0;display:block;pointer-events:none;opacity:.42;mix-blend-mode:multiply;background:radial-gradient(ellipse at var(--wear-x, 28%) var(--wear-y, 32%),rgba(255,255,255,.16),transparent 17%),radial-gradient(ellipse at var(--wear-x2, 74%) var(--wear-y2, 68%),rgba(75,66,42,.09),transparent 25%),repeating-linear-gradient(var(--wear-angle, 26deg),rgba(75,66,42,.045) 0 1px,transparent 1px .52rem),linear-gradient(135deg,rgba(255,255,255,.06),transparent 42%,rgba(52,44,28,.045))}.chessimals-cell-texture:after{position:absolute;inset:.08rem;border:1px solid rgba(75,66,42,.05);border-radius:.18rem;box-shadow:inset .08rem .08rem #ffffff14,inset -.08rem -.08rem #342c1c0b;content:\"\"}.chessimals-cell.is-edge-cell .chessimals-cell-texture{opacity:.56;background:radial-gradient(ellipse at var(--wear-x, 28%) var(--wear-y, 32%),rgba(255,255,255,.14),transparent 18%),radial-gradient(ellipse at var(--wear-x2, 74%) var(--wear-y2, 68%),rgba(75,66,42,.14),transparent 28%),linear-gradient(135deg,rgba(70,52,28,.055),transparent 44%,rgba(52,44,28,.09)),repeating-linear-gradient(var(--wear-angle, 26deg),rgba(75,66,42,.055) 0 1px,transparent 1px .48rem)}.chessimals-cell.wear-0{--wear-x: 22%;--wear-y: 24%;--wear-x2: 78%;--wear-y2: 72%;--wear-angle: 18deg}.chessimals-cell.wear-1{--wear-x: 64%;--wear-y: 18%;--wear-x2: 30%;--wear-y2: 76%;--wear-angle: -24deg}.chessimals-cell.wear-2{--wear-x: 42%;--wear-y: 58%;--wear-x2: 82%;--wear-y2: 26%;--wear-angle: 42deg}.chessimals-cell.wear-3{--wear-x: 74%;--wear-y: 68%;--wear-x2: 24%;--wear-y2: 28%;--wear-angle: -12deg}.chessimals-cell.wear-4{--wear-x: 34%;--wear-y: 18%;--wear-x2: 62%;--wear-y2: 84%;--wear-angle: 64deg}.chessimals-cell.wear-5{--wear-x: 18%;--wear-y: 70%;--wear-x2: 70%;--wear-y2: 34%;--wear-angle: -48deg}:host-context(html.ion-palette-dark) .chessimals-cell-texture,:host-context([data-theme=\"dark\"]) .chessimals-cell-texture{opacity:.34;mix-blend-mode:soft-light}.chessimals-cell.is-dark-cell{--chessimals-cell-bg: var(--chessimals-cell-dark)}.chessimals-cell.is-selected{z-index:1;background:radial-gradient(circle,rgba(var(--chessimals-selected-rgb),.28) 0 36%,transparent 62%),linear-gradient(135deg,rgba(var(--chessimals-selected-rgb),.22),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .18rem var(--chessimals-selected),inset 0 0 .55rem #ffffffb8,inset 0 0 1.8rem rgba(var(--chessimals-selected-rgb),.42),0 0 .55rem rgba(var(--chessimals-selected-rgb),.56),0 0 1.55rem rgba(var(--chessimals-selected-rgb),.36)}.chessimals-board.is-power-aiming .chessimals-cell.is-selected{background:radial-gradient(circle at 50% 52%,rgba(var(--chessimals-magic-rgb),.38) 0 34%,transparent 64%),radial-gradient(circle at 32% 24%,rgba(255,255,255,.34),transparent 28%),linear-gradient(135deg,rgba(var(--chessimals-magic-rgb),.2),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .18rem var(--chessimals-magic-hot),inset 0 0 .8rem #ffffffa8,inset 0 0 1.9rem rgba(var(--chessimals-magic-rgb),.5),0 0 .7rem rgba(var(--chessimals-magic-rgb),.62),0 0 1.75rem rgba(var(--chessimals-magic-rgb),.42)}.chessimals-board.is-power-aiming .chessimals-cell.is-legal:not(.is-capture):after{border-color:rgba(var(--chessimals-magic-rgb),.94);box-shadow:0 0 .72rem rgba(var(--chessimals-magic-rgb),.48),inset 0 0 .6rem #fff3}.chessimals-board.is-power-aiming .chessimals-target{background:var(--chessimals-magic-hot);box-shadow:0 0 0 .2rem rgba(var(--chessimals-magic-rgb),.2),0 0 .95rem rgba(var(--chessimals-magic-rgb),.62)}.chessimals-cell.is-legal:not(.is-capture):after{position:absolute;inset:13%;z-index:2;border:max(2px,1.8%) solid var(--chessimals-move);border-radius:.55rem;content:\"\";opacity:.74;pointer-events:none}.chessimals-cell.is-last:not(.is-selected):not(.is-legal):not(.is-capture){background:radial-gradient(circle,rgba(var(--chessimals-last-rgb),.16) 0 42%,transparent 68%),var(--chessimals-cell-bg)}.chessimals-cell.is-capture{z-index:2;background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.24),transparent 34%),linear-gradient(135deg,rgba(var(--chessimals-capture-rgb),.14),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .14rem rgba(var(--chessimals-capture-rgb),.84),inset 0 0 1.4rem rgba(var(--chessimals-capture-rgb),.24),0 0 .95rem rgba(var(--chessimals-capture-rgb),.34);animation:chessimals-capture-aura 1.35s ease-in-out infinite}.chessimals-cell.is-capture:before{position:absolute;inset:4%;z-index:1;display:block;border-radius:.64rem;background:linear-gradient(90deg,transparent,rgba(255,255,255,.52),transparent),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.24),transparent 58%);content:\"\";opacity:0;transform:translate(-42%) scale(.9);animation:chessimals-capture-sweep 1.35s ease-in-out infinite}.chessimals-cell.is-capture:after{position:absolute;inset:8%;z-index:3;border:max(2px,1.55%) solid rgba(var(--chessimals-capture-rgb),.9);border-radius:.62rem;box-shadow:0 0 .75rem rgba(var(--chessimals-capture-rgb),.5),inset 0 0 .72rem #ffffff38;content:\"\";pointer-events:none;animation:chessimals-capture-frame 1.35s ease-in-out infinite}.chessimals-cell.has-capture-ready:not(.is-selected):after{position:absolute;inset:16%;z-index:3;border:max(2px,1.45%) solid rgba(var(--chessimals-selected-rgb),.72);border-radius:999px;box-shadow:0 0 .65rem rgba(var(--chessimals-selected-rgb),.34),inset 0 0 .55rem #ffffff2e;content:\"\"}.chessimals-cell.is-winning.is-legal:not(.is-capture):after{border-color:rgba(var(--chessimals-warning-rgb),.92);border-radius:999px;box-shadow:0 0 .75rem rgba(var(--chessimals-warning-rgb),.48),inset 0 0 .58rem #ffffff38}.chessimals-cell.is-winning .chessimals-target{background:var(--chessimals-warning);box-shadow:0 0 0 .22rem rgba(var(--chessimals-warning-rgb),.2),0 0 .95rem rgba(var(--chessimals-warning-rgb),.56)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture){background:radial-gradient(circle at 50% 52%,rgba(var(--chessimals-warning-rgb),.16),transparent 52%),var(--chessimals-cell-bg)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture) .chessimals-piece{filter:drop-shadow(0 0 .38rem rgba(var(--chessimals-warning-rgb),.52)) var(--chessimals-piece-white-shadow)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture) .chessimals-piece.is-black{filter:drop-shadow(0 0 .38rem rgba(var(--chessimals-warning-rgb),.52)) var(--chessimals-piece-black-shadow)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture):before{position:absolute;top:.26rem;right:.26rem;z-index:4;width:.48rem;height:.48rem;border-radius:999px;background:rgba(var(--chessimals-warning-rgb),.96);box-shadow:0 0 0 .18rem rgba(var(--chessimals-warning-rgb),.22);content:\"\"}@keyframes chessimals-capture-aura{0%,to{filter:saturate(1);box-shadow:inset 0 0 0 .12rem rgba(var(--chessimals-capture-rgb),.78),inset 0 0 1rem rgba(var(--chessimals-capture-rgb),.2),0 0 .64rem rgba(var(--chessimals-capture-rgb),.32)}50%{filter:saturate(1.22);box-shadow:inset 0 0 0 .16rem rgba(var(--chessimals-capture-rgb),.96),inset 0 0 1.34rem rgba(var(--chessimals-capture-rgb),.34),0 0 1.2rem rgba(var(--chessimals-capture-rgb),.48)}}@keyframes chessimals-capture-sweep{0%{opacity:0;transform:translate(-52%) scale(.88)}42%{opacity:.66;transform:translate(0) scale(1)}to{opacity:0;transform:translate(48%) scale(.92)}}@keyframes chessimals-capture-frame{0%,to{opacity:.68;transform:scale(.96)}50%{opacity:1;transform:scale(1)}}.chessimals-cell.has-source-effect:not(.is-moving-source){background:radial-gradient(circle,rgba(var(--chessimals-selected-rgb),.12) 0 34%,transparent 64%),var(--chessimals-cell-bg)}.chessimals-cell.has-move-effect{z-index:2;background:radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.22) 0 34%,transparent 68%),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .16rem rgba(var(--chessimals-capture-rgb),.86),inset 0 0 1.2rem rgba(var(--chessimals-capture-rgb),.26),0 0 1.1rem rgba(var(--chessimals-capture-rgb),.42)}.chessimals-cell.has-move-effect:before{position:absolute;inset:.12rem;z-index:1;display:block;border-radius:.7rem;background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.48),transparent 22%),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.42),transparent 58%);content:\"\";opacity:0;transform:scale(.72);animation:chessimals-power-impact .7s ease-out both}.chessimals-cell.has-move-effect:after{position:absolute;inset:.28rem;z-index:4;display:block;border:.14rem solid rgba(255,255,255,.72);border-radius:.58rem;box-shadow:0 0 .5rem #ffffff5c,0 0 1rem rgba(var(--chessimals-capture-rgb),.32);content:\"\";animation:chessimals-power-frame .86s ease-out both}.chessimals-cell.has-capture-effect{animation:chessimals-capture-hit .78s ease-out both}.chessimals-cell.effect-eagle:before{background:linear-gradient(135deg,transparent 10%,rgba(255,255,255,.78) 48%,transparent 52%),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.36),transparent 62%)}.chessimals-cell.effect-bull:before{background:repeating-linear-gradient(90deg,rgba(255,255,255,.34) 0 .16rem,transparent .16rem .34rem),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.38),transparent 62%)}.chessimals-cell.effect-kangaroo:before{border-radius:999px;background:radial-gradient(circle at 42% 44%,rgba(255,255,255,.58),transparent 18%),radial-gradient(circle at 58% 56%,rgba(var(--chessimals-capture-rgb),.4),transparent 64%)}.chessimals-cell.effect-lion:before{background:conic-gradient(from 0deg,transparent,rgba(255,255,255,.56),transparent,rgba(var(--chessimals-capture-rgb),.4),transparent),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.34),transparent 62%)}@keyframes chessimals-power-impact{0%{opacity:0;transform:scale(.54) rotate(0)}28%{opacity:1;transform:scale(.96) rotate(2deg)}to{opacity:0;transform:scale(1.3) rotate(8deg)}}@keyframes chessimals-power-frame{0%{opacity:0;transform:scale(.84)}34%{opacity:1;transform:scale(1.02)}to{opacity:0;transform:scale(1.16)}}@keyframes chessimals-capture-hit{0%,to{filter:saturate(1)}35%{filter:saturate(1.35) brightness(1.08)}}.chessimals-cell.is-moving-source .chessimals-piece{opacity:0}.chessimals-piece{position:relative;z-index:2;display:block;width:68%;height:74%;color:var(--chessimals-primary);--chessimals-piece-fill: var(--chessimals-piece-white-fill);--chessimals-piece-side: var(--chessimals-piece-white-side);--chessimals-piece-line: var(--chessimals-piece-white-line);--chessimals-piece-outline: rgba(82, 65, 46, .34);filter:var(--chessimals-piece-white-shadow)}.chessimals-piece.is-black{color:#fff;--chessimals-piece-fill: var(--chessimals-piece-black-fill);--chessimals-piece-side: var(--chessimals-piece-black-side);--chessimals-piece-line: var(--chessimals-piece-black-line);--chessimals-piece-outline: rgba(255, 255, 255, .22);filter:var(--chessimals-piece-black-shadow)}.chessimals-moving-piece{position:absolute;top:0;left:0;z-index:6;width:calc(100% / var(--board-size));height:calc(100% / var(--board-size));display:grid;place-items:center;pointer-events:none;transform:translate(calc(var(--from-col) * 100%),calc(var(--from-row) * 100%));animation:chessimals-piece-travel .36s cubic-bezier(.2,.82,.24,1) both}@keyframes chessimals-piece-travel{0%{transform:translate(calc(var(--from-col) * 100%),calc(var(--from-row) * 100%)) scale(1)}68%{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%)) scale(1.07)}to{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%)) scale(1)}}.chessimals-piece__side,.chessimals-piece__head,.chessimals-piece__collar,.chessimals-piece__neck,.chessimals-piece__base{position:absolute;display:block;left:50%;background:var(--chessimals-piece-fill);border:max(1px,1.25%) solid var(--chessimals-piece-outline);transform:translate(-50%)}.chessimals-piece__side{top:46%;z-index:0;width:58%;height:41%;border-radius:34% 34% 12% 12%;background:linear-gradient(96deg,var(--chessimals-piece-side) 0 34%,transparent 35%),var(--chessimals-piece-fill);clip-path:polygon(22% 0,78% 0,96% 100%,4% 100%);opacity:.92}.chessimals-piece__head{top:1%;z-index:4;width:48%;height:40%;border-radius:999px;background:radial-gradient(circle at 30% 22%,rgba(255,255,255,.72) 0 13%,transparent 14%),linear-gradient(135deg,rgba(255,255,255,.28) 0 34%,transparent 35%),var(--chessimals-piece-fill);box-shadow:inset -.18rem -.12rem #52412e0f,inset 0 -1px 0 var(--chessimals-piece-line)}.chessimals-piece.is-black .chessimals-piece__head{box-shadow:inset .18rem -.12rem #ffffff0f,inset 0 -1px 0 var(--chessimals-piece-line)}.chessimals-piece__collar{top:37%;z-index:5;width:72%;height:15%;border-radius:999px;background:linear-gradient(180deg,#f5cd77 0%,var(--chessimals-piece-gold) 55%,var(--chessimals-piece-gold-dark) 100%);border-color:color-mix(in srgb,var(--chessimals-piece-gold-dark) 72%,transparent);box-shadow:inset 0 .12rem #ffffff47,inset 0 -.08rem #462e1238,0 .08rem .18rem #462e1224}.chessimals-piece__neck{top:50%;z-index:2;width:52%;height:31%;clip-path:polygon(16% 0,84% 0,100% 100%,0 100%);background:linear-gradient(100deg,var(--chessimals-piece-side) 0 28%,transparent 29%),linear-gradient(180deg,var(--chessimals-piece-fill),color-mix(in srgb,var(--chessimals-piece-fill) 78%,var(--chessimals-piece-side)));box-shadow:inset -.12rem .1rem #ffffff14}.chessimals-piece__base{bottom:0;z-index:6;width:86%;height:17%;border-radius:.42rem .42rem .22rem .22rem;background:linear-gradient(100deg,var(--chessimals-piece-side) 0 18%,transparent 19%),linear-gradient(180deg,color-mix(in srgb,var(--chessimals-piece-fill) 92%,#ffffff),var(--chessimals-piece-fill));box-shadow:inset 0 .12rem #ffffff24,inset 0 -.1rem 0 var(--chessimals-piece-line)}.chessimals-target{width:16%;height:16%;border-radius:999px;background:var(--chessimals-move);opacity:.9;box-shadow:0 0 .9rem rgba(var(--chessimals-move-rgb),.42)}.chessimals-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.625rem}.chessimals-cards button{position:relative;isolation:isolate;display:grid;gap:.375rem;place-items:center;min-height:5.75rem;padding:.625rem;border:1px solid var(--chessimals-border);border-radius:1.125rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.chessimals-powers__heading{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.chessimals-powers p{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.chessimals-powers__heading span{flex:0 0 auto;border-radius:999px;padding:.28rem .62rem;background:rgba(var(--chessimals-primary-rgb),.12);color:var(--chessimals-primary);font-size:.78rem;font-weight:950}.chessimals-cards button.is-selected{border-color:var(--chessimals-magic-hot);background:radial-gradient(circle at 50% 16%,rgba(255,255,255,.42),transparent 30%),radial-gradient(circle at 50% 76%,rgba(var(--chessimals-magic-rgb),.2),transparent 56%),linear-gradient(135deg,rgba(var(--chessimals-magic-rgb),.2),#ffffff0a),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-magic-rgb),.28),0 0 1.35rem rgba(var(--chessimals-magic-rgb),.48),0 .9rem 2rem rgba(var(--chessimals-magic-rgb),.18);transform:translateY(-1px)}.chessimals-cards button.is-selected:before,.chessimals-cards button.is-selected:after{position:absolute;inset:-.5rem;z-index:0;border-radius:inherit;content:\"\";pointer-events:none}.chessimals-cards button>*{position:relative;z-index:1}.chessimals-cards button.is-selected:before{background:radial-gradient(circle at 18% 24%,rgba(var(--chessimals-magic-rgb),.88) 0 .08rem,transparent .1rem),radial-gradient(circle at 78% 20%,rgba(255,255,255,.86) 0 .07rem,transparent .09rem),radial-gradient(circle at 86% 62%,rgba(var(--chessimals-magic-rgb),.72) 0 .06rem,transparent .08rem),radial-gradient(circle at 28% 78%,rgba(255,245,111,.78) 0 .07rem,transparent .09rem),radial-gradient(circle at 54% 8%,rgba(255,255,255,.68) 0 .05rem,transparent .07rem);opacity:.8;animation:chessimalsMagicParticles 1.8s ease-in-out infinite}.chessimals-cards button.is-selected:after{background:conic-gradient(from 12deg,transparent 0 16deg,rgba(var(--chessimals-magic-rgb),.2) 16deg 22deg,transparent 22deg 44deg);opacity:.68;filter:blur(.04rem);animation:chessimalsMagicAura 3.2s linear infinite}.chessimals-cards button.is-used{opacity:.42}.chessimals-animal-face{display:grid;place-items:center;width:3.25rem;height:3.25rem;padding:.34rem;overflow:hidden;border-radius:1.2rem;background:radial-gradient(circle at 35% 22%,rgba(255,255,255,.82),transparent 55%),var(--chessimals-animal-face-bg);color:color-mix(in srgb,var(--chessimals-text) 92%,#000);box-shadow:inset 0 0 0 1px var(--chessimals-animal-face-border),0 .45rem 1.15rem #2e3a2c1a}.chessimals-animal-face img{display:block;width:100%;height:100%;object-fit:contain;border-radius:.72rem;background:var(--chessimals-animal-face-inner-bg);box-shadow:inset 0 0 0 1px #2e3a2c14;transform:none;filter:var(--chessimals-animal-face-filter)}.chessimals-cards button.is-selected .chessimals-animal-face,.chessimals-powers.is-ready .chessimals-cards button:not(.is-used) .chessimals-animal-face{background:radial-gradient(circle at 35% 22%,rgba(255,255,255,.9),transparent 52%),radial-gradient(circle at 62% 78%,rgba(var(--chessimals-magic-rgb),.22),transparent 48%),var(--chessimals-animal-face-bg);color:color-mix(in srgb,var(--chessimals-text) 94%,#000);box-shadow:inset 0 0 0 1px rgba(var(--chessimals-magic-rgb),.34),0 0 .85rem rgba(var(--chessimals-magic-rgb),.34),0 .75rem 1.6rem rgba(var(--chessimals-magic-rgb),.16)}.chessimals-powers.is-locked .chessimals-animal-face{filter:var(--chessimals-animal-face-locked-filter);opacity:.86}.chessimals-powers.is-locked .chessimals-animal-face img,.chessimals-cards button.is-used .chessimals-animal-face img{opacity:var(--chessimals-animal-face-locked-img-opacity)}.chessimals-cards strong{overflow:hidden;max-width:100%;font-size:.82rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-powers.is-locked .chessimals-cards{opacity:.68}.chessimals-powers.is-ready{border-color:rgba(var(--chessimals-magic-rgb),.46);box-shadow:0 0 0 1px rgba(var(--chessimals-magic-rgb),.12),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}.chessimals-powers.is-ready .chessimals-cards button:not(.is-used){animation:chessimalsPowerPulse 1.8s ease-in-out infinite}.chessimals-powers.is-unlock-pulse{animation:chessimalsPowersUnlocked 1.18s ease-out both}.chessimals-powers.is-unlock-pulse .chessimals-cards button:not(.is-used){animation:chessimalsPowerIgnite .76s ease-out both,chessimalsPowerPulse 1.8s ease-in-out .76s infinite}@keyframes chessimalsPowerPulse{0%,to{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}50%{box-shadow:0 0 1.4rem rgba(var(--chessimals-magic-rgb),.24)}}@keyframes chessimalsPowersUnlocked{0%{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}34%{box-shadow:0 0 0 .18rem rgba(var(--chessimals-magic-rgb),.28),0 0 2.2rem rgba(var(--chessimals-magic-rgb),.38),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.16)}to{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}}@keyframes chessimalsPowerIgnite{0%{transform:translateY(0) scale(.96);box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}42%{transform:translateY(-.08rem) scale(1.025);box-shadow:0 0 0 .14rem rgba(var(--chessimals-magic-rgb),.24),0 0 1.5rem rgba(var(--chessimals-magic-rgb),.46)}to{transform:translateY(0) scale(1);box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}}@keyframes chessimalsMagicParticles{0%,to{opacity:.54;transform:translateY(0) scale(.94)}50%{opacity:1;transform:translateY(-.18rem) scale(1.02)}}@keyframes chessimalsMagicAura{to{transform:rotate(1turn)}}.chessimals-actions{order:6;align-self:stretch;justify-self:stretch;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));gap:.625rem;margin-top:1rem}.chessimals-shell--projection .chessimals-game{max-width:min(96vw,90rem)}.chessimals-shell--projection .chessimals-turn-card{padding:.875rem 1rem}.chessimals-shell--projection .chessimals-status,.chessimals-shell--projection .chessimals-actions,.chessimals-shell--projection .chessimals-online,.chessimals-shell--projection .chessimals-replay,.chessimals-shell--projection .chessimals-rematch-status{display:none}.chessimals-shell--projection .chessimals-arena{grid-template-columns:minmax(0,1fr);justify-items:center}.chessimals-shell--projection .chessimals-board-wrap{--chessimals-board-radius: min(.625rem, 10px);width:min(96vw,82vh,58rem);max-width:none}.chessimals-shell--projection .chessimals-board-frame{flex-basis:auto;max-width:none}@media (min-width: 760px){.chessimals-game{gap:1rem}.chessimals-turn-card,.chessimals-status,.chessimals-arena,.chessimals-replay,.chessimals-result,.chessimals-actions{grid-column:1 / -1}.chessimals-arena{grid-template-columns:minmax(0,1fr);justify-items:center;align-items:start;gap:1rem}.chessimals-powers{width:min(100%,44rem);align-content:center;grid-template-columns:minmax(11rem,.68fr) minmax(0,1fr);align-items:center;gap:1rem;padding:1rem}.chessimals-cards{grid-template-columns:repeat(4,minmax(0,1fr))}.chessimals-cards button{min-height:5rem}.chessimals-powers p{-webkit-line-clamp:3}}.chessimals-rules{display:grid;gap:1rem;padding-top:.25rem}.chessimals-settings{display:grid;gap:.85rem}.chessimals-settings article{display:grid;gap:.65rem;padding:.9rem;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--ion-card-background, #fff)}.chessimals-about{display:grid;justify-items:center;gap:1rem;color:var(--ion-text-color, var(--chessimals-text))}.chessimals-about__logo{display:block;width:min(30rem,100%);aspect-ratio:1280 / 698;object-fit:cover;object-position:center;border-radius:1.25rem;background:#fff;box-shadow:0 1rem 2rem #2e3a2c24}.chessimals-about p{margin:0;color:var(--ion-color-medium, var(--chessimals-muted));font-size:.95rem;font-weight:750;line-height:1.45;text-align:center}.chessimals-about dl{display:grid;width:100%;margin:0;gap:.65rem}.chessimals-about dl div{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem .95rem;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--ion-card-background, #fff)}.chessimals-about dt,.chessimals-about dd{margin:0}.chessimals-about dt{color:var(--ion-color-medium, var(--chessimals-muted));font-size:.78rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-about dd{color:var(--ion-text-color, var(--chessimals-text));font-size:.95rem;font-weight:950}.chessimals-rules__hero{display:block;width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:1.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);box-shadow:0 1rem 2.25rem #2e3a2c1f}.chessimals-rules article{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:1rem;padding:1rem;border:1px solid var(--ion-border-color, #e7e4ea);border-radius:1.25rem;background:var(--ion-card-background, #fff);color:var(--ion-text-color, #2f2a3a)}.chessimals-rules article>span{display:grid;place-items:center;width:2rem;height:2rem;border-radius:999px;background:rgba(var(--chessimals-primary-rgb),.12);color:var(--chessimals-primary);font-weight:950}.chessimals-rules article>div{display:grid;min-width:0;gap:.45rem}.chessimals-rules h3,.chessimals-rules p,.chessimals-rules ul{margin:0}.chessimals-rules h3{font-size:1rem;font-weight:950;line-height:1.2}.chessimals-rules p,.chessimals-rules li{color:var(--ion-color-medium, #6f6a7a);line-height:1.5}.chessimals-rules ul{display:grid;gap:.45rem;padding-left:1.15rem}.chessimals-primary,.chessimals-secondary{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:3.625rem;border-radius:999px;font:inherit;font-weight:950}.chessimals-primary{border:0;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);box-shadow:0 1.125rem 2.8rem rgba(var(--chessimals-primary-rgb),.28)}.chessimals-secondary{border:1px solid var(--chessimals-border);background:transparent;color:var(--chessimals-text)}.chessimals-primary.is-working,.chessimals-secondary.is-working{cursor:wait;opacity:.82}.chessimals-button-spinner{width:1rem;height:1rem;flex:0 0 auto;border:.14rem solid currentColor;border-right-color:transparent;border-radius:999px;animation:chessimals-spin .72s linear infinite}@media (max-width: 560px){.chessimals-size,.chessimals-mode,.chessimals-actions{grid-template-columns:1fr}.chessimals-game{gap:.55rem;border-radius:1.25rem;padding:.625rem}.chessimals-turn-card{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.5rem;min-height:0;border-radius:.95rem;padding:.5rem}.chessimals-turn-card__copy{gap:.1rem}.chessimals-turn-card__chip{max-width:100%;padding:.18rem .5rem;font-size:.6rem;letter-spacing:.045em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chessimals-turn-card strong{font-size:clamp(.92rem,4.4vw,1.12rem);line-height:1.08}.chessimals-turn-card p{display:-webkit-box;overflow:hidden;font-size:.72rem;line-height:1.2;-webkit-box-orient:vertical;-webkit-line-clamp:1}.chessimals-player-strip{width:auto;max-width:none;min-width:0;padding:.25rem}.chessimals-player-strip__avatar{flex:0 0 1.8rem;width:1.8rem;height:1.8rem;aspect-ratio:1 / 1}:host ::ng-deep .chessimals-player-strip .chessimals-turn-avatar{width:1.8rem;min-width:1.8rem;height:1.8rem}.chessimals-player-strip__text{display:none}.chessimals-status{grid-template-columns:repeat(3,minmax(0,1fr));gap:.3rem}.chessimals-status div{gap:.14rem;min-height:2.2rem;border-radius:.82rem;padding:.34rem .3rem}.chessimals-status small{font-size:.58rem;line-height:1.05}.chessimals-status strong{font-size:clamp(.78rem,3.2vw,.94rem);line-height:1.05}.chessimals-tip,.chessimals-result,.chessimals-replay,.chessimals-online-status,.chessimals-tutorial{gap:.2rem;border-radius:1rem;padding:.7rem .75rem}.chessimals-tip strong,.chessimals-result strong,.chessimals-replay strong,.chessimals-tutorial strong{font-size:.95rem}.chessimals-tip p,.chessimals-result p{font-size:.9rem;line-height:1.28}.chessimals-result__stats{grid-template-columns:repeat(2,minmax(0,1fr))}.chessimals-replay,.chessimals-tutorial{grid-template-columns:1fr}.chessimals-replay__actions{justify-content:stretch}.chessimals-replay__actions .chessimals-secondary{flex:1 1 8rem}.chessimals-arena{gap:.5rem}.chessimals-board-wrap{width:100%;margin-inline:0;padding:0}.chessimals-board-frame{width:100%}.chessimals-powers{gap:.5rem;border-radius:1rem;padding:.55rem}.chessimals-powers__heading{gap:.4rem}.chessimals-powers h2{font-size:1rem}.chessimals-powers__heading span{padding:.22rem .48rem;font-size:.68rem}.chessimals-powers p{font-size:.78rem;line-height:1.2;-webkit-line-clamp:1}.chessimals-cards{grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem}.chessimals-cards button{gap:.25rem;min-height:3.95rem;border-radius:.85rem;padding:.34rem .22rem}.chessimals-animal-face{width:2.35rem;height:2.35rem;padding:.26rem;border-radius:.85rem}.chessimals-animal-face img{border-radius:.55rem}.chessimals-cards strong{font-size:.62rem}.chessimals-board{border-radius:var(--chessimals-board-radius)}.chessimals-cell-coordinate{font-size:.58rem}}@media (prefers-reduced-motion: reduce){.chessimals-cell.is-capture,.chessimals-cell.is-capture:before,.chessimals-cell.is-capture:after,.chessimals-cell.has-move-effect,.chessimals-cell.has-move-effect:before,.chessimals-cell.has-move-effect:after,.chessimals-cell.has-capture-effect,.chessimals-moving-piece{animation:none!important}.chessimals-moving-piece{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%))}}\n"] }]
67982
+ `, styles: [":host{display:block}.chessimals-shell{--chessimals-panel: #ffffff;--chessimals-surface: #fffaf1;--chessimals-border: rgba(46, 58, 44, .18);--chessimals-text: #2e3a2c;--chessimals-muted: #51643d;--chessimals-soft: rgba(111, 122, 60, .1);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-selected: #37f28a;--chessimals-selected-rgb: 55, 242, 138;--chessimals-magic: #f7d45a;--chessimals-magic-rgb: 247, 212, 90;--chessimals-magic-hot: #fff56f;--chessimals-magic-deep: #b77a18;--chessimals-warning: #f4c542;--chessimals-warning-rgb: 244, 197, 66;--chessimals-move: var(--chessimals-sky);--chessimals-move-rgb: var(--chessimals-sky-rgb);--chessimals-capture: #1fcdb3;--chessimals-capture-rgb: 31, 205, 179;--chessimals-last: #8c6b4f;--chessimals-last-rgb: 140, 107, 79;--chessimals-cell-light: #f3f4e8;--chessimals-cell-dark: #7f944d;--chessimals-board-shadow: rgba(46, 58, 44, .14);--chessimals-piece-white-fill: #ffffff;--chessimals-piece-white-side: #f3eadb;--chessimals-piece-white-line: rgba(82, 65, 46, .12);--chessimals-piece-white-shadow: drop-shadow(0 0 1px rgba(84, 62, 34, .52)) drop-shadow(0 .18rem .12rem rgba(72, 58, 36, .22)) drop-shadow(0 .34rem .42rem rgba(72, 58, 36, .22));--chessimals-piece-black-fill: #242936;--chessimals-piece-black-side: #171b25;--chessimals-piece-black-line: rgba(255, 255, 255, .1);--chessimals-piece-black-shadow: drop-shadow(0 0 1px rgba(255, 255, 255, .34)) drop-shadow(0 .18rem .1rem rgba(255, 255, 255, .12)) drop-shadow(0 .32rem .42rem rgba(0, 0, 0, .36));--chessimals-piece-gold: #c79a42;--chessimals-piece-gold-dark: #8a5f22;--chessimals-animal-face-bg: #fffdf7;--chessimals-animal-face-inner-bg: #ffffff;--chessimals-animal-face-border: rgba(46, 58, 44, .12);--chessimals-animal-face-filter: drop-shadow(0 .12rem .16rem rgba(46, 58, 44, .18));--chessimals-animal-face-locked-filter: grayscale(.2) saturate(.72);--chessimals-animal-face-locked-img-opacity: .72;display:grid;gap:1.125rem;width:100%;max-width:min(100%,60rem);margin:0 auto;color:var(--chessimals-text)}@media (prefers-color-scheme: dark){.chessimals-shell{--chessimals-panel: #172116;--chessimals-surface: #0f170f;--chessimals-border: rgba(242, 230, 213, .2);--chessimals-text: #f6f3e9;--chessimals-muted: #c8cfb1;--chessimals-soft: rgba(111, 122, 60, .22);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-cell-light: #f3f4e8;--chessimals-cell-dark: #7f944d;--chessimals-board-shadow: rgba(0, 0, 0, .34);--chessimals-animal-face-border: rgba(242, 230, 213, .24)}}.chessimals-resume-splash{order:0;position:fixed;inset:0;z-index:1000;display:grid;place-items:center;align-content:center;gap:.65rem;padding:1.5rem;text-align:center;color:var(--chessimals-text);background:radial-gradient(circle at 50% 42%,rgba(var(--chessimals-primary-rgb),.18),transparent 22rem),color-mix(in srgb,var(--chessimals-panel) 92%,transparent);backdrop-filter:blur(.9rem)}.chessimals-resume-splash__paw{display:grid;place-items:center;width:clamp(4.6rem,16vw,5.6rem);height:clamp(4.6rem,16vw,5.6rem);border-radius:1.55rem;background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.96),transparent 34%),linear-gradient(145deg,#fffffff5,rgba(var(--chessimals-secondary-rgb),.22)),color-mix(in srgb,var(--chessimals-panel) 82%,white);border:.12rem solid rgba(var(--chessimals-primary-rgb),.22);box-shadow:0 1.15rem 2.6rem rgba(var(--ion-color-dark-rgb, 47, 42, 58),.16),0 0 0 .42rem #ffffff6b,inset 0 -.25rem .6rem rgba(var(--chessimals-primary-rgb),.08);animation:chessimals-resume-pulse 1.2s ease-in-out infinite;font-size:clamp(2.45rem,9vw,3.35rem);line-height:1;filter:drop-shadow(0 .28rem .38rem rgba(var(--ion-color-dark-rgb, 47, 42, 58),.18))}.chessimals-resume-splash strong{font-size:clamp(1.55rem,5vw,2.4rem);font-weight:950;line-height:1.05}.chessimals-resume-splash p{max-width:24rem;margin:0;color:var(--chessimals-muted);font-size:1rem;line-height:1.35}@keyframes chessimals-resume-pulse{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-.25rem) scale(1.04)}}@keyframes chessimals-spin{to{transform:rotate(360deg)}}@keyframes chessimals-online-pulse{0%,to{transform:scale(1);opacity:.78}50%{transform:scale(1.22);opacity:1}}:host-context(html.ion-palette-dark) .chessimals-shell,:host-context([data-theme=\"dark\"]) .chessimals-shell{--chessimals-panel: #172116;--chessimals-surface: #0f170f;--chessimals-border: rgba(246, 227, 213, .22);--chessimals-text: #f6f3e9;--chessimals-muted: #c8cfb1;--chessimals-soft: rgba(111, 122, 60, .22);--chessimals-primary: #2e6f3e;--chessimals-primary-rgb: 46, 111, 62;--chessimals-primary-contrast: #fffaf0;--chessimals-secondary: #a8a06a;--chessimals-secondary-rgb: 168, 160, 106;--chessimals-sky: #c06a3d;--chessimals-sky-rgb: 192, 106, 61;--chessimals-stone: #8e9362;--chessimals-stone-rgb: 142, 147, 98;--chessimals-cell-light: #e8eadc;--chessimals-cell-dark: #5f7040;--chessimals-board-shadow: rgba(0, 0, 0, .34);--chessimals-capture: #66f2d7;--chessimals-capture-rgb: 102, 242, 215;--chessimals-last: #cdbe9b;--chessimals-last-rgb: 205, 190, 155;--chessimals-piece-white-fill: #fffaff;--chessimals-piece-white-side: #f0e5d4;--chessimals-piece-white-line: rgba(82, 65, 46, .12);--chessimals-piece-white-shadow: drop-shadow(0 0 1px rgba(84, 62, 34, .48)) drop-shadow(0 .18rem .12rem rgba(0, 0, 0, .24)) drop-shadow(0 .34rem .42rem rgba(0, 0, 0, .3));--chessimals-piece-black-fill: #202633;--chessimals-piece-black-side: #111620;--chessimals-piece-black-line: rgba(255, 255, 255, .12);--chessimals-piece-black-shadow: drop-shadow(0 0 1px rgba(255, 255, 255, .34)) drop-shadow(0 .18rem .1rem rgba(255, 255, 255, .14)) drop-shadow(0 .34rem .44rem rgba(0, 0, 0, .52));--chessimals-animal-face-bg: #fffdf7;--chessimals-animal-face-inner-bg: #ffffff;--chessimals-animal-face-border: rgba(242, 230, 213, .24);--chessimals-animal-face-filter: drop-shadow(0 .12rem .16rem rgba(0, 0, 0, .22));--chessimals-animal-face-locked-filter: grayscale(.32) saturate(.72);--chessimals-animal-face-locked-img-opacity: .58}.chessimals-hero{display:grid;gap:.75rem;justify-items:center;overflow:hidden;border-radius:1.75rem;padding:clamp(1.25rem,5vw,2.5rem);background:radial-gradient(circle at 18% 12%,rgba(255,255,255,.92),transparent 20%),linear-gradient(135deg,#fdf8ee,#fff 40%,#edf3df);color:var(--chessimals-text);text-align:center;border:1px solid var(--chessimals-border)}:host-context(html.ion-palette-dark) .chessimals-hero,:host-context([data-theme=\"dark\"]) .chessimals-hero{background:radial-gradient(circle at 18% 12%,rgba(255,255,255,.08),transparent 22%),linear-gradient(135deg,#111a10,#172116 48%,#0f170f);color:var(--chessimals-text);border-color:#f6e3d538}.chessimals-hero__logo{display:grid;place-items:center;width:min(22rem,82vw);max-width:100%;padding:.5rem;border-radius:1.35rem;background:#fff;box-shadow:0 1rem 2.5rem #2e3a2c1a,inset 0 0 0 1px #2e3a2c14}.chessimals-hero__logo img{display:block;width:100%;height:auto;max-height:12rem;object-fit:contain;border-radius:1rem}.chessimals-hero h1{margin:0;font-size:clamp(2.4rem,9vw,4.5rem);line-height:.95;font-weight:950}.chessimals-hero p,.chessimals-howto p,.chessimals-tip p,.chessimals-result p,.chessimals-powers p{margin:0;line-height:1.45}.chessimals-panel,.chessimals-game,.chessimals-powers{display:grid;gap:1rem;border:1px solid var(--chessimals-border);border-radius:1.625rem;padding:clamp(1rem,4vw,1.5rem);background:var(--chessimals-panel)}.chessimals-online{display:grid;gap:.875rem;border:1px solid var(--chessimals-border);border-radius:1.375rem;padding:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--chessimals-panel)}.chessimals-online--waiting{order:2;border-color:rgba(var(--chessimals-primary-rgb),.34)}.chessimals-online h2,.chessimals-online p{margin:0}.chessimals-online h2{font-size:1.1rem;font-weight:950}.chessimals-online p{color:var(--chessimals-muted);line-height:1.4}.chessimals-online__create,.chessimals-online__join{display:grid;gap:.55rem}.chessimals-online__create small{color:var(--chessimals-muted);font-weight:800;line-height:1.35}.chessimals-online__join{border-top:1px solid var(--chessimals-border);padding-top:.85rem}.chessimals-online__join>strong{font-size:.95rem;font-weight:950}.chessimals-online__error{border-radius:.875rem;padding:.7rem .8rem;background:rgba(var(--ion-color-danger-rgb, 235, 68, 90),.12);color:var(--ion-color-danger, #eb445a)!important;font-weight:800}.chessimals-online__loading{display:flex;align-items:center;gap:.625rem;border:1px solid rgba(var(--chessimals-primary-rgb),.22);border-radius:999px;padding:.65rem .85rem;background:rgba(var(--chessimals-primary-rgb),.08);color:var(--chessimals-text);font-size:.92rem;font-weight:900}.chessimals-online__loading span{width:1rem;height:1rem;border:.15rem solid rgba(var(--chessimals-primary-rgb),.24);border-top-color:var(--chessimals-primary);border-radius:999px;animation:chessimals-spin .75s linear infinite}.chessimals-online-code{display:grid;gap:.4rem;font-weight:950}.chessimals-online-code input{width:100%;min-height:3.3rem;border:1px solid var(--chessimals-border);border-radius:999px;padding:0 1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;font-weight:850;letter-spacing:.05em;text-transform:uppercase}.chessimals-game-code{display:grid;gap:.2rem;border-radius:1rem;padding:.85rem 1rem;background:var(--chessimals-soft)}.chessimals-game-code small{color:var(--chessimals-muted);font-weight:900;letter-spacing:.06em;text-transform:uppercase}.chessimals-game-code strong{font-size:clamp(1.35rem,6vw,2rem);font-weight:950;letter-spacing:.05em}.chessimals-online-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.chessimals-history{gap:.75rem}.chessimals-history__heading{display:flex;align-items:start;justify-content:space-between;gap:.75rem}.chessimals-history__list{display:grid;gap:.5rem}.chessimals-history__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;border:1px solid var(--chessimals-border);border-radius:1rem;padding:.7rem .8rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-history__item span{display:grid;gap:.1rem;min-width:0}.chessimals-history__item strong{font-weight:950;letter-spacing:.04em}.chessimals-history__item small{overflow:hidden;color:var(--chessimals-muted);font-size:.82rem;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.chessimals-history__item em{flex:0 0 auto;color:var(--chessimals-primary);font-size:.86rem;font-style:normal;font-weight:950}.chessimals-home-settings{gap:.8rem}.chessimals-home-settings__actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.625rem}.chessimals-pending-player{display:flex;align-items:center;gap:.7rem;border:1px solid rgba(var(--chessimals-primary-rgb),.22);border-radius:1rem;padding:.75rem;background:var(--chessimals-soft)}.chessimals-pending-player div{display:grid;gap:.1rem;min-width:0}.chessimals-pending-player small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.07em;text-transform:uppercase}.chessimals-pending-player strong{overflow:hidden;font-size:1.05rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-game{display:grid;gap:.875rem}.chessimals-turn-card{order:1;display:flex;align-items:center;justify-content:space-between;gap:.625rem;min-height:3.75rem;overflow:visible;border:1px solid rgba(var(--chessimals-primary-rgb),.24);border-radius:1rem;padding:.55rem .65rem;background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.34),transparent 18%),linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.2),rgba(var(--chessimals-secondary-rgb),.1))}.chessimals-turn-card.is-black-turn{border-color:rgba(var(--ion-color-dark-rgb, 47, 42, 58),.28);background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.12),transparent 18%),linear-gradient(135deg,rgba(var(--ion-color-dark-rgb, 47, 42, 58),.14),rgba(var(--chessimals-primary-rgb),.1))}.chessimals-turn-card.is-finished{border-color:rgba(var(--ion-color-success-rgb, 45, 211, 111),.42);background:radial-gradient(circle at 15% 18%,rgba(255,255,255,.35),transparent 18%),linear-gradient(135deg,rgba(var(--ion-color-success-rgb, 45, 211, 111),.18),rgba(var(--chessimals-primary-rgb),.12))}.chessimals-turn-card.is-finished .chessimals-turn-card__chip{color:var(--ion-color-success, #2dd36f)}.chessimals-turn-card.is-your-turn{border-color:rgba(var(--chessimals-primary-rgb),.48);box-shadow:0 0 0 .12rem rgba(var(--chessimals-primary-rgb),.12),0 .95rem 2rem rgba(var(--chessimals-primary-rgb),.14)}.chessimals-turn-card.is-your-turn .chessimals-turn-card__chip{background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);box-shadow:0 0 0 .32rem rgba(var(--chessimals-primary-rgb),.14);animation:chessimals-turn-pulse 1.45s ease-in-out infinite}.chessimals-turn-card.is-waiting-turn .chessimals-turn-card__chip{color:var(--chessimals-muted)}@keyframes chessimals-turn-pulse{0%,to{transform:translateZ(0) scale(1)}50%{transform:translateZ(0) scale(1.035)}}.chessimals-turn-card__copy{display:grid;min-width:0;gap:.15rem}.chessimals-turn-card__chip{justify-self:start;border-radius:999px;padding:.2rem .5rem;background:var(--chessimals-panel);color:var(--chessimals-primary);font-size:.62rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-turn-card strong{display:block;min-width:0;font-size:clamp(1rem,3.5vw,1.25rem);line-height:1.08;font-weight:950;overflow-wrap:anywhere}.chessimals-turn-card p{display:block;min-width:0;margin:0;color:var(--chessimals-muted);font-size:.78rem;line-height:1.22}.chessimals-player-strip{display:flex;flex:0 0 auto;align-items:center;gap:.45rem;min-width:10rem;max-width:min(17rem,42%);border:1px solid var(--chessimals-border);border-radius:999px;padding:.3rem .55rem .3rem .35rem;background:rgba(var(--ion-color-light-rgb, 244, 245, 248),.72)}:host-context(html.ion-palette-dark) .chessimals-player-strip,:host-context([data-theme=\"dark\"]) .chessimals-player-strip{background:#ffffff0f}.chessimals-player-strip val-user-avatar{display:inline-flex;flex:0 0 auto;line-height:0}.chessimals-player-strip__avatar{display:grid;place-items:center;flex:0 0 2.25rem;width:2.25rem;height:2.25rem;aspect-ratio:1 / 1;overflow:hidden;border-radius:999px;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);font-size:.875rem;line-height:1}.chessimals-player-strip__avatar--initials{font-size:.78rem;font-weight:950}:host ::ng-deep .chessimals-player-strip .chessimals-turn-avatar{width:2.25rem;min-width:2.25rem;height:2.25rem;border-radius:50%}.chessimals-player-strip__text{display:grid;min-width:0;gap:.05rem;line-height:1.1}.chessimals-player-strip__text span{color:var(--chessimals-muted);font-size:.58rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-player-strip__text strong{overflow:hidden;font-size:.82rem;line-height:1.08;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-player-strip__text small{overflow:hidden;color:var(--chessimals-muted);font-size:.66rem;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.chessimals-arena{order:4;display:grid;gap:.875rem;align-items:start}.chessimals-howto,.chessimals-tip,.chessimals-result,.chessimals-replay,.chessimals-rematch-status{display:grid;gap:.375rem;padding:1rem;border-radius:1.25rem;background:var(--chessimals-soft)}.chessimals-howto{border:1px solid var(--chessimals-border);background:var(--chessimals-soft);color:var(--chessimals-text)}.chessimals-howto p{color:var(--chessimals-muted)}.chessimals-howto__actions{display:flex;flex-wrap:wrap;gap:.625rem}:host-context(html.ion-palette-dark) .chessimals-howto,:host-context([data-theme=\"dark\"]) .chessimals-howto{border-color:#f6e3d533;background:#172116;color:#f6f3e9}:host-context(html.ion-palette-dark) .chessimals-howto p,:host-context([data-theme=\"dark\"]) .chessimals-howto p{color:#c8cfb1}.chessimals-result{order:5}.chessimals-result__stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;margin-top:.35rem}.chessimals-result__stats span{display:grid;gap:.15rem;min-width:0;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:.85rem;padding:.58rem .6rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--chessimals-panel)}.chessimals-result__stats small{overflow:hidden;color:var(--chessimals-muted);font-size:.68rem;font-weight:950;letter-spacing:.05em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.chessimals-result__stats b{overflow:hidden;color:var(--chessimals-text);font-size:.92rem;font-weight:950;line-height:1.12;text-overflow:ellipsis;white-space:nowrap}.chessimals-result__detail{margin:.2rem 0 0}.chessimals-bot-report{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.75rem;margin-top:.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1rem;padding:.78rem .85rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.1),transparent),var(--chessimals-panel)}.chessimals-bot-report>span{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:.85rem;background:rgba(var(--chessimals-secondary-rgb),.14);font-size:1.45rem;box-shadow:inset 0 0 0 1px rgba(var(--chessimals-primary-rgb),.14)}.chessimals-bot-report div{display:grid;gap:.12rem;min-width:0}.chessimals-bot-report small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-bot-report strong{color:var(--chessimals-text);font-size:1rem;font-weight:950;line-height:1.15}.chessimals-bot-report p{margin:0;color:var(--chessimals-muted);font-size:.84rem;font-weight:820;line-height:1.28}.chessimals-online-status{order:3;display:grid;grid-template-columns:1.35rem minmax(0,1fr);align-items:center;gap:.85rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1.1rem;padding:.85rem .95rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.09),transparent),var(--chessimals-panel)}.chessimals-online-status>span{justify-self:center;width:.72rem;height:.72rem;border-radius:999px;background:var(--chessimals-primary);box-shadow:0 0 0 .38rem rgba(var(--chessimals-primary-rgb),.12)}.chessimals-online-status.is-syncing>span{animation:chessimals-online-pulse .9s ease-in-out infinite}.chessimals-online-status.is-error{border-color:rgba(var(--ion-color-danger-rgb, 235, 68, 90),.28);background:linear-gradient(135deg,rgba(var(--ion-color-danger-rgb, 235, 68, 90),.1),transparent),var(--chessimals-panel)}.chessimals-online-status.is-error>span{background:var(--ion-color-danger, #eb445a);box-shadow:0 0 0 .38rem rgba(var(--ion-color-danger-rgb, 235, 68, 90),.12)}.chessimals-online-status div{display:grid;gap:.12rem;min-width:0}.chessimals-online-status strong{overflow:hidden;color:var(--chessimals-text);font-size:.95rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-online-status p{margin:0;color:var(--chessimals-muted);font-size:.84rem;font-weight:780;line-height:1.28}.chessimals-series{display:grid;gap:.18rem;margin-top:.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);border-radius:1rem;padding:.78rem .85rem;background:linear-gradient(135deg,rgba(var(--chessimals-secondary-rgb),.12),transparent),var(--chessimals-panel)}.chessimals-series--compact{margin-top:0}.chessimals-series small{color:var(--chessimals-muted);font-size:.72rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-series strong{color:var(--chessimals-text);font-size:1rem;font-weight:950;line-height:1.15}.chessimals-series span{color:var(--chessimals-muted);font-size:.84rem;font-weight:820;line-height:1.28}.chessimals-replay{order:5;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;border:1px solid rgba(var(--chessimals-primary-rgb),.2);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.1),transparent),var(--chessimals-panel)}.chessimals-replay>div:first-child{display:grid;gap:.15rem;min-width:0}.chessimals-replay strong{font-size:1rem;font-weight:950}.chessimals-replay span{color:var(--chessimals-muted);font-size:.86rem;font-weight:800;line-height:1.25}.chessimals-replay__actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}.chessimals-replay__actions .chessimals-secondary{min-height:2.5rem;padding:0 .8rem}.chessimals-tutorial{order:3;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;padding:1rem;border:1px solid rgba(var(--chessimals-primary-rgb),.24);border-radius:1.25rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel)}.chessimals-tutorial>div{display:grid;gap:.18rem;min-width:0}.chessimals-tutorial small{color:var(--chessimals-primary);font-size:.76rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-tutorial strong{font-size:1rem;font-weight:950}.chessimals-tutorial p{margin:0;color:var(--chessimals-muted);font-size:.88rem;font-weight:780;line-height:1.35}.chessimals-tutorial .chessimals-secondary{min-height:2.5rem;padding:0 .85rem}.chessimals-rematch-status{order:5;border:1px solid rgba(var(--chessimals-primary-rgb),.22);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.12),transparent),var(--chessimals-panel)}.chessimals-rematch-status.is-incoming{border-color:rgba(var(--ion-color-success-rgb, 45, 211, 111),.38);background:linear-gradient(135deg,rgba(var(--ion-color-success-rgb, 45, 211, 111),.14),transparent),var(--chessimals-panel)}.chessimals-rematch-status strong{font-size:1rem;font-weight:950}.chessimals-rematch-status p{margin:0;color:var(--chessimals-muted);font-size:.88rem;line-height:1.35}.chessimals-rematch-player{background:#ffffff7a}:host-context(html.ion-palette-dark) .chessimals-rematch-player,:host-context([data-theme=\"dark\"]) .chessimals-rematch-player{background:#ffffff0f}.chessimals-rematch-status__actions{display:flex;justify-content:flex-end}.chessimals-rematch-status__actions .chessimals-secondary{min-height:2.5rem;padding:0 .95rem}.chessimals-howto h2,.chessimals-powers h2{margin:0;font-size:1.15rem;font-weight:950}.chessimals-tip p,.chessimals-powers p{color:var(--chessimals-muted)}.chessimals-learn-more{justify-self:start;min-height:2.75rem;border:0;border-radius:999px;padding:0 1rem;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);font:inherit;font-weight:950;box-shadow:0 .75rem 1.6rem rgba(var(--chessimals-primary-rgb),.28)}.chessimals-size,.chessimals-mode,.chessimals-status{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.chessimals-status{order:3;grid-template-columns:repeat(3,minmax(0,1fr))}.chessimals-size button,.chessimals-mode button,.chessimals-status div{display:grid;gap:.2rem;align-content:center;min-width:0;min-height:3.875rem;padding:.55rem .65rem;border:1px solid var(--chessimals-border);border-radius:1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-size button.is-selected{border-color:var(--chessimals-primary);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16)}.chessimals-mode button.is-selected{border-color:var(--chessimals-primary);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16)}.chessimals-difficulty{display:flex;flex-wrap:wrap;gap:.55rem}.chessimals-difficulty button{min-height:2.75rem;border:1px solid var(--chessimals-border);border-radius:999px;padding:0 1rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;font-weight:950}.chessimals-difficulty button.is-selected{border-color:var(--chessimals-primary);background:var(--chessimals-primary);color:#fff}.chessimals-bots{display:grid;grid-template-columns:repeat(auto-fit,minmax(9.5rem,1fr));gap:.625rem}.chessimals-bots button{display:grid;grid-template-columns:auto 1fr;grid-template-areas:\"avatar title\" \"avatar body\" \"avatar tendency\";column-gap:.55rem;row-gap:.12rem;min-width:0;min-height:4.75rem;border:1px solid var(--chessimals-border);border-radius:1rem;padding:.65rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;text-align:left}.chessimals-bots button>span{grid-area:avatar;display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:50%;background:rgba(var(--chessimals-primary-rgb),.12);font-size:1.2rem}.chessimals-bots button strong{grid-area:title;align-self:end;font-size:.95rem;font-weight:950}.chessimals-bots button small{grid-area:body;color:var(--chessimals-muted);font-size:.75rem;font-weight:750;line-height:1.25}.chessimals-bots button p{grid-area:tendency;margin:.12rem 0 0;color:var(--chessimals-muted);font-size:.72rem;font-weight:820;line-height:1.24}.chessimals-bots button.is-selected{border-color:var(--chessimals-primary);background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.13),transparent),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-primary-rgb),.16),0 .75rem 1.5rem rgba(var(--chessimals-primary-rgb),.1)}.chessimals-size strong,.chessimals-mode strong,.chessimals-status strong,.chessimals-result strong,.chessimals-rematch-status strong,.chessimals-tip strong{font-weight:950}.chessimals-status strong{min-width:0;font-size:clamp(.95rem,2.5vw,1.2rem);line-height:1.08;overflow-wrap:anywhere;white-space:normal}.chessimals-size small,.chessimals-mode small,.chessimals-status small{color:var(--chessimals-muted);font-size:.78rem;line-height:1.12}.chessimals-board-wrap{--chessimals-board-radius: min(.85rem, 14px);display:flex;justify-content:center;min-width:0;max-width:100%;overflow-x:auto;width:100%;padding:.25rem 0}.chessimals-board-wrap.is-orienting .chessimals-board-frame{animation:chessimals-orient-board .32s ease}.chessimals-board-wrap.is-finished{overflow-x:visible}.chessimals-board-frame{flex:0 1 58rem;min-width:0;width:100%;max-width:58rem;border-radius:var(--chessimals-board-radius)}.chessimals-board{position:relative;display:grid;grid-template-columns:repeat(var(--board-size),minmax(0,1fr));grid-template-rows:repeat(var(--board-size),minmax(0,1fr));min-width:0;width:100%;aspect-ratio:1 / 1;overflow:hidden;isolation:isolate;contain:paint;border:1px solid var(--chessimals-border);border-radius:var(--chessimals-board-radius);clip-path:inset(0 round var(--chessimals-board-radius));-webkit-mask-image:-webkit-radial-gradient(white,black);background:radial-gradient(ellipse at 16% 18%,rgba(255,255,255,.34),transparent 18%),radial-gradient(ellipse at 82% 78%,rgba(var(--chessimals-primary-rgb),.1),transparent 22%),radial-gradient(ellipse at 32% 68%,rgba(var(--chessimals-stone-rgb),.05),transparent 30%),radial-gradient(ellipse at 66% 34%,rgba(255,255,255,.08),transparent 24%),var(--chessimals-border);box-shadow:inset 0 0 0 1px #ffffff1a,0 .85rem 2.1rem var(--chessimals-board-shadow)}.chessimals-board-wrap.is-syncing .chessimals-board{cursor:wait}.chessimals-cell-coordinate{position:absolute;z-index:5;color:color-mix(in srgb,var(--chessimals-muted) 78%,var(--chessimals-text));font-size:.68rem;font-weight:950;letter-spacing:.02em;line-height:1;pointer-events:none;text-transform:uppercase;-webkit-user-select:none;user-select:none}.chessimals-cell-coordinate--rank{top:.2rem;left:.24rem}.chessimals-cell-coordinate--file{right:.24rem;bottom:.18rem}@keyframes chessimals-orient-board{0%{opacity:.72;filter:blur(.06rem);transform:scale(.985)}52%{opacity:.92;filter:blur(0);transform:scale(1.012)}to{opacity:1;filter:blur(0);transform:scale(1)}}.chessimals-center-line{position:absolute;top:50%;left:0;right:0;z-index:2;display:flex;align-items:center;justify-content:center;border-top:.08rem dashed rgba(var(--chessimals-primary-rgb),.56);filter:drop-shadow(0 0 .24rem rgba(var(--chessimals-primary-rgb),.26));pointer-events:none}.chessimals-power-trail{position:absolute;inset:0;z-index:5;pointer-events:none;--trail-color: rgba(var(--chessimals-magic-rgb), .88);--trail-glow: rgba(var(--chessimals-magic-rgb), .48)}.chessimals-power-trail.is-capture{--trail-color: rgba(var(--chessimals-capture-rgb), .86);--trail-glow: rgba(var(--chessimals-capture-rgb), .46)}.chessimals-power-trail.effect-eagle{--trail-color: rgba(255, 255, 255, .92);--trail-glow: rgba(120, 210, 255, .54)}.chessimals-power-trail.effect-bull{--trail-color: rgba(188, 131, 76, .86);--trail-glow: rgba(188, 131, 76, .36)}.chessimals-power-trail.effect-kangaroo{--trail-color: rgba(174, 124, 255, .86);--trail-glow: rgba(174, 124, 255, .42)}.chessimals-power-trail.effect-lion{--trail-color: rgba(255, 221, 120, .88);--trail-glow: rgba(255, 190, 56, .42)}.chessimals-power-trail>span{position:absolute;top:var(--trail-y);left:var(--trail-x);width:var(--trail-length);height:.45rem;border-radius:999px;background:linear-gradient(90deg,transparent,var(--trail-color) 42%,rgba(255,255,255,.92));box-shadow:0 0 .75rem var(--trail-glow),0 0 1.45rem var(--trail-glow);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0);transform-origin:0 50%;animation:chessimals-power-trail .72s ease-out both}.chessimals-power-trail.effect-eagle>span{height:.28rem;background:linear-gradient(90deg,transparent,rgba(255,255,255,.95) 44%,rgba(120,210,255,.58)),repeating-linear-gradient(90deg,transparent 0 .7rem,rgba(255,255,255,.66) .7rem .92rem);animation-name:chessimals-eagle-trail}.chessimals-power-trail.effect-bull>span{height:.72rem;background:repeating-linear-gradient(90deg,rgba(255,255,255,.42) 0 .18rem,transparent .18rem .42rem),linear-gradient(90deg,transparent,var(--trail-color),rgba(255,255,255,.86));animation-name:chessimals-bull-trail}.chessimals-power-trail.effect-kangaroo>span{height:1rem;border-top:.16rem dashed var(--trail-color);background:transparent;box-shadow:none;filter:drop-shadow(0 0 .8rem var(--trail-glow));animation-name:chessimals-kangaroo-trail}.chessimals-power-trail.effect-lion>span{height:.62rem;background:linear-gradient(90deg,transparent,var(--trail-color),rgba(255,255,255,.82)),repeating-linear-gradient(115deg,rgba(255,255,255,.55) 0 .12rem,transparent .12rem .34rem);animation-name:chessimals-lion-trail}@keyframes chessimals-power-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0)}28%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.72)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}@keyframes chessimals-eagle-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0) skew(-10deg)}30%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.82) skew(-10deg)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1.05) skew(-10deg)}}@keyframes chessimals-bull-trail{0%{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0) scaleY(1)}38%{opacity:1;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.7) scaleY(1.18)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1) scaleY(.82)}}@keyframes chessimals-kangaroo-trail{0%{opacity:0;transform:translateY(-.4rem) rotate(var(--trail-angle)) scaleX(0)}34%{opacity:1;transform:translateY(-1.2rem) rotate(var(--trail-angle)) scaleX(.62)}to{opacity:0;transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}@keyframes chessimals-lion-trail{0%{opacity:0;filter:saturate(1);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(0)}36%{opacity:1;filter:saturate(1.4);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(.76)}to{opacity:0;filter:saturate(1.1);transform:translateY(-50%) rotate(var(--trail-angle)) scaleX(1)}}.chessimals-board-overlay{position:absolute;inset:0;z-index:8;display:grid;place-content:center;gap:.5rem;padding:1.25rem;background:radial-gradient(circle at 50% 34%,rgba(255,226,129,.34),transparent 24%),radial-gradient(circle at 50% 52%,rgba(var(--chessimals-primary-rgb),.34),transparent 42%),linear-gradient(135deg,#140c16e0,#08120dc7);color:#fff;text-align:center;backdrop-filter:blur(2px);overflow:hidden}.chessimals-board-overlay.is-defeat{background:radial-gradient(circle at 50% 34%,rgba(143,168,206,.26),transparent 24%),radial-gradient(circle at 50% 52%,rgba(72,86,115,.42),transparent 42%),linear-gradient(135deg,#090c14e6,#1c1e2bcc)}.chessimals-board-overlay:before{position:absolute;inset:0;background:radial-gradient(circle at 20% 30%,rgba(255,255,255,.58) 0 .08rem,transparent .1rem),radial-gradient(circle at 75% 25%,rgba(255,226,129,.7) 0 .1rem,transparent .12rem),radial-gradient(circle at 68% 72%,rgba(var(--chessimals-capture-rgb),.54) 0 .08rem,transparent .1rem),radial-gradient(circle at 35% 78%,rgba(255,255,255,.48) 0 .07rem,transparent .09rem),radial-gradient(circle at 84% 66%,rgba(255,255,255,.38) 0 .06rem,transparent .08rem),radial-gradient(circle at 14% 64%,rgba(255,226,129,.48) 0 .07rem,transparent .09rem);content:\"\";opacity:.72;animation:chessimals-victory-sparks 1.5s ease-in-out infinite}.chessimals-board-overlay__rays{position:absolute;inset:-18%;background:conic-gradient(from 8deg,transparent 0 7deg,rgba(255,226,129,.16) 7deg 11deg,transparent 11deg 22deg);opacity:.85;animation:chessimals-finale-rays 8s linear infinite}.chessimals-board-overlay.is-defeat .chessimals-board-overlay__rays{background:conic-gradient(from 8deg,transparent 0 8deg,rgba(180,204,240,.1) 8deg 12deg,transparent 12deg 24deg);animation-duration:12s}.chessimals-board-overlay__ribbon{position:absolute;top:-20%;width:.42rem;height:54%;border-radius:999px;background:linear-gradient(to bottom,transparent,rgba(255,226,129,.72),transparent);opacity:.7;transform:rotate(var(--ribbon-angle, 12deg));animation:chessimals-finale-ribbon 2.5s ease-in-out infinite}.chessimals-board-overlay.is-defeat .chessimals-board-overlay__ribbon{background:linear-gradient(to bottom,transparent,rgba(180,204,240,.42),transparent);opacity:.48}.chessimals-board-overlay__ribbon.ribbon-a{left:18%;--ribbon-angle: -18deg}.chessimals-board-overlay__ribbon.ribbon-b{left:50%;--ribbon-angle: 8deg;animation-delay:.32s}.chessimals-board-overlay__ribbon.ribbon-c{right:18%;--ribbon-angle: 20deg;animation-delay:.64s}.chessimals-board-overlay>*{position:relative;z-index:1}.chessimals-board-overlay span{justify-self:center;border-radius:999px;padding:.32rem .7rem;background:#ffffff26;color:#ffffffe6;font-size:.76rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-board-overlay strong{font-size:clamp(1.65rem,8vw,3rem);line-height:1;font-weight:950;text-shadow:0 0 1.25rem rgba(255,255,255,.26)}.chessimals-board-overlay em{justify-self:center;display:grid;place-items:center;width:clamp(3rem,14vw,4.6rem);height:clamp(3rem,14vw,4.6rem);border:.16rem solid rgba(255,255,255,.62);border-radius:50%;background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.72),transparent 18%),linear-gradient(135deg,#ffe281,#b98436);color:#2d2412;font-size:clamp(1.1rem,5vw,1.65rem);font-style:normal;font-weight:950;box-shadow:0 0 0 .45rem #ffe2811f,0 1rem 2rem #00000042;animation:chessimals-finale-medal 1.8s ease-in-out infinite}.chessimals-board-overlay.is-defeat em{background:radial-gradient(circle at 35% 25%,rgba(255,255,255,.48),transparent 18%),linear-gradient(135deg,#d9e2ef,#69758e);color:#182032;box-shadow:0 0 0 .45rem #b4ccf01a,0 1rem 2rem #00000052}.chessimals-board-overlay em.has-avatar{overflow:hidden;background:#fff;padding:0}.chessimals-board-overlay em.has-avatar img{display:block;width:100%;height:100%;object-fit:cover}.chessimals-board-overlay b{justify-self:center;color:#fffc;font-size:.8rem;font-weight:950;letter-spacing:.08em;text-transform:uppercase}.chessimals-board-overlay small{color:#ffffffd1;font-size:clamp(.9rem,3vw,1.1rem);font-weight:800}.chessimals-board-overlay__stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem;width:min(26rem,92%);margin:.2rem auto 0}.chessimals-board-overlay__stats div{display:grid;gap:.08rem;min-width:0;border:1px solid rgba(255,255,255,.18);border-radius:.75rem;padding:.42rem .46rem;background:#ffffff1a;backdrop-filter:blur(3px)}.chessimals-board-overlay__stats dt,.chessimals-board-overlay__stats dd{overflow:hidden;margin:0;text-overflow:ellipsis;white-space:nowrap}.chessimals-board-overlay__stats dt{color:#ffffffad;font-size:clamp(.52rem,2.1vw,.66rem);font-weight:950;letter-spacing:.04em;text-transform:uppercase}.chessimals-board-overlay__stats dd{color:#fff;font-size:clamp(.68rem,2.8vw,.88rem);font-weight:950}@keyframes chessimals-victory-sparks{0%,to{opacity:.46;transform:translateY(0) scale(.98)}50%{opacity:.95;transform:translateY(-.35rem) scale(1.02)}}@keyframes chessimals-finale-rays{to{transform:rotate(360deg)}}@keyframes chessimals-finale-ribbon{0%,to{opacity:.18;transform:translateY(-.5rem) rotate(var(--ribbon-angle))}50%{opacity:.75;transform:translateY(1.4rem) rotate(var(--ribbon-angle))}}@keyframes chessimals-finale-medal{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(-.18rem) scale(1.04)}}.chessimals-cell{position:relative;isolation:isolate;--chessimals-cell-bg: var(--chessimals-cell-light);display:grid;place-items:center;min-width:0;min-height:0;aspect-ratio:1;border:0;background:radial-gradient(ellipse at 26% 24%,rgba(255,255,255,.12),transparent 24%),radial-gradient(ellipse at 78% 76%,rgba(61,54,36,.06),transparent 28%),linear-gradient(135deg,rgba(255,255,255,.04),transparent 52%,rgba(52,44,28,.04)),var(--chessimals-cell-bg);color:var(--chessimals-text);font:inherit;overflow:hidden;transition:background .16s ease,box-shadow .16s ease,transform .16s ease}.chessimals-cell:before,.chessimals-cell:after{pointer-events:none}.chessimals-cell-texture{position:absolute;inset:0;z-index:0;display:block;pointer-events:none;opacity:.42;mix-blend-mode:multiply;background:radial-gradient(ellipse at var(--wear-x, 28%) var(--wear-y, 32%),rgba(255,255,255,.16),transparent 17%),radial-gradient(ellipse at var(--wear-x2, 74%) var(--wear-y2, 68%),rgba(75,66,42,.09),transparent 25%),repeating-linear-gradient(var(--wear-angle, 26deg),rgba(75,66,42,.045) 0 1px,transparent 1px .52rem),linear-gradient(135deg,rgba(255,255,255,.06),transparent 42%,rgba(52,44,28,.045))}.chessimals-cell-texture:after{position:absolute;inset:.08rem;border:1px solid rgba(75,66,42,.05);border-radius:.18rem;box-shadow:inset .08rem .08rem #ffffff14,inset -.08rem -.08rem #342c1c0b;content:\"\"}.chessimals-cell.is-edge-cell .chessimals-cell-texture{opacity:.56;background:radial-gradient(ellipse at var(--wear-x, 28%) var(--wear-y, 32%),rgba(255,255,255,.14),transparent 18%),radial-gradient(ellipse at var(--wear-x2, 74%) var(--wear-y2, 68%),rgba(75,66,42,.14),transparent 28%),linear-gradient(135deg,rgba(70,52,28,.055),transparent 44%,rgba(52,44,28,.09)),repeating-linear-gradient(var(--wear-angle, 26deg),rgba(75,66,42,.055) 0 1px,transparent 1px .48rem)}.chessimals-cell.wear-0{--wear-x: 22%;--wear-y: 24%;--wear-x2: 78%;--wear-y2: 72%;--wear-angle: 18deg}.chessimals-cell.wear-1{--wear-x: 64%;--wear-y: 18%;--wear-x2: 30%;--wear-y2: 76%;--wear-angle: -24deg}.chessimals-cell.wear-2{--wear-x: 42%;--wear-y: 58%;--wear-x2: 82%;--wear-y2: 26%;--wear-angle: 42deg}.chessimals-cell.wear-3{--wear-x: 74%;--wear-y: 68%;--wear-x2: 24%;--wear-y2: 28%;--wear-angle: -12deg}.chessimals-cell.wear-4{--wear-x: 34%;--wear-y: 18%;--wear-x2: 62%;--wear-y2: 84%;--wear-angle: 64deg}.chessimals-cell.wear-5{--wear-x: 18%;--wear-y: 70%;--wear-x2: 70%;--wear-y2: 34%;--wear-angle: -48deg}:host-context(html.ion-palette-dark) .chessimals-cell-texture,:host-context([data-theme=\"dark\"]) .chessimals-cell-texture{opacity:.34;mix-blend-mode:soft-light}.chessimals-cell.is-dark-cell{--chessimals-cell-bg: var(--chessimals-cell-dark)}.chessimals-cell.is-selected{z-index:1;background:radial-gradient(circle,rgba(var(--chessimals-selected-rgb),.28) 0 36%,transparent 62%),linear-gradient(135deg,rgba(var(--chessimals-selected-rgb),.22),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .18rem var(--chessimals-selected),inset 0 0 .55rem #ffffffb8,inset 0 0 1.8rem rgba(var(--chessimals-selected-rgb),.42),0 0 .55rem rgba(var(--chessimals-selected-rgb),.56),0 0 1.55rem rgba(var(--chessimals-selected-rgb),.36)}.chessimals-board.is-power-aiming .chessimals-cell.is-selected{background:radial-gradient(circle at 50% 52%,rgba(var(--chessimals-magic-rgb),.38) 0 34%,transparent 64%),radial-gradient(circle at 32% 24%,rgba(255,255,255,.34),transparent 28%),linear-gradient(135deg,rgba(var(--chessimals-magic-rgb),.2),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .18rem var(--chessimals-magic-hot),inset 0 0 .8rem #ffffffa8,inset 0 0 1.9rem rgba(var(--chessimals-magic-rgb),.5),0 0 .7rem rgba(var(--chessimals-magic-rgb),.62),0 0 1.75rem rgba(var(--chessimals-magic-rgb),.42)}.chessimals-board.is-power-aiming .chessimals-cell.is-legal:not(.is-capture):after{border-color:rgba(var(--chessimals-magic-rgb),.94);box-shadow:0 0 .72rem rgba(var(--chessimals-magic-rgb),.48),inset 0 0 .6rem #fff3}.chessimals-board.is-power-aiming .chessimals-target{background:var(--chessimals-magic-hot);box-shadow:0 0 0 .2rem rgba(var(--chessimals-magic-rgb),.2),0 0 .95rem rgba(var(--chessimals-magic-rgb),.62)}.chessimals-cell.is-legal:not(.is-capture):after{position:absolute;inset:13%;z-index:2;border:max(2px,1.8%) solid var(--chessimals-move);border-radius:.55rem;content:\"\";opacity:.74;pointer-events:none}.chessimals-cell.is-last:not(.is-selected):not(.is-legal):not(.is-capture){background:radial-gradient(circle,rgba(var(--chessimals-last-rgb),.16) 0 42%,transparent 68%),var(--chessimals-cell-bg)}.chessimals-cell.is-capture{z-index:2;background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.24),transparent 34%),linear-gradient(135deg,rgba(var(--chessimals-capture-rgb),.14),#ffffff14),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .14rem rgba(var(--chessimals-capture-rgb),.84),inset 0 0 1.4rem rgba(var(--chessimals-capture-rgb),.24),0 0 .95rem rgba(var(--chessimals-capture-rgb),.34);animation:chessimals-capture-aura 1.35s ease-in-out infinite}.chessimals-cell.is-capture:before{position:absolute;inset:4%;z-index:1;display:block;border-radius:.64rem;background:linear-gradient(90deg,transparent,rgba(255,255,255,.52),transparent),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.24),transparent 58%);content:\"\";opacity:0;transform:translate(-42%) scale(.9);animation:chessimals-capture-sweep 1.35s ease-in-out infinite}.chessimals-cell.is-capture:after{position:absolute;inset:8%;z-index:3;border:max(2px,1.55%) solid rgba(var(--chessimals-capture-rgb),.9);border-radius:.62rem;box-shadow:0 0 .75rem rgba(var(--chessimals-capture-rgb),.5),inset 0 0 .72rem #ffffff38;content:\"\";pointer-events:none;animation:chessimals-capture-frame 1.35s ease-in-out infinite}.chessimals-cell.has-capture-ready:not(.is-selected):after{position:absolute;inset:16%;z-index:3;border:max(2px,1.45%) solid rgba(var(--chessimals-selected-rgb),.72);border-radius:999px;box-shadow:0 0 .65rem rgba(var(--chessimals-selected-rgb),.34),inset 0 0 .55rem #ffffff2e;content:\"\"}.chessimals-cell.is-winning.is-legal:not(.is-capture):after{border-color:rgba(var(--chessimals-warning-rgb),.92);border-radius:999px;box-shadow:0 0 .75rem rgba(var(--chessimals-warning-rgb),.48),inset 0 0 .58rem #ffffff38}.chessimals-cell.is-winning .chessimals-target{background:var(--chessimals-warning);box-shadow:0 0 0 .22rem rgba(var(--chessimals-warning-rgb),.2),0 0 .95rem rgba(var(--chessimals-warning-rgb),.56)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture){background:radial-gradient(circle at 50% 52%,rgba(var(--chessimals-warning-rgb),.16),transparent 52%),var(--chessimals-cell-bg)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture) .chessimals-piece{filter:drop-shadow(0 0 .38rem rgba(var(--chessimals-warning-rgb),.52)) var(--chessimals-piece-white-shadow)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture) .chessimals-piece.is-black{filter:drop-shadow(0 0 .38rem rgba(var(--chessimals-warning-rgb),.52)) var(--chessimals-piece-black-shadow)}.chessimals-cell.has-threat:not(.is-selected):not(.is-capture):before{position:absolute;top:.26rem;right:.26rem;z-index:4;width:.48rem;height:.48rem;border-radius:999px;background:rgba(var(--chessimals-warning-rgb),.96);box-shadow:0 0 0 .18rem rgba(var(--chessimals-warning-rgb),.22);content:\"\"}@keyframes chessimals-capture-aura{0%,to{filter:saturate(1);box-shadow:inset 0 0 0 .12rem rgba(var(--chessimals-capture-rgb),.78),inset 0 0 1rem rgba(var(--chessimals-capture-rgb),.2),0 0 .64rem rgba(var(--chessimals-capture-rgb),.32)}50%{filter:saturate(1.22);box-shadow:inset 0 0 0 .16rem rgba(var(--chessimals-capture-rgb),.96),inset 0 0 1.34rem rgba(var(--chessimals-capture-rgb),.34),0 0 1.2rem rgba(var(--chessimals-capture-rgb),.48)}}@keyframes chessimals-capture-sweep{0%{opacity:0;transform:translate(-52%) scale(.88)}42%{opacity:.66;transform:translate(0) scale(1)}to{opacity:0;transform:translate(48%) scale(.92)}}@keyframes chessimals-capture-frame{0%,to{opacity:.68;transform:scale(.96)}50%{opacity:1;transform:scale(1)}}.chessimals-cell.has-source-effect:not(.is-moving-source){background:radial-gradient(circle,rgba(var(--chessimals-selected-rgb),.12) 0 34%,transparent 64%),var(--chessimals-cell-bg)}.chessimals-cell.has-move-effect{z-index:2;background:radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.22) 0 34%,transparent 68%),var(--chessimals-cell-bg);box-shadow:inset 0 0 0 .16rem rgba(var(--chessimals-capture-rgb),.86),inset 0 0 1.2rem rgba(var(--chessimals-capture-rgb),.26),0 0 1.1rem rgba(var(--chessimals-capture-rgb),.42)}.chessimals-cell.has-move-effect:before{position:absolute;inset:.12rem;z-index:1;display:block;border-radius:.7rem;background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.48),transparent 22%),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.42),transparent 58%);content:\"\";opacity:0;transform:scale(.72);animation:chessimals-power-impact .7s ease-out both}.chessimals-cell.has-move-effect:after{position:absolute;inset:.28rem;z-index:4;display:block;border:.14rem solid rgba(255,255,255,.72);border-radius:.58rem;box-shadow:0 0 .5rem #ffffff5c,0 0 1rem rgba(var(--chessimals-capture-rgb),.32);content:\"\";animation:chessimals-power-frame .86s ease-out both}.chessimals-cell.has-capture-effect{animation:chessimals-capture-hit .78s ease-out both}.chessimals-cell.effect-eagle:before{background:linear-gradient(135deg,transparent 10%,rgba(255,255,255,.78) 48%,transparent 52%),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.36),transparent 62%)}.chessimals-cell.effect-bull:before{background:repeating-linear-gradient(90deg,rgba(255,255,255,.34) 0 .16rem,transparent .16rem .34rem),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.38),transparent 62%)}.chessimals-cell.effect-kangaroo:before{border-radius:999px;background:radial-gradient(circle at 42% 44%,rgba(255,255,255,.58),transparent 18%),radial-gradient(circle at 58% 56%,rgba(var(--chessimals-capture-rgb),.4),transparent 64%)}.chessimals-cell.effect-lion:before{background:conic-gradient(from 0deg,transparent,rgba(255,255,255,.56),transparent,rgba(var(--chessimals-capture-rgb),.4),transparent),radial-gradient(circle at 50% 50%,rgba(var(--chessimals-capture-rgb),.34),transparent 62%)}@keyframes chessimals-power-impact{0%{opacity:0;transform:scale(.54) rotate(0)}28%{opacity:1;transform:scale(.96) rotate(2deg)}to{opacity:0;transform:scale(1.3) rotate(8deg)}}@keyframes chessimals-power-frame{0%{opacity:0;transform:scale(.84)}34%{opacity:1;transform:scale(1.02)}to{opacity:0;transform:scale(1.16)}}@keyframes chessimals-capture-hit{0%,to{filter:saturate(1)}35%{filter:saturate(1.35) brightness(1.08)}}.chessimals-cell.is-moving-source .chessimals-piece{opacity:0}.chessimals-piece{position:relative;z-index:2;display:block;width:68%;height:74%;color:var(--chessimals-primary);--chessimals-piece-fill: var(--chessimals-piece-white-fill);--chessimals-piece-side: var(--chessimals-piece-white-side);--chessimals-piece-line: var(--chessimals-piece-white-line);--chessimals-piece-outline: rgba(82, 65, 46, .34);filter:var(--chessimals-piece-white-shadow)}.chessimals-piece.is-black{color:#fff;--chessimals-piece-fill: var(--chessimals-piece-black-fill);--chessimals-piece-side: var(--chessimals-piece-black-side);--chessimals-piece-line: var(--chessimals-piece-black-line);--chessimals-piece-outline: rgba(255, 255, 255, .22);filter:var(--chessimals-piece-black-shadow)}.chessimals-moving-piece{position:absolute;top:0;left:0;z-index:6;width:calc(100% / var(--board-size));height:calc(100% / var(--board-size));display:grid;place-items:center;pointer-events:none;transform:translate(calc(var(--from-col) * 100%),calc(var(--from-row) * 100%));animation:chessimals-piece-travel .36s cubic-bezier(.2,.82,.24,1) both}@keyframes chessimals-piece-travel{0%{transform:translate(calc(var(--from-col) * 100%),calc(var(--from-row) * 100%)) scale(1)}68%{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%)) scale(1.07)}to{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%)) scale(1)}}.chessimals-piece__side,.chessimals-piece__head,.chessimals-piece__collar,.chessimals-piece__neck,.chessimals-piece__base{position:absolute;display:block;left:50%;background:var(--chessimals-piece-fill);border:max(1px,1.25%) solid var(--chessimals-piece-outline);transform:translate(-50%)}.chessimals-piece__side{top:46%;z-index:0;width:58%;height:41%;border-radius:34% 34% 12% 12%;background:linear-gradient(96deg,var(--chessimals-piece-side) 0 34%,transparent 35%),var(--chessimals-piece-fill);clip-path:polygon(22% 0,78% 0,96% 100%,4% 100%);opacity:.92}.chessimals-piece__head{top:1%;z-index:4;width:48%;height:40%;border-radius:999px;background:radial-gradient(circle at 30% 22%,rgba(255,255,255,.72) 0 13%,transparent 14%),linear-gradient(135deg,rgba(255,255,255,.28) 0 34%,transparent 35%),var(--chessimals-piece-fill);box-shadow:inset -.18rem -.12rem #52412e0f,inset 0 -1px 0 var(--chessimals-piece-line)}.chessimals-piece.is-black .chessimals-piece__head{box-shadow:inset .18rem -.12rem #ffffff0f,inset 0 -1px 0 var(--chessimals-piece-line)}.chessimals-piece__collar{top:37%;z-index:5;width:72%;height:15%;border-radius:999px;background:linear-gradient(180deg,#f5cd77 0%,var(--chessimals-piece-gold) 55%,var(--chessimals-piece-gold-dark) 100%);border-color:color-mix(in srgb,var(--chessimals-piece-gold-dark) 72%,transparent);box-shadow:inset 0 .12rem #ffffff47,inset 0 -.08rem #462e1238,0 .08rem .18rem #462e1224}.chessimals-piece__neck{top:50%;z-index:2;width:52%;height:31%;clip-path:polygon(16% 0,84% 0,100% 100%,0 100%);background:linear-gradient(100deg,var(--chessimals-piece-side) 0 28%,transparent 29%),linear-gradient(180deg,var(--chessimals-piece-fill),color-mix(in srgb,var(--chessimals-piece-fill) 78%,var(--chessimals-piece-side)));box-shadow:inset -.12rem .1rem #ffffff14}.chessimals-piece__base{bottom:0;z-index:6;width:86%;height:17%;border-radius:.42rem .42rem .22rem .22rem;background:linear-gradient(100deg,var(--chessimals-piece-side) 0 18%,transparent 19%),linear-gradient(180deg,color-mix(in srgb,var(--chessimals-piece-fill) 92%,#ffffff),var(--chessimals-piece-fill));box-shadow:inset 0 .12rem #ffffff24,inset 0 -.1rem 0 var(--chessimals-piece-line)}.chessimals-target{width:16%;height:16%;border-radius:999px;background:var(--chessimals-move);opacity:.9;box-shadow:0 0 .9rem rgba(var(--chessimals-move-rgb),.42)}.chessimals-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.625rem}.chessimals-cards button{position:relative;isolation:isolate;display:grid;gap:.375rem;place-items:center;min-height:5.75rem;padding:.625rem;border:1px solid var(--chessimals-border);border-radius:1.125rem;background:var(--chessimals-panel);color:var(--chessimals-text);font:inherit;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.chessimals-powers__heading{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.chessimals-powers p{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.chessimals-powers__heading span{flex:0 0 auto;border-radius:999px;padding:.28rem .62rem;background:rgba(var(--chessimals-primary-rgb),.12);color:var(--chessimals-primary);font-size:.78rem;font-weight:950}.chessimals-cards button.is-selected{border-color:var(--chessimals-magic-hot);background:radial-gradient(circle at 50% 16%,rgba(255,255,255,.42),transparent 30%),radial-gradient(circle at 50% 76%,rgba(var(--chessimals-magic-rgb),.2),transparent 56%),linear-gradient(135deg,rgba(var(--chessimals-magic-rgb),.2),#ffffff0a),var(--chessimals-panel);box-shadow:0 0 0 2px rgba(var(--chessimals-magic-rgb),.28),0 0 1.35rem rgba(var(--chessimals-magic-rgb),.48),0 .9rem 2rem rgba(var(--chessimals-magic-rgb),.18);transform:translateY(-1px)}.chessimals-cards button.is-selected:before,.chessimals-cards button.is-selected:after{position:absolute;inset:-.5rem;z-index:0;border-radius:inherit;content:\"\";pointer-events:none}.chessimals-cards button>*{position:relative;z-index:1}.chessimals-cards button.is-selected:before{background:radial-gradient(circle at 18% 24%,rgba(var(--chessimals-magic-rgb),.88) 0 .08rem,transparent .1rem),radial-gradient(circle at 78% 20%,rgba(255,255,255,.86) 0 .07rem,transparent .09rem),radial-gradient(circle at 86% 62%,rgba(var(--chessimals-magic-rgb),.72) 0 .06rem,transparent .08rem),radial-gradient(circle at 28% 78%,rgba(255,245,111,.78) 0 .07rem,transparent .09rem),radial-gradient(circle at 54% 8%,rgba(255,255,255,.68) 0 .05rem,transparent .07rem);opacity:.8;animation:chessimalsMagicParticles 1.8s ease-in-out infinite}.chessimals-cards button.is-selected:after{background:conic-gradient(from 12deg,transparent 0 16deg,rgba(var(--chessimals-magic-rgb),.2) 16deg 22deg,transparent 22deg 44deg);opacity:.68;filter:blur(.04rem);animation:chessimalsMagicAura 3.2s linear infinite}.chessimals-cards button.is-used{opacity:.42}.chessimals-animal-face{display:grid;place-items:center;width:3.25rem;height:3.25rem;padding:.34rem;overflow:hidden;border-radius:1.2rem;background:radial-gradient(circle at 35% 22%,rgba(255,255,255,.82),transparent 55%),var(--chessimals-animal-face-bg);color:color-mix(in srgb,var(--chessimals-text) 92%,#000);box-shadow:inset 0 0 0 1px var(--chessimals-animal-face-border),0 .45rem 1.15rem #2e3a2c1a}.chessimals-animal-face img{display:block;width:100%;height:100%;object-fit:contain;border-radius:.72rem;background:var(--chessimals-animal-face-inner-bg);box-shadow:inset 0 0 0 1px #2e3a2c14;transform:none;filter:var(--chessimals-animal-face-filter)}.chessimals-cards button.is-selected .chessimals-animal-face,.chessimals-powers.is-ready .chessimals-cards button:not(.is-used) .chessimals-animal-face{background:radial-gradient(circle at 35% 22%,rgba(255,255,255,.9),transparent 52%),radial-gradient(circle at 62% 78%,rgba(var(--chessimals-magic-rgb),.22),transparent 48%),var(--chessimals-animal-face-bg);color:color-mix(in srgb,var(--chessimals-text) 94%,#000);box-shadow:inset 0 0 0 1px rgba(var(--chessimals-magic-rgb),.34),0 0 .85rem rgba(var(--chessimals-magic-rgb),.34),0 .75rem 1.6rem rgba(var(--chessimals-magic-rgb),.16)}.chessimals-powers.is-locked .chessimals-animal-face{filter:var(--chessimals-animal-face-locked-filter);opacity:.86}.chessimals-powers.is-locked .chessimals-animal-face img,.chessimals-cards button.is-used .chessimals-animal-face img{opacity:var(--chessimals-animal-face-locked-img-opacity)}.chessimals-cards strong{overflow:hidden;max-width:100%;font-size:.82rem;font-weight:950;text-overflow:ellipsis;white-space:nowrap}.chessimals-powers.is-locked .chessimals-cards{opacity:.68}.chessimals-powers.is-ready{border-color:rgba(var(--chessimals-magic-rgb),.46);box-shadow:0 0 0 1px rgba(var(--chessimals-magic-rgb),.12),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}.chessimals-powers.is-ready .chessimals-cards button:not(.is-used){animation:chessimalsPowerPulse 1.8s ease-in-out infinite}.chessimals-powers.is-unlock-pulse{animation:chessimalsPowersUnlocked 1.18s ease-out both}.chessimals-powers.is-unlock-pulse .chessimals-cards button:not(.is-used){animation:chessimalsPowerIgnite .76s ease-out both,chessimalsPowerPulse 1.8s ease-in-out .76s infinite}@keyframes chessimalsPowerPulse{0%,to{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}50%{box-shadow:0 0 1.4rem rgba(var(--chessimals-magic-rgb),.24)}}@keyframes chessimalsPowersUnlocked{0%{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}34%{box-shadow:0 0 0 .18rem rgba(var(--chessimals-magic-rgb),.28),0 0 2.2rem rgba(var(--chessimals-magic-rgb),.38),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.16)}to{box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0),0 1rem 2.4rem rgba(var(--chessimals-magic-rgb),.12)}}@keyframes chessimalsPowerIgnite{0%{transform:translateY(0) scale(.96);box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}42%{transform:translateY(-.08rem) scale(1.025);box-shadow:0 0 0 .14rem rgba(var(--chessimals-magic-rgb),.24),0 0 1.5rem rgba(var(--chessimals-magic-rgb),.46)}to{transform:translateY(0) scale(1);box-shadow:0 0 rgba(var(--chessimals-magic-rgb),0)}}@keyframes chessimalsMagicParticles{0%,to{opacity:.54;transform:translateY(0) scale(.94)}50%{opacity:1;transform:translateY(-.18rem) scale(1.02)}}@keyframes chessimalsMagicAura{to{transform:rotate(1turn)}}.chessimals-actions{order:6;align-self:stretch;justify-self:stretch;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));gap:.625rem;margin-top:1rem}.chessimals-shell--projection .chessimals-game{max-width:min(96vw,90rem)}.chessimals-shell--projection .chessimals-turn-card{padding:.875rem 1rem}.chessimals-shell--projection .chessimals-status,.chessimals-shell--projection .chessimals-actions,.chessimals-shell--projection .chessimals-online,.chessimals-shell--projection .chessimals-replay,.chessimals-shell--projection .chessimals-rematch-status{display:none}.chessimals-shell--projection .chessimals-arena{grid-template-columns:minmax(0,1fr);justify-items:center}.chessimals-shell--projection .chessimals-board-wrap{--chessimals-board-radius: min(.625rem, 10px);width:min(96vw,82vh,58rem);max-width:none}.chessimals-shell--projection .chessimals-board-frame{flex-basis:auto;max-width:none}@media (min-width: 760px){.chessimals-game{gap:1rem}.chessimals-turn-card,.chessimals-status,.chessimals-arena,.chessimals-replay,.chessimals-result,.chessimals-actions{grid-column:1 / -1}.chessimals-arena{grid-template-columns:minmax(0,1fr);justify-items:center;align-items:start;gap:1rem}.chessimals-powers{width:min(100%,44rem);align-content:center;grid-template-columns:minmax(11rem,.68fr) minmax(0,1fr);align-items:center;gap:1rem;padding:1rem}.chessimals-cards{grid-template-columns:repeat(4,minmax(0,1fr))}.chessimals-cards button{min-height:5rem}.chessimals-powers p{-webkit-line-clamp:3}}.chessimals-rules{display:grid;gap:1rem;padding-top:.25rem}.chessimals-settings{display:grid;gap:.85rem}.chessimals-settings article{display:grid;gap:.65rem;padding:.9rem;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--ion-card-background, #fff)}.chessimals-about{display:grid;justify-items:center;gap:1rem;color:var(--ion-text-color, var(--chessimals-text))}.chessimals-about__logo{display:block;width:min(30rem,100%);aspect-ratio:1280 / 698;object-fit:cover;object-position:center;border-radius:1.25rem;background:#fff;box-shadow:0 1rem 2rem #2e3a2c24}.chessimals-about p{margin:0;color:var(--ion-color-medium, var(--chessimals-muted));font-size:.95rem;font-weight:750;line-height:1.45;text-align:center}.chessimals-about dl{display:grid;width:100%;margin:0;gap:.65rem}.chessimals-about dl div{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem .95rem;border:1px solid rgba(var(--chessimals-primary-rgb),.16);border-radius:1rem;background:linear-gradient(135deg,rgba(var(--chessimals-primary-rgb),.08),transparent),var(--ion-card-background, #fff)}.chessimals-about dt,.chessimals-about dd{margin:0}.chessimals-about dt{color:var(--ion-color-medium, var(--chessimals-muted));font-size:.78rem;font-weight:950;letter-spacing:.06em;text-transform:uppercase}.chessimals-about dd{color:var(--ion-text-color, var(--chessimals-text));font-size:.95rem;font-weight:950}.chessimals-rules__hero{display:block;width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:1.35rem;border:1px solid rgba(var(--chessimals-primary-rgb),.18);box-shadow:0 1rem 2.25rem #2e3a2c1f}.chessimals-rules article{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:1rem;padding:1rem;border:1px solid var(--ion-border-color, #e7e4ea);border-radius:1.25rem;background:var(--ion-card-background, #fff);color:var(--ion-text-color, #2f2a3a)}.chessimals-rules article>span{display:grid;place-items:center;width:2rem;height:2rem;border-radius:999px;background:rgba(var(--chessimals-primary-rgb),.12);color:var(--chessimals-primary);font-weight:950}.chessimals-rules article>div{display:grid;min-width:0;gap:.45rem}.chessimals-rules h3,.chessimals-rules p,.chessimals-rules ul{margin:0}.chessimals-rules h3{font-size:1rem;font-weight:950;line-height:1.2}.chessimals-rules p,.chessimals-rules li{color:var(--ion-color-medium, #6f6a7a);line-height:1.5}.chessimals-rules ul{display:grid;gap:.45rem;padding-left:1.15rem}.chessimals-primary,.chessimals-secondary{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:3.625rem;border-radius:999px;font:inherit;font-weight:950}.chessimals-primary{border:0;background:var(--chessimals-primary);color:var(--chessimals-primary-contrast);box-shadow:0 1.125rem 2.8rem rgba(var(--chessimals-primary-rgb),.28)}.chessimals-secondary{border:1px solid var(--chessimals-border);background:transparent;color:var(--chessimals-text)}.chessimals-primary.is-working,.chessimals-secondary.is-working{cursor:wait;opacity:.82}.chessimals-button-spinner{width:1rem;height:1rem;flex:0 0 auto;border:.14rem solid currentColor;border-right-color:transparent;border-radius:999px;animation:chessimals-spin .72s linear infinite}@media (max-width: 560px){.chessimals-size,.chessimals-mode,.chessimals-actions{grid-template-columns:1fr}.chessimals-game{gap:.55rem;border-radius:1.25rem;padding:.625rem}.chessimals-turn-card{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.5rem;min-height:0;border-radius:.95rem;padding:.5rem}.chessimals-turn-card__copy{gap:.1rem}.chessimals-turn-card__chip{max-width:100%;padding:.18rem .5rem;font-size:.6rem;letter-spacing:.045em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chessimals-turn-card strong{font-size:clamp(.92rem,4.4vw,1.12rem);line-height:1.08}.chessimals-turn-card p{display:-webkit-box;overflow:hidden;font-size:.72rem;line-height:1.2;-webkit-box-orient:vertical;-webkit-line-clamp:1}.chessimals-player-strip{width:auto;max-width:none;min-width:0;padding:.25rem}.chessimals-player-strip__avatar{flex:0 0 1.8rem;width:1.8rem;height:1.8rem;aspect-ratio:1 / 1}:host ::ng-deep .chessimals-player-strip .chessimals-turn-avatar{width:1.8rem;min-width:1.8rem;height:1.8rem}.chessimals-player-strip__text{display:none}.chessimals-status{grid-template-columns:repeat(3,minmax(0,1fr));gap:.3rem}.chessimals-status div{gap:.14rem;min-height:2.2rem;border-radius:.82rem;padding:.34rem .3rem}.chessimals-status small{font-size:.58rem;line-height:1.05}.chessimals-status strong{font-size:clamp(.78rem,3.2vw,.94rem);line-height:1.05}.chessimals-tip,.chessimals-result,.chessimals-replay,.chessimals-online-status,.chessimals-tutorial{gap:.2rem;border-radius:1rem;padding:.7rem .75rem}.chessimals-tip strong,.chessimals-result strong,.chessimals-replay strong,.chessimals-tutorial strong{font-size:.95rem}.chessimals-tip p,.chessimals-result p{font-size:.9rem;line-height:1.28}.chessimals-result__stats{grid-template-columns:repeat(2,minmax(0,1fr))}.chessimals-replay,.chessimals-tutorial{grid-template-columns:1fr}.chessimals-replay__actions{justify-content:stretch}.chessimals-replay__actions .chessimals-secondary{flex:1 1 8rem}.chessimals-arena{gap:.5rem}.chessimals-board-wrap{width:100%;margin-inline:0;padding:0}.chessimals-board-frame{width:100%}.chessimals-powers{gap:.5rem;border-radius:1rem;padding:.55rem}.chessimals-powers__heading{gap:.4rem}.chessimals-powers h2{font-size:1rem}.chessimals-powers__heading span{padding:.22rem .48rem;font-size:.68rem}.chessimals-powers p{font-size:.78rem;line-height:1.2;-webkit-line-clamp:1}.chessimals-cards{grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem}.chessimals-cards button{gap:.25rem;min-height:3.95rem;border-radius:.85rem;padding:.34rem .22rem}.chessimals-animal-face{width:2.35rem;height:2.35rem;padding:.26rem;border-radius:.85rem}.chessimals-animal-face img{border-radius:.55rem}.chessimals-cards strong{font-size:.62rem}.chessimals-board{border-radius:var(--chessimals-board-radius)}.chessimals-cell-coordinate{font-size:.58rem}}@media (prefers-reduced-motion: reduce){.chessimals-cell.is-capture,.chessimals-cell.is-capture:before,.chessimals-cell.is-capture:after,.chessimals-cell.has-move-effect,.chessimals-cell.has-move-effect:before,.chessimals-cell.has-move-effect:after,.chessimals-cell.has-capture-effect,.chessimals-moving-piece{animation:none!important}.chessimals-moving-piece{transform:translate(calc(var(--to-col) * 100%),calc(var(--to-row) * 100%))}}\n"] }]
68430
67983
  }], ctorParameters: () => [], propDecorators: { boardAnchor: [{
68431
67984
  type: ViewChild,
68432
67985
  args: ['boardAnchor']
@@ -68438,6 +67991,1385 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68438
67991
  type: Input
68439
67992
  }] } });
68440
67993
 
67994
+ const STARTER_CARDS = {
67995
+ o_simple: { id: 'o_simple', name: 'Ofrenda simple', type: 'offering', cost: 0, attack: 0, life: 1 },
67996
+ o_forbidden: {
67997
+ id: 'o_forbidden',
67998
+ name: 'El fruto prohibido',
67999
+ type: 'offering',
68000
+ cost: 0,
68001
+ attack: 0,
68002
+ life: 2,
68003
+ abilityName: 'Conocimiento del bien y del mal',
68004
+ abilityText: 'Al usarla, disminuye en 1 los puntos de vida de tu Lider.',
68005
+ abilityCost: 0,
68006
+ },
68007
+ p_scout: { id: 'p_scout', name: 'Scout', type: 'character', cost: 1, attack: 1, life: 1 },
68008
+ p_guard: { id: 'p_guard', name: 'Guard', type: 'character', cost: 2, attack: 1, life: 3 },
68009
+ p_warrior: { id: 'p_warrior', name: 'Warrior', type: 'character', cost: 2, attack: 2, life: 2 },
68010
+ p_elder: { id: 'p_elder', name: 'Elder', type: 'character', cost: 3, attack: 2, life: 4 },
68011
+ p_champion: { id: 'p_champion', name: 'Champion', type: 'character', cost: 4, attack: 4, life: 4 },
68012
+ };
68013
+ const STARTING_SHARED_DECK = [
68014
+ 'o_simple',
68015
+ 'p_scout',
68016
+ 'o_forbidden',
68017
+ 'o_simple',
68018
+ 'p_guard',
68019
+ 'p_warrior',
68020
+ 'o_simple',
68021
+ 'p_elder',
68022
+ 'p_scout',
68023
+ 'o_simple',
68024
+ 'p_champion',
68025
+ 'p_guard',
68026
+ 'o_simple',
68027
+ 'p_warrior',
68028
+ 'p_scout',
68029
+ 'o_simple',
68030
+ 'p_elder',
68031
+ 'p_guard',
68032
+ 'o_simple',
68033
+ ];
68034
+ const STARTING_GAME = {
68035
+ gameId: 'mock-christianity',
68036
+ status: 'in_progress',
68037
+ mode: 'local_pass',
68038
+ turnOwner: 'P1',
68039
+ revision: 0,
68040
+ turnCount: 1,
68041
+ matchScore: { P1: 1, P2: 0 },
68042
+ sharedDeck: STARTING_SHARED_DECK,
68043
+ historyZone: [],
68044
+ players: {
68045
+ P1: {
68046
+ seat: 'P1',
68047
+ displayName: 'Jugador',
68048
+ avatar: 'J',
68049
+ avatarColor: '#2563eb',
68050
+ leaderName: 'Adam',
68051
+ leaderHp: 15,
68052
+ leaderMaxHp: 15,
68053
+ offerings: [
68054
+ { instanceId: 'p1_offering_001', cardId: 'o_simple', name: 'Ofrenda simple', owner: 'P1', ready: true, value: 1 },
68055
+ {
68056
+ instanceId: 'p1_offering_002',
68057
+ cardId: 'o_forbidden',
68058
+ name: 'El fruto prohibido',
68059
+ owner: 'P1',
68060
+ ready: true,
68061
+ value: 2,
68062
+ abilityName: 'Conocimiento del bien y del mal',
68063
+ abilityText: 'Al usarla, disminuye en 1 los puntos de vida de tu Lider.',
68064
+ abilityCost: 0,
68065
+ },
68066
+ ],
68067
+ offeringPlayedThisTurn: false,
68068
+ hand: ['o_simple', 'p_scout', 'p_warrior', 'p_guard'],
68069
+ battleZone: [],
68070
+ },
68071
+ P2: {
68072
+ seat: 'P2',
68073
+ displayName: 'Rival',
68074
+ avatar: 'R',
68075
+ avatarColor: '#b45309',
68076
+ leaderName: 'Noah',
68077
+ leaderHp: 15,
68078
+ leaderMaxHp: 15,
68079
+ offerings: [{ instanceId: 'p2_offering_001', cardId: 'o_simple', name: 'Ofrenda simple', owner: 'P2', ready: true, value: 1 }],
68080
+ offeringPlayedThisTurn: false,
68081
+ handCount: 4,
68082
+ battleZone: [
68083
+ {
68084
+ instanceId: 'opp_001',
68085
+ cardId: 'p_scout',
68086
+ name: 'Scout',
68087
+ owner: 'P2',
68088
+ controller: 'P2',
68089
+ attack: 1,
68090
+ currentHp: 1,
68091
+ maxHp: 1,
68092
+ canAttack: false,
68093
+ },
68094
+ ],
68095
+ },
68096
+ },
68097
+ log: ['Partida iniciada.'],
68098
+ };
68099
+ class ChristianityGameComponent {
68100
+ constructor() {
68101
+ this.i18n = inject(I18nService);
68102
+ this.game = signal(structuredClone(STARTING_GAME));
68103
+ this.selectedHandCard = signal(null);
68104
+ this.selectedAttacker = signal(null);
68105
+ this.selectedPreview = signal(null);
68106
+ this.previewTilt = signal({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
68107
+ this.hoveredHandIndex = signal(null);
68108
+ this.draggingCardId = signal(null);
68109
+ this.showHistory = signal(false);
68110
+ this.offeringsSeat = signal(null);
68111
+ this.canDropOnBattleSlot = (drag) => {
68112
+ const card = this.cardDefinition(drag.data);
68113
+ return card.type === 'character' && this.canPlay(card);
68114
+ };
68115
+ this.canDropOnOfferings = (drag) => {
68116
+ const card = this.cardDefinition(drag.data);
68117
+ return card.type === 'offering' && this.canPlay(card);
68118
+ };
68119
+ this.player = computed(() => this.game().players.P1);
68120
+ this.opponent = computed(() => this.game().players.P2);
68121
+ this.currentPlayer = computed(() => this.game().players[this.game().turnOwner]);
68122
+ this.isOwnTurn = computed(() => this.game().turnOwner === 'P1');
68123
+ this.hasOpponentGuards = computed(() => this.opponent().battleZone.length > 0);
68124
+ this.opponentHandCount = computed(() => this.opponent().handCount ?? this.opponent().hand?.length ?? 0);
68125
+ this.selectedCardDefinition = computed(() => {
68126
+ const selected = this.selectedHandCard();
68127
+ return selected ? this.cardDefinition(selected) : null;
68128
+ });
68129
+ this.statusText = computed(() => {
68130
+ const attacker = this.selectedAttacker();
68131
+ const handCard = this.selectedCardDefinition();
68132
+ if (!this.isOwnTurn()) {
68133
+ return this.t('christianityWaitTurn');
68134
+ }
68135
+ if (attacker) {
68136
+ return this.hasOpponentGuards() ? this.t('christianityChooseCharacterTarget') : this.t('christianityChooseTarget');
68137
+ }
68138
+ if (handCard) {
68139
+ if (!this.canPlay(handCard)) {
68140
+ return this.t('christianityNeedOfferings');
68141
+ }
68142
+ return handCard.type === 'offering' ? this.t('christianityPlaceOffering') : this.t('christianityChooseSlot');
68143
+ }
68144
+ return this.t('christianityChooseCard');
68145
+ });
68146
+ this.i18n.registerDefaults('MiniGames', MINI_GAMES_I18N);
68147
+ }
68148
+ t(key) {
68149
+ this.i18n.lang();
68150
+ return this.i18n.t(key, 'MiniGames');
68151
+ }
68152
+ cardDefinition(cardId) {
68153
+ return STARTER_CARDS[cardId] ?? STARTER_CARDS['p_scout'];
68154
+ }
68155
+ battleSlots(seat) {
68156
+ const cards = this.game().players[seat].battleZone;
68157
+ return Array.from({ length: 4 }, (_, index) => ({
68158
+ trackId: cards[index]?.instanceId ?? `${seat}-empty-${index}`,
68159
+ card: cards[index],
68160
+ }));
68161
+ }
68162
+ battleSlotDropId(index) {
68163
+ return `christianity-battle-slot-${index}`;
68164
+ }
68165
+ dropTargetIds() {
68166
+ return ['christianity-offerings-drop', ...this.battleSlots('P1').map((_, index) => this.battleSlotDropId(index))];
68167
+ }
68168
+ hiddenHandCards(count) {
68169
+ return Array.from({ length: count });
68170
+ }
68171
+ fanTransform(index, total, opponent) {
68172
+ if (total <= 1)
68173
+ return 'none';
68174
+ const center = (total - 1) / 2;
68175
+ const offset = index - center;
68176
+ const rotate = offset * (opponent ? 8 : 5);
68177
+ const lift = Math.abs(offset) * 0.25;
68178
+ const hoverLift = opponent ? 0 : this.handWaveLift(index);
68179
+ const scale = opponent ? 1 : this.handWaveScale(index);
68180
+ const fanLift = opponent ? Math.abs(offset) * 0.34 : lift + hoverLift;
68181
+ const fanSpread = opponent ? offset * 0.08 : 0;
68182
+ return `translate(${fanSpread}rem, ${fanLift}rem) rotate(${rotate}deg) scale(${scale})`;
68183
+ }
68184
+ handCardZIndex(index) {
68185
+ const hovered = this.hoveredHandIndex();
68186
+ if (hovered === null)
68187
+ return 2;
68188
+ const distance = Math.abs(index - hovered);
68189
+ return Math.max(2, 8 - distance);
68190
+ }
68191
+ setHoveredHandIndex(index) {
68192
+ this.hoveredHandIndex.set(index);
68193
+ }
68194
+ clearHoveredHandIndex() {
68195
+ this.hoveredHandIndex.set(null);
68196
+ }
68197
+ releaseHoveredHand(event) {
68198
+ if (event.pointerType !== 'mouse') {
68199
+ window.setTimeout(() => this.clearHoveredHandIndex(), 180);
68200
+ }
68201
+ }
68202
+ handWaveLift(index) {
68203
+ const hovered = this.hoveredHandIndex();
68204
+ if (hovered === null)
68205
+ return 0;
68206
+ const distance = Math.abs(index - hovered);
68207
+ if (distance === 0)
68208
+ return -1.15;
68209
+ if (distance === 1)
68210
+ return -0.58;
68211
+ if (distance === 2)
68212
+ return -0.22;
68213
+ return 0;
68214
+ }
68215
+ handWaveScale(index) {
68216
+ const hovered = this.hoveredHandIndex();
68217
+ if (hovered === null)
68218
+ return 1;
68219
+ const distance = Math.abs(index - hovered);
68220
+ if (distance === 0)
68221
+ return 1.06;
68222
+ if (distance === 1)
68223
+ return 1.03;
68224
+ return 1;
68225
+ }
68226
+ readyOfferings(player) {
68227
+ return player.offerings.reduce((total, offering) => total + (offering.ready ? offering.value : 0), 0);
68228
+ }
68229
+ totalOfferings(player) {
68230
+ return player.offerings.reduce((total, offering) => total + offering.value, 0);
68231
+ }
68232
+ canPlay(card) {
68233
+ if (!this.isOwnTurn())
68234
+ return false;
68235
+ if (card.type === 'offering')
68236
+ return !this.player().offeringPlayedThisTurn;
68237
+ return this.readyOfferings(this.player()) >= card.cost && this.player().battleZone.length < 4;
68238
+ }
68239
+ canPlaySelected() {
68240
+ const selected = this.selectedHandCard();
68241
+ return !!selected && this.canPlay(this.cardDefinition(selected));
68242
+ }
68243
+ selectedActionLabel() {
68244
+ const selected = this.selectedCardDefinition();
68245
+ if (!selected)
68246
+ return this.t('christianityPlayCard');
68247
+ return selected.type === 'offering' ? this.t('christianityPlayOffering') : this.t('christianityPlayCard');
68248
+ }
68249
+ selectedActionDisabled() {
68250
+ const selected = this.selectedCardDefinition();
68251
+ if (!selected || !this.canPlay(selected))
68252
+ return true;
68253
+ return selected.type === 'character';
68254
+ }
68255
+ previewActionDisabled() {
68256
+ const preview = this.selectedPreview();
68257
+ if (preview?.source !== 'hand' || !preview.cardId)
68258
+ return true;
68259
+ return !this.canPlay(this.cardDefinition(preview.cardId));
68260
+ }
68261
+ canPlaceSelectedCharacter() {
68262
+ const selected = this.selectedCardDefinition();
68263
+ return !!selected && selected.type === 'character' && this.canPlay(selected);
68264
+ }
68265
+ canPlaceSelectedOffering() {
68266
+ const selected = this.selectedCardDefinition();
68267
+ return !!selected && selected.type === 'offering' && this.canPlay(selected);
68268
+ }
68269
+ isDraggingCharacter() {
68270
+ const cardId = this.draggingCardId();
68271
+ if (!cardId)
68272
+ return false;
68273
+ const card = this.cardDefinition(cardId);
68274
+ return card.type === 'character' && this.canPlay(card);
68275
+ }
68276
+ isDraggingOffering() {
68277
+ const cardId = this.draggingCardId();
68278
+ if (!cardId)
68279
+ return false;
68280
+ const card = this.cardDefinition(cardId);
68281
+ return card.type === 'offering' && this.canPlay(card);
68282
+ }
68283
+ startDraggingCard(cardId) {
68284
+ this.selectedAttacker.set(null);
68285
+ this.selectedHandCard.set(cardId);
68286
+ this.draggingCardId.set(cardId);
68287
+ this.closePreview();
68288
+ }
68289
+ endDraggingCard() {
68290
+ this.draggingCardId.set(null);
68291
+ }
68292
+ dropOnBattleSlot(event, slotIndex) {
68293
+ const card = this.cardDefinition(event.item.data);
68294
+ if (card.type !== 'character')
68295
+ return;
68296
+ this.playCardFromHand(event.item.data, slotIndex);
68297
+ }
68298
+ dropOnOfferings(event) {
68299
+ const card = this.cardDefinition(event.item.data);
68300
+ if (card.type !== 'offering')
68301
+ return;
68302
+ this.playCardFromHand(event.item.data);
68303
+ }
68304
+ selectHandCard(cardId) {
68305
+ const wasSelected = this.selectedHandCard() === cardId;
68306
+ this.selectedAttacker.set(null);
68307
+ this.selectedHandCard.set(wasSelected ? null : cardId);
68308
+ this.closePreview();
68309
+ }
68310
+ playSelectedCard(slotIndex) {
68311
+ const cardId = this.selectedHandCard();
68312
+ if (!cardId)
68313
+ return;
68314
+ this.playCardFromHand(cardId, slotIndex);
68315
+ }
68316
+ playCardFromHand(cardId, slotIndex) {
68317
+ const card = this.cardDefinition(cardId);
68318
+ if (!this.canPlay(card))
68319
+ return;
68320
+ this.game.update(game => {
68321
+ const next = structuredClone(game);
68322
+ const player = next.players.P1;
68323
+ const handIndex = player.hand?.indexOf(cardId) ?? -1;
68324
+ if (handIndex < 0 || !player.hand)
68325
+ return game;
68326
+ player.hand.splice(handIndex, 1);
68327
+ if (card.type === 'offering') {
68328
+ player.offerings.push({
68329
+ instanceId: `p1_offering_${next.revision + 1}`,
68330
+ cardId: card.id,
68331
+ name: card.name,
68332
+ owner: 'P1',
68333
+ ready: true,
68334
+ value: card.life,
68335
+ abilityName: card.abilityName,
68336
+ abilityText: card.abilityText,
68337
+ abilityCost: card.abilityCost,
68338
+ });
68339
+ player.offeringPlayedThisTurn = true;
68340
+ }
68341
+ else {
68342
+ this.spendOfferings(player, card.cost);
68343
+ const insertIndex = Math.min(slotIndex ?? player.battleZone.length, player.battleZone.length);
68344
+ player.battleZone.splice(insertIndex, 0, {
68345
+ instanceId: `p1_${next.revision + 1}_${player.battleZone.length}`,
68346
+ cardId: card.id,
68347
+ name: card.name,
68348
+ owner: 'P1',
68349
+ controller: 'P1',
68350
+ attack: card.attack,
68351
+ currentHp: card.life,
68352
+ maxHp: card.life,
68353
+ canAttack: false,
68354
+ });
68355
+ }
68356
+ next.revision++;
68357
+ next.log = [
68358
+ card.type === 'offering' ? `${card.name} queda lista como ofrenda.` : `${card.name} entra en batalla.`,
68359
+ ...next.log,
68360
+ ].slice(0, 4);
68361
+ return next;
68362
+ });
68363
+ this.selectedHandCard.set(null);
68364
+ this.draggingCardId.set(null);
68365
+ this.closePreview();
68366
+ }
68367
+ playPreviewCard() {
68368
+ const preview = this.selectedPreview();
68369
+ if (preview?.source !== 'hand' || !preview.cardId)
68370
+ return;
68371
+ const card = this.cardDefinition(preview.cardId);
68372
+ if (!this.canPlay(card))
68373
+ return;
68374
+ this.selectedHandCard.set(preview.cardId);
68375
+ if (card.type === 'character') {
68376
+ this.closePreview();
68377
+ return;
68378
+ }
68379
+ this.playSelectedCard();
68380
+ }
68381
+ handleOfferingPile(seat) {
68382
+ this.openOfferings(seat);
68383
+ }
68384
+ selectAttacker(card) {
68385
+ this.selectedHandCard.set(null);
68386
+ this.inspectCharacter(card);
68387
+ if (!this.isOwnTurn() || !card.canAttack)
68388
+ return;
68389
+ this.selectedAttacker.set(this.selectedAttacker()?.instanceId === card.instanceId ? null : card);
68390
+ }
68391
+ handleOpponentCharacter(card) {
68392
+ this.inspectCharacter(card);
68393
+ if (this.selectedAttacker()) {
68394
+ this.attackCharacter(card);
68395
+ }
68396
+ }
68397
+ handleOpponentLeader() {
68398
+ this.inspectLeader('P2');
68399
+ if (this.selectedAttacker() && !this.hasOpponentGuards()) {
68400
+ this.attackLeader();
68401
+ }
68402
+ }
68403
+ attackLeader() {
68404
+ const attacker = this.selectedAttacker();
68405
+ if (!attacker)
68406
+ return;
68407
+ if (this.hasOpponentGuards()) {
68408
+ this.selectedPreview.set({
68409
+ title: this.opponent().leaderName,
68410
+ eyebrow: this.t('christianityLeaderCard'),
68411
+ meta: `${this.opponent().leaderHp}/${this.opponent().leaderMaxHp}`,
68412
+ body: this.t('christianityLeaderProtected'),
68413
+ });
68414
+ return;
68415
+ }
68416
+ this.game.update(game => {
68417
+ const next = structuredClone(game);
68418
+ const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
68419
+ if (!liveAttacker || !liveAttacker.canAttack)
68420
+ return game;
68421
+ next.players.P2.leaderHp = Math.max(0, next.players.P2.leaderHp - liveAttacker.attack);
68422
+ liveAttacker.canAttack = false;
68423
+ next.revision++;
68424
+ next.log = [`${liveAttacker.name} ataca al lider rival.`, ...next.log].slice(0, 4);
68425
+ return next;
68426
+ });
68427
+ this.selectedAttacker.set(null);
68428
+ }
68429
+ attackCharacter(target) {
68430
+ const attacker = this.selectedAttacker();
68431
+ if (!attacker)
68432
+ return;
68433
+ this.game.update(game => {
68434
+ const next = structuredClone(game);
68435
+ const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
68436
+ const liveTarget = next.players.P2.battleZone.find(card => card.instanceId === target.instanceId);
68437
+ if (!liveAttacker || !liveTarget || !liveAttacker.canAttack)
68438
+ return game;
68439
+ liveTarget.currentHp -= liveAttacker.attack;
68440
+ liveAttacker.currentHp -= liveTarget.attack;
68441
+ liveAttacker.canAttack = false;
68442
+ this.cleanupDestroyed(next.players.P1, next);
68443
+ this.cleanupDestroyed(next.players.P2, next);
68444
+ next.revision++;
68445
+ next.log = [`${liveAttacker.name} combate contra ${liveTarget.name}.`, ...next.log].slice(0, 4);
68446
+ return next;
68447
+ });
68448
+ this.selectedAttacker.set(null);
68449
+ }
68450
+ endTurn() {
68451
+ this.selectedHandCard.set(null);
68452
+ this.selectedAttacker.set(null);
68453
+ this.selectedPreview.set(null);
68454
+ this.game.update(game => {
68455
+ const next = structuredClone(game);
68456
+ next.turnOwner = next.turnOwner === 'P1' ? 'P2' : 'P1';
68457
+ next.turnCount++;
68458
+ const current = next.players[next.turnOwner];
68459
+ current.offeringPlayedThisTurn = false;
68460
+ current.offerings = current.offerings.map(offering => ({ ...offering, ready: true }));
68461
+ current.battleZone = current.battleZone.map(card => ({ ...card, canAttack: true }));
68462
+ const drawnCard = next.sharedDeck.shift();
68463
+ if (drawnCard) {
68464
+ if (current.hand) {
68465
+ current.hand.push(drawnCard);
68466
+ }
68467
+ else {
68468
+ current.handCount = (current.handCount ?? 0) + 1;
68469
+ }
68470
+ }
68471
+ next.revision++;
68472
+ next.log = [
68473
+ drawnCard ? `${current.displayName} roba una carta.` : `El mazo esta vacio.`,
68474
+ `Turno de ${current.displayName}.`,
68475
+ ...next.log,
68476
+ ].slice(0, 4);
68477
+ return next;
68478
+ });
68479
+ }
68480
+ resetMock() {
68481
+ this.game.set(structuredClone(STARTING_GAME));
68482
+ this.selectedHandCard.set(null);
68483
+ this.selectedAttacker.set(null);
68484
+ this.selectedPreview.set(null);
68485
+ this.showHistory.set(false);
68486
+ this.offeringsSeat.set(null);
68487
+ }
68488
+ closePreview() {
68489
+ this.selectedPreview.set(null);
68490
+ this.resetPreviewTilt();
68491
+ }
68492
+ openOfferings(seat) {
68493
+ this.selectedPreview.set(null);
68494
+ this.showHistory.set(false);
68495
+ this.offeringsSeat.set(seat);
68496
+ }
68497
+ closeOfferings() {
68498
+ this.offeringsSeat.set(null);
68499
+ }
68500
+ tiltPreview(event) {
68501
+ const bounds = event.currentTarget.getBoundingClientRect();
68502
+ const x = (event.clientX - bounds.left) / bounds.width - 0.5;
68503
+ const y = (event.clientY - bounds.top) / bounds.height - 0.5;
68504
+ this.previewTilt.set({
68505
+ rotateX: 5 - y * 18,
68506
+ rotateY: -5 + x * 18,
68507
+ shiftX: x * 10,
68508
+ shiftY: y * 10,
68509
+ });
68510
+ }
68511
+ resetPreviewTilt() {
68512
+ this.previewTilt.set({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
68513
+ }
68514
+ cleanupDestroyed(player, game) {
68515
+ const destroyed = player.battleZone.filter(card => card.currentHp <= 0);
68516
+ if (!destroyed.length)
68517
+ return;
68518
+ game.historyZone.push(...destroyed.map(card => card.cardId));
68519
+ player.battleZone = player.battleZone.filter(card => card.currentHp > 0);
68520
+ }
68521
+ inspectLeader(seat) {
68522
+ const player = this.game().players[seat];
68523
+ this.selectedPreview.set({
68524
+ title: player.leaderName,
68525
+ eyebrow: this.t('christianityLeaderCard'),
68526
+ meta: `${player.leaderHp}/${player.leaderMaxHp}`,
68527
+ body: seat === 'P2' && this.hasOpponentGuards() ? this.t('christianityLeaderProtected') : this.t('christianityLeaderBody'),
68528
+ });
68529
+ }
68530
+ inspectOffering(offering) {
68531
+ this.selectedPreview.set({
68532
+ title: offering.name,
68533
+ eyebrow: this.t('christianityOfferingCard'),
68534
+ meta: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
68535
+ body: offering.abilityText || this.t('christianityOfferingBody'),
68536
+ });
68537
+ }
68538
+ canUseOfferingAbility(offering, seat) {
68539
+ if (seat !== 'P1' || !this.isOwnTurn())
68540
+ return false;
68541
+ if (!offering.ready || !offering.abilityName)
68542
+ return false;
68543
+ return this.readyOfferings(this.game().players[seat]) >= (offering.abilityCost ?? 0);
68544
+ }
68545
+ useOfferingAbility(offering, seat) {
68546
+ if (!this.canUseOfferingAbility(offering, seat))
68547
+ return;
68548
+ this.game.update(game => {
68549
+ const next = structuredClone(game);
68550
+ const player = next.players[seat];
68551
+ const liveOffering = player.offerings.find(card => card.instanceId === offering.instanceId);
68552
+ if (!liveOffering || !liveOffering.ready)
68553
+ return game;
68554
+ const offeringId = liveOffering.instanceId;
68555
+ this.spendOfferings(player, liveOffering.abilityCost ?? 0);
68556
+ player.offerings = player.offerings.map(card => (card.instanceId === offeringId ? { ...card, ready: false } : card));
68557
+ player.leaderHp = Math.max(0, player.leaderHp - 1);
68558
+ next.revision++;
68559
+ next.log = [`${liveOffering.name}: ${liveOffering.abilityName}.`, ...next.log].slice(0, 4);
68560
+ return next;
68561
+ });
68562
+ }
68563
+ inspectDeck() {
68564
+ this.selectedPreview.set({
68565
+ title: this.t('christianityDeck'),
68566
+ eyebrow: this.t('christianitySharedZone'),
68567
+ meta: `${this.game().sharedDeck.length}`,
68568
+ body: this.t('christianityDeckBody'),
68569
+ });
68570
+ }
68571
+ inspectHandCard(cardId, fromHand = false) {
68572
+ const card = this.cardDefinition(cardId);
68573
+ if (fromHand) {
68574
+ this.selectedAttacker.set(null);
68575
+ this.selectedHandCard.set(cardId);
68576
+ }
68577
+ this.selectedPreview.set({
68578
+ title: card.name,
68579
+ eyebrow: card.type === 'offering' ? this.t('christianityOfferingCard') : this.t('christianityCharacterCard'),
68580
+ meta: card.type === 'offering' ? `+${card.life}` : `${this.t('christianityCost')} ${card.cost} · ${card.attack}/${card.life}`,
68581
+ body: card.type === 'offering' ? this.t('christianityOfferingBody') : this.t('christianityCharacterBody'),
68582
+ cardId,
68583
+ source: fromHand ? 'hand' : 'pile',
68584
+ });
68585
+ }
68586
+ inspectHistoryCard(cardId) {
68587
+ this.showHistory.set(false);
68588
+ this.inspectHandCard(cardId);
68589
+ }
68590
+ inspectCharacter(card) {
68591
+ this.selectedPreview.set({
68592
+ title: card.name,
68593
+ eyebrow: this.t('christianityCharacterCard'),
68594
+ meta: `${card.attack}/${card.currentHp}`,
68595
+ body: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
68596
+ });
68597
+ }
68598
+ spendOfferings(player, cost) {
68599
+ let remaining = cost;
68600
+ player.offerings = player.offerings.map(offering => {
68601
+ if (remaining <= 0 || !offering.ready)
68602
+ return offering;
68603
+ remaining -= offering.value;
68604
+ return { ...offering, ready: false };
68605
+ });
68606
+ }
68607
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
68608
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChristianityGameComponent, isStandalone: true, selector: "val-christianity-game", ngImport: i0, template: `
68609
+ <main class="christianity-shell">
68610
+ <section class="christianity-header">
68611
+ <div>
68612
+ <p>{{ t('christianityEyebrow') }}</p>
68613
+ <h1>{{ t('christianityTitle') }}</h1>
68614
+ </div>
68615
+ <div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
68616
+ <span>{{ t('christianityTurn') }}</span>
68617
+ <strong>{{ currentPlayer().displayName }}</strong>
68618
+ </div>
68619
+ </section>
68620
+
68621
+ <section class="christianity-match-strip" [attr.aria-label]="t('christianityMatchScore')">
68622
+ <article class="christianity-match-player">
68623
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
68624
+ <div>
68625
+ <strong>{{ player().displayName }}</strong>
68626
+ <small>{{ player().leaderName }} · {{ player().leaderHp }}/{{ player().leaderMaxHp }}</small>
68627
+ </div>
68628
+ </article>
68629
+ <div class="christianity-scoreboard">
68630
+ <span>{{ t('christianityMatch') }}</span>
68631
+ <strong>{{ game().matchScore.P1 }}-{{ game().matchScore.P2 }}</strong>
68632
+ </div>
68633
+ <article class="christianity-match-player christianity-match-player--opponent">
68634
+ <span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
68635
+ <div>
68636
+ <strong>{{ opponent().displayName }}</strong>
68637
+ <small>{{ opponent().leaderName }} · {{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</small>
68638
+ </div>
68639
+ </article>
68640
+ </section>
68641
+
68642
+ <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
68643
+ <div class="christianity-hand-meter christianity-hand-meter--opponent">
68644
+ <span>{{ t('christianityHand') }}</span>
68645
+ <strong>{{ opponentHandCount() }}</strong>
68646
+ </div>
68647
+ <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
68648
+ @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
68649
+ <button
68650
+ type="button"
68651
+ class="christianity-card-preview-card christianity-card-preview-card--back"
68652
+ valLightRipple
68653
+ [style.transform]="fanTransform($index, opponentHandCount(), true)"
68654
+ [attr.aria-label]="t('christianityHiddenCard')"
68655
+ ></button>
68656
+ }
68657
+ </section>
68658
+ </section>
68659
+
68660
+ <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
68661
+ <section class="christianity-player-side christianity-player-side--opponent">
68662
+ <section class="christianity-player-rack christianity-player-rack--opponent">
68663
+ <div class="christianity-offerings-zone">
68664
+ <button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
68665
+ <i aria-hidden="true"></i>
68666
+ <i aria-hidden="true"></i>
68667
+ <i aria-hidden="true"></i>
68668
+ <span>{{ t('christianityOfferings') }}</span>
68669
+ <strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
68670
+ </button>
68671
+ </div>
68672
+ <button type="button" class="christianity-leader-card" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
68673
+ <span>{{ opponent().leaderName }}</span>
68674
+ <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
68675
+ </button>
68676
+ <span class="christianity-rack-spacer" aria-hidden="true"></span>
68677
+ </section>
68678
+
68679
+ <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
68680
+ @for (slot of battleSlots('P2'); track slot.trackId) {
68681
+ @if (slot.card) {
68682
+ <button
68683
+ type="button"
68684
+ class="christianity-card-preview-card christianity-card-preview-card--battle"
68685
+ valLightRipple
68686
+ [class.is-target]="selectedAttacker()"
68687
+ (click)="handleOpponentCharacter(slot.card)"
68688
+ >
68689
+ <span>{{ slot.card.name }}</span>
68690
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68691
+ </button>
68692
+ } @else {
68693
+ <span class="christianity-slot"></span>
68694
+ }
68695
+ }
68696
+ </section>
68697
+ </section>
68698
+
68699
+ <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
68700
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="showHistory.set(true)">
68701
+ <i aria-hidden="true"></i>
68702
+ <i aria-hidden="true"></i>
68703
+ <i aria-hidden="true"></i>
68704
+ <span>{{ t('christianityHistory') }}</span>
68705
+ <strong>{{ game().historyZone.length }}</strong>
68706
+ </button>
68707
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
68708
+ <i aria-hidden="true"></i>
68709
+ <i aria-hidden="true"></i>
68710
+ <i aria-hidden="true"></i>
68711
+ <span>{{ t('christianityDeck') }}</span>
68712
+ <strong>{{ game().sharedDeck.length }}</strong>
68713
+ </button>
68714
+ <div class="christianity-zone-card">
68715
+ <span>{{ t('christianityPlace') }}</span>
68716
+ <strong>{{ t('christianityEmpty') }}</strong>
68717
+ </div>
68718
+ </section>
68719
+
68720
+ <section class="christianity-player-side">
68721
+ <section class="christianity-battle-zone" [class.is-placing-card]="canPlaceSelectedCharacter() || isDraggingCharacter()" [attr.aria-label]="t('christianityYourBattle')">
68722
+ @for (slot of battleSlots('P1'); track slot.trackId) {
68723
+ @if (slot.card) {
68724
+ <button
68725
+ type="button"
68726
+ class="christianity-card-preview-card christianity-card-preview-card--battle"
68727
+ valLightRipple
68728
+ [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
68729
+ [class.is-exhausted]="!slot.card.canAttack"
68730
+ (click)="selectAttacker(slot.card)"
68731
+ >
68732
+ <span>{{ slot.card.name }}</span>
68733
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68734
+ </button>
68735
+ } @else {
68736
+ <button
68737
+ type="button"
68738
+ class="christianity-slot"
68739
+ cdkDropList
68740
+ [id]="battleSlotDropId($index)"
68741
+ [cdkDropListData]="$index"
68742
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
68743
+ [cdkDropListEnterPredicate]="canDropOnBattleSlot"
68744
+ [class.christianity-slot--play-target]="canPlaceSelectedCharacter() || isDraggingCharacter()"
68745
+ valLightRipple
68746
+ (cdkDropListDropped)="dropOnBattleSlot($event, $index)"
68747
+ (click)="playSelectedCard($index)"
68748
+ >
68749
+ @if (canPlaceSelectedCharacter() || isDraggingCharacter()) {
68750
+ <span>{{ t('christianityPlayHere') }}</span>
68751
+ }
68752
+ </button>
68753
+ }
68754
+ }
68755
+ </section>
68756
+
68757
+ <section class="christianity-player-rack">
68758
+ <div class="christianity-offerings-zone">
68759
+ <button
68760
+ type="button"
68761
+ class="christianity-offering-pile"
68762
+ cdkDropList
68763
+ id="christianity-offerings-drop"
68764
+ valLightRipple
68765
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
68766
+ [class.is-play-target]="canPlaceSelectedOffering() || isDraggingOffering()"
68767
+ [cdkDropListEnterPredicate]="canDropOnOfferings"
68768
+ (cdkDropListDropped)="dropOnOfferings($event)"
68769
+ (click)="handleOfferingPile('P1')"
68770
+ >
68771
+ <i aria-hidden="true"></i>
68772
+ <i aria-hidden="true"></i>
68773
+ <i aria-hidden="true"></i>
68774
+ <span>{{ t('christianityOfferings') }}</span>
68775
+ <strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
68776
+ </button>
68777
+ </div>
68778
+ <button type="button" class="christianity-leader-card" valLightRipple (click)="inspectLeader('P1')">
68779
+ <span>{{ player().leaderName }}</span>
68780
+ <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
68781
+ </button>
68782
+ <div class="christianity-player-command">
68783
+ <div class="christianity-player-badge">
68784
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
68785
+ <strong>{{ player().displayName }}</strong>
68786
+ </div>
68787
+ <button
68788
+ type="button"
68789
+ class="christianity-end-turn"
68790
+ (click)="endTurn()"
68791
+ >
68792
+ {{ t('christianityEndTurn') }}
68793
+ </button>
68794
+ </div>
68795
+ </section>
68796
+ </section>
68797
+ </section>
68798
+
68799
+ <section class="christianity-hand-shelf">
68800
+ <div class="christianity-hand-meter">
68801
+ <span>{{ t('christianityHand') }}</span>
68802
+ <strong>{{ player().hand?.length ?? 0 }}</strong>
68803
+ </div>
68804
+ <section
68805
+ class="christianity-hand-fan"
68806
+ cdkDropList
68807
+ id="christianity-hand-source"
68808
+ [cdkDropListConnectedTo]="dropTargetIds()"
68809
+ [attr.aria-label]="t('christianityYourHand')"
68810
+ (pointerleave)="clearHoveredHandIndex()"
68811
+ >
68812
+ @for (cardId of player().hand ?? []; track cardId + $index) {
68813
+ @let card = cardDefinition(cardId);
68814
+ <div
68815
+ class="christianity-hand-card-wrap"
68816
+ [class.is-selected]="selectedHandCard() === cardId"
68817
+ [class.is-dragging]="draggingCardId() === cardId"
68818
+ [style.z-index]="handCardZIndex($index)"
68819
+ [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
68820
+ (pointerenter)="setHoveredHandIndex($index)"
68821
+ (pointerdown)="setHoveredHandIndex($index)"
68822
+ (pointerup)="releaseHoveredHand($event)"
68823
+ >
68824
+ <button
68825
+ type="button"
68826
+ class="christianity-card-preview-card christianity-card-preview-card--hand"
68827
+ cdkDrag
68828
+ valLightRipple
68829
+ [cdkDragData]="cardId"
68830
+ [cdkDragDisabled]="!canPlay(card)"
68831
+ [class.is-selected]="selectedHandCard() === cardId"
68832
+ [class.is-disabled]="!canPlay(card)"
68833
+ (cdkDragStarted)="startDraggingCard(cardId)"
68834
+ (cdkDragEnded)="endDraggingCard()"
68835
+ (click)="selectHandCard(cardId)"
68836
+ >
68837
+ <small>
68838
+ @if (card.type === 'offering') {
68839
+ {{ t('christianityOfferingCard') }}
68840
+ } @else {
68841
+ {{ t('christianityCost') }} {{ card.cost }}
68842
+ }
68843
+ </small>
68844
+ <span>{{ card.name }}</span>
68845
+ <strong>
68846
+ @if (card.type === 'offering') {
68847
+ +{{ card.life }}
68848
+ } @else {
68849
+ {{ card.attack }} / {{ card.life }}
68850
+ }
68851
+ </strong>
68852
+ </button>
68853
+ <button
68854
+ type="button"
68855
+ class="christianity-card-eye"
68856
+ [attr.aria-label]="t('christianityPreviewCard')"
68857
+ (click)="inspectHandCard(cardId, true); $event.stopPropagation()"
68858
+ ></button>
68859
+ </div>
68860
+ }
68861
+ </section>
68862
+ </section>
68863
+
68864
+ @if (selectedPreview()) {
68865
+ <button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
68866
+ <aside
68867
+ class="christianity-floating-card-shell"
68868
+ aria-live="polite"
68869
+ >
68870
+ <button type="button" class="christianity-floating-card-close" (click)="closePreview()">
68871
+ {{ t('close') }}
68872
+ </button>
68873
+ <div
68874
+ class="christianity-floating-card"
68875
+ [style.--preview-rotate-x]="previewTilt().rotateX + 'deg'"
68876
+ [style.--preview-rotate-y]="previewTilt().rotateY + 'deg'"
68877
+ [style.--preview-shift-x]="previewTilt().shiftX + 'px'"
68878
+ [style.--preview-shift-y]="previewTilt().shiftY + 'px'"
68879
+ (pointermove)="tiltPreview($event)"
68880
+ (pointerleave)="resetPreviewTilt()"
68881
+ >
68882
+ <small>{{ selectedPreview()?.eyebrow }}</small>
68883
+ <strong>{{ selectedPreview()?.title }}</strong>
68884
+ <span>{{ selectedPreview()?.meta }}</span>
68885
+ <p>{{ selectedPreview()?.body }}</p>
68886
+ @if (selectedPreview()?.source === 'hand') {
68887
+ <div class="christianity-floating-card-actions">
68888
+ <button type="button" [disabled]="previewActionDisabled()" (click)="playPreviewCard()">
68889
+ {{ selectedActionLabel() }}
68890
+ </button>
68891
+ </div>
68892
+ }
68893
+ </div>
68894
+ </aside>
68895
+ }
68896
+
68897
+ <section class="christianity-actions" aria-live="polite">
68898
+ <p>{{ statusText() }}</p>
68899
+ <div>
68900
+ <button type="button" [disabled]="selectedActionDisabled()" (click)="playSelectedCard()">
68901
+ {{ selectedActionLabel() }}
68902
+ </button>
68903
+ <button type="button" (click)="resetMock()">
68904
+ {{ t('christianityReset') }}
68905
+ </button>
68906
+ </div>
68907
+ </section>
68908
+
68909
+ @if (showHistory()) {
68910
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="showHistory.set(false)"></button>
68911
+ <section class="christianity-history-drawer">
68912
+ <header>
68913
+ <h2>{{ t('christianityHistory') }}</h2>
68914
+ <div class="christianity-dialog-actions">
68915
+ <span>{{ game().historyZone.length }}</span>
68916
+ <button type="button" class="christianity-dialog-close" (click)="showHistory.set(false)">
68917
+ {{ t('close') }}
68918
+ </button>
68919
+ </div>
68920
+ </header>
68921
+ @if (game().historyZone.length) {
68922
+ <div class="christianity-history-grid">
68923
+ @for (cardId of game().historyZone; track cardId + $index) {
68924
+ @let card = cardDefinition(cardId);
68925
+ <button type="button" class="christianity-card-preview-card" valLightRipple (click)="inspectHistoryCard(cardId)">
68926
+ <small>{{ card.type === 'offering' ? t('christianityOfferingCard') : t('christianityCharacterCard') }}</small>
68927
+ <span>{{ card.name }}</span>
68928
+ <strong>
68929
+ @if (card.type === 'offering') {
68930
+ +{{ card.life }}
68931
+ } @else {
68932
+ {{ card.attack }} / {{ card.life }}
68933
+ }
68934
+ </strong>
68935
+ </button>
68936
+ }
68937
+ </div>
68938
+ } @else {
68939
+ <p>{{ t('christianityHistoryEmpty') }}</p>
68940
+ }
68941
+ </section>
68942
+ }
68943
+
68944
+ @if (offeringsSeat()) {
68945
+ @let offeringPlayer = game().players[offeringsSeat()!];
68946
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseOfferings')" (click)="closeOfferings()"></button>
68947
+ <section class="christianity-history-drawer christianity-offerings-drawer">
68948
+ <header>
68949
+ <h2>{{ t('christianityOfferings') }}</h2>
68950
+ <div class="christianity-dialog-actions">
68951
+ <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
68952
+ <button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
68953
+ {{ t('close') }}
68954
+ </button>
68955
+ </div>
68956
+ </header>
68957
+ <div class="christianity-offering-list">
68958
+ @for (offering of offeringPlayer.offerings; track offering.instanceId) {
68959
+ <article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
68960
+ <button type="button" class="christianity-offering-card" valLightRipple (click)="inspectOffering(offering)">
68961
+ <small>{{ t('christianityOfferingCard') }}</small>
68962
+ <span>{{ offering.name }}</span>
68963
+ <strong>+{{ offering.value }}</strong>
68964
+ @if (offering.abilityName) {
68965
+ <p>{{ offering.abilityName }}</p>
68966
+ }
68967
+ </button>
68968
+ <div>
68969
+ <strong>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</strong>
68970
+ <p>{{ offering.abilityText || t('christianityOfferingNoAbility') }}</p>
68971
+ @if (offering.abilityName) {
68972
+ <button
68973
+ type="button"
68974
+ [disabled]="!canUseOfferingAbility(offering, offeringsSeat()!)"
68975
+ (click)="useOfferingAbility(offering, offeringsSeat()!)"
68976
+ >
68977
+ {{ t('christianityUseAbility') }}
68978
+ </button>
68979
+ }
68980
+ </div>
68981
+ </article>
68982
+ }
68983
+ </div>
68984
+ </section>
68985
+ }
68986
+ </main>
68987
+ `, isInline: true, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.65rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb;overflow:visible}.christianity-header,.christianity-match-strip,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-match-player strong,.christianity-match-player small,.christianity-scoreboard span,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-match-strip{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);padding:.45rem;border:1px solid rgba(36,48,68,.1);border-radius:.75rem;background:#fff}.christianity-match-player{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.5rem;align-items:center;min-width:0}.christianity-match-player--opponent{direction:rtl}.christianity-match-player--opponent div{direction:ltr;text-align:right}.christianity-match-player div{display:grid;min-width:0}.christianity-match-player strong,.christianity-match-player small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-match-player small,.christianity-scoreboard span{color:#1f293394;font-size:.72rem}.christianity-scoreboard{display:grid;justify-items:center;min-width:4.2rem;padding:0 .55rem;border-right:1px solid rgba(36,48,68,.1);border-left:1px solid rgba(36,48,68,.1)}.christianity-scoreboard strong{font-size:1.2rem;line-height:1}.christianity-table{display:grid;gap:.45rem;padding:.45rem .35rem;border-radius:.75rem;background:#dceafb;overflow:visible}.christianity-player-side{display:grid;gap:.35rem;padding:.35rem .3rem;border-radius:.7rem;background:#ffffff57;grid-template-rows:minmax(7rem,1fr) auto;min-height:13.75rem}.christianity-player-side--opponent{grid-template-rows:auto minmax(7rem,1fr)}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(4,minmax(4.2rem,1fr));gap:.5rem;align-items:center;min-height:clamp(7.8rem,25vw,9.6rem);padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2;transition:background .16s ease,box-shadow .16s ease}.christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#eff6fff0,#ffffffd1),#ffffffc2;box-shadow:inset 0 0 0 .14rem #2563eb29,0 .8rem 1.7rem #2563eb1f}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{display:grid;place-items:center;min-height:clamp(6.8rem,21vw,8.2rem);border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73;color:inherit;font:inherit}.christianity-slot--play-target{position:relative;border-color:#2563eb8c;background:#dbeafec7;color:#1d4ed8;font-weight:800;overflow:hidden;box-shadow:inset 0 0 0 .12rem #60a5fa33,0 .7rem 1.25rem #2563eb29;animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-slot--play-target:before{content:\"\";position:absolute;inset:.35rem;border:1px solid rgba(37,99,235,.2);border-radius:.4rem;background:linear-gradient(135deg,rgba(37,99,235,.08),transparent 46%),radial-gradient(circle at 50% 42%,rgba(96,165,250,.22),transparent 58%)}.christianity-slot--play-target span{position:relative;z-index:2;padding:.16rem .44rem;border-radius:999px;background:#ffffffc7;font-size:.78rem}@keyframes christianity-target-pulse{0%,to{box-shadow:inset 0 0 0 .12rem #60a5fa33,0 .7rem 1.25rem #2563eb29}50%{box-shadow:inset 0 0 0 .16rem #60a5fa57,0 .9rem 1.65rem #2563eb3d}}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}.christianity-hand-fan{position:relative;display:flex;justify-content:center;min-height:10.8rem;padding:.25rem .25rem 2.1rem;isolation:isolate;overflow:visible}.christianity-hand-shelf{position:relative;display:grid;z-index:12;min-height:12rem;margin-top:-1.15rem;padding:1.45rem .25rem 1rem;overflow:visible}.christianity-hand-shelf--opponent{z-index:8;min-height:6.85rem;margin-top:0;margin-bottom:0;padding:.45rem .25rem .85rem}.christianity-hand-fan--opponent{min-height:5.9rem;padding-bottom:.75rem;align-items:start}.christianity-card-preview-card,.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile,.christianity-end-turn{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card-preview-card{display:grid;align-content:space-between;width:clamp(4.9rem,17vw,7.1rem);min-height:clamp(6.6rem,22vw,8.8rem);padding:.48rem;text-align:left;transform-origin:50% 115%;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;box-shadow:0 .5rem 1.25rem #2430441a}.christianity-hand-card-wrap{position:relative;display:grid;justify-items:center;margin-inline:-.42rem;padding-bottom:2rem;transform-origin:50% 115%;transition:transform .16s ease,filter .16s ease}.christianity-hand-card-wrap:hover,.christianity-hand-card-wrap.is-selected,.christianity-hand-card-wrap.is-dragging{z-index:3}.christianity-hand-card-wrap:hover .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-selected .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-dragging .christianity-card-preview-card--hand{border-color:#2563eb;box-shadow:0 1rem 2rem #2563eb2e}.christianity-card-preview-card--hand{touch-action:none}.christianity-card-preview-card--hand.cdk-drag-disabled{cursor:not-allowed}.christianity-card-preview-card.cdk-drag-preview{border:1px solid rgba(37,99,235,.48);box-shadow:0 0 0 .16rem #bfdbfe6b,0 1.5rem 3rem #102a4347;transform:rotate(2deg)}.christianity-card-preview-card.cdk-drag-placeholder{opacity:.22}.christianity-slot.cdk-drop-list-dragging,.christianity-offering-pile.cdk-drop-list-dragging{border-color:#2563ebb8}.christianity-slot.cdk-drop-list-receiving,.christianity-offering-pile.cdk-drop-list-receiving{box-shadow:inset 0 0 0 .18rem #60a5fa57,0 1rem 1.9rem #2563eb38}.christianity-card-eye{position:absolute;right:50%;bottom:.38rem;width:2rem;height:1.45rem;border:1px solid rgba(37,99,235,.24);border-radius:999px;background:#fffffff0;box-shadow:0 .55rem 1.1rem #102a4324;opacity:0;transform:translate(50%,-.2rem) scale(.92);transition:opacity .14s ease,transform .14s ease,border-color .14s ease}.christianity-card-eye:before{content:\"\";position:absolute;top:50%;left:50%;width:1.05rem;height:.62rem;border:.12rem solid #2563eb;border-radius:999px 999px .72rem .72rem;transform:translate(-50%,-50%)}.christianity-card-eye:after{content:\"\";position:absolute;top:50%;left:50%;width:.28rem;height:.28rem;border-radius:999px;background:#2563eb;transform:translate(-50%,-50%)}.christianity-hand-card-wrap:hover .christianity-card-eye,.christianity-hand-card-wrap.is-selected .christianity-card-eye,.christianity-card-eye:focus-visible{opacity:1;transform:translate(50%) scale(1)}.christianity-offering-pile.is-play-target{border-color:#2563eb94;background:linear-gradient(180deg,#eff6fff5,#fffffff0),radial-gradient(circle at 82% 14%,rgba(250,204,21,.28) 0 .7rem,transparent .72rem);box-shadow:inset 0 0 0 .12rem #60a5fa3d,0 .8rem 1.55rem #2563eb33;animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-card-preview-card--back{width:clamp(4rem,14vw,5.7rem);min-height:clamp(5rem,16vw,6.6rem);box-shadow:0 .8rem 1.55rem #24304424;transform-origin:50% -18%;background:linear-gradient(135deg,#102a431f,#102a4305),repeating-linear-gradient(45deg,#e2e8f0 0 .35rem,#f8fafc .35rem .7rem)}.christianity-card-preview-card--battle{justify-self:center;width:auto;min-width:clamp(4.8rem,15vw,6.6rem);height:clamp(6.8rem,21vw,8.4rem);min-height:0;aspect-ratio:5 / 7;margin-inline:0}.christianity-card-preview-card span,.christianity-card-mini span,.christianity-offering-pile span,.christianity-offering-card span,.christianity-leader-card span,.christianity-zone-card span,.christianity-zone-pile span{position:relative;z-index:2;font-weight:700}.christianity-card-preview-card strong,.christianity-card-mini strong,.christianity-offering-pile strong,.christianity-offering-card strong,.christianity-leader-card strong,.christianity-zone-card strong,.christianity-zone-pile strong{position:relative;z-index:3;justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{display:grid;grid-template-columns:minmax(5.9rem,7rem) minmax(5rem,1fr) minmax(4.2rem,7rem);gap:.45rem;align-items:end;justify-items:stretch}.christianity-player-rack--opponent{align-items:start}.christianity-hand-meter{position:absolute;top:0;right:.35rem;z-index:4;display:inline-grid;grid-auto-flow:column;gap:.25rem;align-items:center;min-height:1.7rem;padding:.18rem .46rem;border:1px solid rgba(36,48,68,.12);border-radius:999px;background:#ffffffe6;box-shadow:0 .35rem .8rem #102a4314}.christianity-hand-meter--opponent{top:.15rem}.christianity-hand-meter span{color:#1f293394;font-size:.68rem}.christianity-hand-meter strong{font-size:.86rem}.christianity-player-badge,.christianity-player-command{display:grid;gap:.35rem;justify-items:center;min-width:0}.christianity-player-badge{align-content:start;color:#1f2933c2;font-size:.74rem}.christianity-player-badge--opponent{justify-self:center;grid-auto-flow:column;align-items:center;justify-content:center}.christianity-player-badge strong{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-avatar{display:grid;place-items:center;width:1.85rem;height:1.85rem;border-radius:999px;color:#fff;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .9rem #102a4329}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-start;justify-self:start;width:100%}.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-mini{width:3.5rem}.christianity-offering-pile{position:relative;isolation:isolate;overflow:hidden;justify-self:start;width:min(100%,5.9rem);min-height:7.1rem;padding:.95rem .52rem .6rem;background:linear-gradient(180deg,#fff,#f8fafc),linear-gradient(135deg,rgba(250,204,21,.18),transparent 42%)}.christianity-offering-pile i{position:absolute;inset:auto auto 1.05rem .72rem;z-index:-1;width:2.55rem;height:3.55rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:linear-gradient(180deg,#ffffffeb,#f1f5f9eb),radial-gradient(circle at 78% 18%,#facc15 0 .38rem,transparent .4rem);box-shadow:0 .35rem .85rem #102a431a;transform:rotate(-5deg)}.christianity-offering-pile i:nth-child(2){transform:translate(.28rem,.08rem) rotate(3deg)}.christianity-offering-pile i:nth-child(3){transform:translate(.55rem,.18rem) rotate(-1deg)}.christianity-leader-card{align-self:center;justify-self:center;width:clamp(4.75rem,17vw,6rem);min-height:clamp(6.6rem,22vw,8.4rem)}.christianity-rack-spacer{display:block;min-height:1px}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(4rem,1fr))}.christianity-shared-zone{display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch}.christianity-zone-card,.christianity-zone-pile{min-height:6.45rem;padding:.7rem .52rem .55rem}.christianity-zone-pile{position:relative;isolation:isolate;overflow:hidden;box-shadow:inset 0 0 0 999px #ffffff1f}.christianity-zone-pile i{position:absolute;inset:auto .72rem 1.02rem auto;z-index:-1;width:2.7rem;height:3.7rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:#f8fafc;box-shadow:0 .35rem .85rem #102a431c;transform:rotate(4deg)}.christianity-zone-pile i:nth-child(2){transform:translate(-.28rem,.12rem) rotate(-3deg)}.christianity-zone-pile i:nth-child(3){background:linear-gradient(135deg,#102a4329,#102a4308),repeating-linear-gradient(45deg,#dbeafe 0 .33rem,#fff .33rem .66rem);transform:translate(-.54rem,.24rem) rotate(2deg)}.christianity-floating-card-shell{position:fixed;top:50%;left:50%;z-index:61;width:min(28rem,calc(100vw - 1.25rem));transform:translate(-50%,-50%)}.christianity-floating-card{display:grid;gap:.45rem;width:100%;min-height:min(31rem,calc(100vh - 3.5rem));padding:1.15rem;border:1px solid rgba(36,48,68,.18);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 20% 0%,rgba(37,99,235,.12),transparent 45%);box-shadow:0 0 0 .18rem #bfdbfe6b,0 0 2.2rem #60a5fa57,0 2.4rem 5rem #102a4357,inset 0 0 0 .35rem #ffffff8c;touch-action:none;transform:translate(var(--preview-shift-x, 0px),var(--preview-shift-y, 0px)) perspective(48rem) rotateX(var(--preview-rotate-x, 5deg)) rotateY(var(--preview-rotate-y, -5deg));transition:transform 90ms ease-out}.christianity-floating-card-close{position:absolute;top:-2.6rem;right:0;z-index:62;min-height:2rem;padding:0 .6rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#ffffffe6;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .45rem 1rem #102a431a}.christianity-preview-backdrop,.christianity-history-backdrop{position:fixed;inset:0;border:0;border-radius:0;background:#0f172a75}.christianity-preview-backdrop{z-index:60}.christianity-floating-card small,.christianity-floating-card span{color:#1f2933a3}.christianity-floating-card strong{font-size:clamp(1.55rem,8vw,2.35rem);line-height:1.05}.christianity-floating-card p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-floating-card-actions{display:flex;justify-content:flex-end;margin-top:.35rem}.christianity-floating-card-actions button{min-height:2.35rem;padding:0 .9rem;border:0;border-radius:999px;background:#102a43;color:#fff;font:inherit;font-size:.9rem;font-weight:800;box-shadow:0 .65rem 1.3rem #102a432e}.christianity-floating-card-actions button:disabled{cursor:not-allowed;opacity:.45}@media (min-width: 52rem){.christianity-floating-card-shell{width:min(34rem,calc(100vw - 3rem))}.christianity-floating-card{min-height:min(43rem,calc(100vh - 4rem));padding:1.45rem}}.christianity-history-backdrop{z-index:40}.christianity-history-drawer{position:fixed;right:auto;bottom:max(.5rem,env(safe-area-inset-bottom));left:50%;z-index:41;display:grid;grid-template-rows:auto minmax(0,1fr);gap:.75rem;width:min(calc(100vw - 1rem),44rem);min-height:min(18rem,calc(100dvh - 1rem));max-height:min(32rem,calc(100dvh - 2rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347;transform:translate(-50%)}.christianity-history-drawer header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-history-drawer h2,.christianity-history-drawer p{margin:0}.christianity-history-drawer header span{display:grid;place-items:center;min-width:1.85rem;height:1.85rem;border-radius:999px;background:#edf2f7;font-weight:800}.christianity-dialog-actions{display:flex;align-items:center;gap:.45rem}.christianity-dialog-close{min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#fff;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .8rem #102a4314}.christianity-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .25rem}.christianity-history-grid::-webkit-scrollbar,.christianity-offering-list::-webkit-scrollbar{width:.65rem}.christianity-history-grid::-webkit-scrollbar-track,.christianity-offering-list::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-history-grid::-webkit-scrollbar-thumb,.christianity-offering-list::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offerings-drawer{width:min(calc(100vw - 1rem),48rem);min-height:min(20rem,calc(100dvh - 1rem));max-height:min(34rem,calc(100dvh - 2rem))}.christianity-offering-list{display:grid;gap:.6rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem}.christianity-offering-row{display:grid;grid-template-columns:minmax(4.9rem,6.2rem) minmax(0,1fr);gap:.65rem;align-items:stretch;padding:.45rem;border:1px solid rgba(36,48,68,.12);border-radius:.65rem;background:#fff}.christianity-offering-row.is-exhausted{opacity:.68}.christianity-offering-card{min-height:7.4rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 82% 14%,#facc15 0 .48rem,transparent .5rem);box-shadow:0 .45rem 1rem #102a431a}.christianity-offering-card small{color:#1f293394;font-size:.66rem;text-transform:uppercase}.christianity-offering-card p,.christianity-offering-row p{margin:0}.christianity-offering-card p{align-self:end;color:#1f2933a3;font-size:.72rem;line-height:1.2}.christianity-offering-row>div{display:grid;gap:.35rem;align-content:center;min-width:0}.christianity-offering-row>div p{color:#1f2933b8;font-size:.85rem;line-height:1.3}.christianity-offering-row>div button{justify-self:start;min-height:2.2rem;padding:0 .7rem;border:1px solid rgba(16,42,67,.16);border-radius:.5rem;background:#102a43;color:#fff;font:inherit;font-weight:800}.christianity-offering-row>div button:disabled{background:#e2e8f0;color:#1f293394}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-match-strip{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:.35rem;padding:.35rem}.christianity-match-player{gap:.35rem}.christianity-match-player small{display:none}.christianity-scoreboard{min-width:3.65rem;padding:0 .35rem}.christianity-scoreboard strong{font-size:1.05rem}.christianity-table{gap:.35rem}.christianity-player-side{padding:.3rem .25rem}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(3.35rem,1fr));overflow-x:auto}.christianity-hand-fan{min-height:10.55rem;padding-bottom:2rem;overflow:visible}.christianity-hand-shelf{min-height:11.75rem;margin-top:-1rem;padding-top:1.35rem;padding-bottom:.9rem}.christianity-hand-shelf--opponent{min-height:6.65rem;margin-top:0;margin-bottom:0;padding-top:.4rem;padding-bottom:.85rem}.christianity-player-rack{grid-template-columns:minmax(4.7rem,5.9rem) minmax(4.8rem,1fr) minmax(3.7rem,5rem)}.christianity-shared-zone{grid-template-columns:repeat(3,minmax(3.7rem,1fr))}.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem}.christianity-offering-pile{min-height:6.85rem;padding:.88rem .46rem .55rem}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);min-height:clamp(5.8rem,26vw,7.4rem)}.christianity-leader-card{width:clamp(4.55rem,20vw,5.7rem);min-height:clamp(6.15rem,27vw,7.6rem)}.christianity-offering-row{grid-template-columns:minmax(4.5rem,5.5rem) minmax(0,1fr);gap:.5rem}.christianity-hand-fan--opponent{min-height:5.75rem;padding-bottom:.7rem}}\n"], dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: LightRippleDirective, selector: "[valLightRipple]" }] }); }
68988
+ }
68989
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, decorators: [{
68990
+ type: Component,
68991
+ args: [{ selector: 'val-christianity-game', standalone: true, imports: [CdkDrag, CdkDropList, LightRippleDirective], template: `
68992
+ <main class="christianity-shell">
68993
+ <section class="christianity-header">
68994
+ <div>
68995
+ <p>{{ t('christianityEyebrow') }}</p>
68996
+ <h1>{{ t('christianityTitle') }}</h1>
68997
+ </div>
68998
+ <div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
68999
+ <span>{{ t('christianityTurn') }}</span>
69000
+ <strong>{{ currentPlayer().displayName }}</strong>
69001
+ </div>
69002
+ </section>
69003
+
69004
+ <section class="christianity-match-strip" [attr.aria-label]="t('christianityMatchScore')">
69005
+ <article class="christianity-match-player">
69006
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
69007
+ <div>
69008
+ <strong>{{ player().displayName }}</strong>
69009
+ <small>{{ player().leaderName }} · {{ player().leaderHp }}/{{ player().leaderMaxHp }}</small>
69010
+ </div>
69011
+ </article>
69012
+ <div class="christianity-scoreboard">
69013
+ <span>{{ t('christianityMatch') }}</span>
69014
+ <strong>{{ game().matchScore.P1 }}-{{ game().matchScore.P2 }}</strong>
69015
+ </div>
69016
+ <article class="christianity-match-player christianity-match-player--opponent">
69017
+ <span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
69018
+ <div>
69019
+ <strong>{{ opponent().displayName }}</strong>
69020
+ <small>{{ opponent().leaderName }} · {{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</small>
69021
+ </div>
69022
+ </article>
69023
+ </section>
69024
+
69025
+ <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
69026
+ <div class="christianity-hand-meter christianity-hand-meter--opponent">
69027
+ <span>{{ t('christianityHand') }}</span>
69028
+ <strong>{{ opponentHandCount() }}</strong>
69029
+ </div>
69030
+ <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
69031
+ @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
69032
+ <button
69033
+ type="button"
69034
+ class="christianity-card-preview-card christianity-card-preview-card--back"
69035
+ valLightRipple
69036
+ [style.transform]="fanTransform($index, opponentHandCount(), true)"
69037
+ [attr.aria-label]="t('christianityHiddenCard')"
69038
+ ></button>
69039
+ }
69040
+ </section>
69041
+ </section>
69042
+
69043
+ <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
69044
+ <section class="christianity-player-side christianity-player-side--opponent">
69045
+ <section class="christianity-player-rack christianity-player-rack--opponent">
69046
+ <div class="christianity-offerings-zone">
69047
+ <button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
69048
+ <i aria-hidden="true"></i>
69049
+ <i aria-hidden="true"></i>
69050
+ <i aria-hidden="true"></i>
69051
+ <span>{{ t('christianityOfferings') }}</span>
69052
+ <strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
69053
+ </button>
69054
+ </div>
69055
+ <button type="button" class="christianity-leader-card" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
69056
+ <span>{{ opponent().leaderName }}</span>
69057
+ <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
69058
+ </button>
69059
+ <span class="christianity-rack-spacer" aria-hidden="true"></span>
69060
+ </section>
69061
+
69062
+ <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
69063
+ @for (slot of battleSlots('P2'); track slot.trackId) {
69064
+ @if (slot.card) {
69065
+ <button
69066
+ type="button"
69067
+ class="christianity-card-preview-card christianity-card-preview-card--battle"
69068
+ valLightRipple
69069
+ [class.is-target]="selectedAttacker()"
69070
+ (click)="handleOpponentCharacter(slot.card)"
69071
+ >
69072
+ <span>{{ slot.card.name }}</span>
69073
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
69074
+ </button>
69075
+ } @else {
69076
+ <span class="christianity-slot"></span>
69077
+ }
69078
+ }
69079
+ </section>
69080
+ </section>
69081
+
69082
+ <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
69083
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="showHistory.set(true)">
69084
+ <i aria-hidden="true"></i>
69085
+ <i aria-hidden="true"></i>
69086
+ <i aria-hidden="true"></i>
69087
+ <span>{{ t('christianityHistory') }}</span>
69088
+ <strong>{{ game().historyZone.length }}</strong>
69089
+ </button>
69090
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
69091
+ <i aria-hidden="true"></i>
69092
+ <i aria-hidden="true"></i>
69093
+ <i aria-hidden="true"></i>
69094
+ <span>{{ t('christianityDeck') }}</span>
69095
+ <strong>{{ game().sharedDeck.length }}</strong>
69096
+ </button>
69097
+ <div class="christianity-zone-card">
69098
+ <span>{{ t('christianityPlace') }}</span>
69099
+ <strong>{{ t('christianityEmpty') }}</strong>
69100
+ </div>
69101
+ </section>
69102
+
69103
+ <section class="christianity-player-side">
69104
+ <section class="christianity-battle-zone" [class.is-placing-card]="canPlaceSelectedCharacter() || isDraggingCharacter()" [attr.aria-label]="t('christianityYourBattle')">
69105
+ @for (slot of battleSlots('P1'); track slot.trackId) {
69106
+ @if (slot.card) {
69107
+ <button
69108
+ type="button"
69109
+ class="christianity-card-preview-card christianity-card-preview-card--battle"
69110
+ valLightRipple
69111
+ [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
69112
+ [class.is-exhausted]="!slot.card.canAttack"
69113
+ (click)="selectAttacker(slot.card)"
69114
+ >
69115
+ <span>{{ slot.card.name }}</span>
69116
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
69117
+ </button>
69118
+ } @else {
69119
+ <button
69120
+ type="button"
69121
+ class="christianity-slot"
69122
+ cdkDropList
69123
+ [id]="battleSlotDropId($index)"
69124
+ [cdkDropListData]="$index"
69125
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
69126
+ [cdkDropListEnterPredicate]="canDropOnBattleSlot"
69127
+ [class.christianity-slot--play-target]="canPlaceSelectedCharacter() || isDraggingCharacter()"
69128
+ valLightRipple
69129
+ (cdkDropListDropped)="dropOnBattleSlot($event, $index)"
69130
+ (click)="playSelectedCard($index)"
69131
+ >
69132
+ @if (canPlaceSelectedCharacter() || isDraggingCharacter()) {
69133
+ <span>{{ t('christianityPlayHere') }}</span>
69134
+ }
69135
+ </button>
69136
+ }
69137
+ }
69138
+ </section>
69139
+
69140
+ <section class="christianity-player-rack">
69141
+ <div class="christianity-offerings-zone">
69142
+ <button
69143
+ type="button"
69144
+ class="christianity-offering-pile"
69145
+ cdkDropList
69146
+ id="christianity-offerings-drop"
69147
+ valLightRipple
69148
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
69149
+ [class.is-play-target]="canPlaceSelectedOffering() || isDraggingOffering()"
69150
+ [cdkDropListEnterPredicate]="canDropOnOfferings"
69151
+ (cdkDropListDropped)="dropOnOfferings($event)"
69152
+ (click)="handleOfferingPile('P1')"
69153
+ >
69154
+ <i aria-hidden="true"></i>
69155
+ <i aria-hidden="true"></i>
69156
+ <i aria-hidden="true"></i>
69157
+ <span>{{ t('christianityOfferings') }}</span>
69158
+ <strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
69159
+ </button>
69160
+ </div>
69161
+ <button type="button" class="christianity-leader-card" valLightRipple (click)="inspectLeader('P1')">
69162
+ <span>{{ player().leaderName }}</span>
69163
+ <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
69164
+ </button>
69165
+ <div class="christianity-player-command">
69166
+ <div class="christianity-player-badge">
69167
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
69168
+ <strong>{{ player().displayName }}</strong>
69169
+ </div>
69170
+ <button
69171
+ type="button"
69172
+ class="christianity-end-turn"
69173
+ (click)="endTurn()"
69174
+ >
69175
+ {{ t('christianityEndTurn') }}
69176
+ </button>
69177
+ </div>
69178
+ </section>
69179
+ </section>
69180
+ </section>
69181
+
69182
+ <section class="christianity-hand-shelf">
69183
+ <div class="christianity-hand-meter">
69184
+ <span>{{ t('christianityHand') }}</span>
69185
+ <strong>{{ player().hand?.length ?? 0 }}</strong>
69186
+ </div>
69187
+ <section
69188
+ class="christianity-hand-fan"
69189
+ cdkDropList
69190
+ id="christianity-hand-source"
69191
+ [cdkDropListConnectedTo]="dropTargetIds()"
69192
+ [attr.aria-label]="t('christianityYourHand')"
69193
+ (pointerleave)="clearHoveredHandIndex()"
69194
+ >
69195
+ @for (cardId of player().hand ?? []; track cardId + $index) {
69196
+ @let card = cardDefinition(cardId);
69197
+ <div
69198
+ class="christianity-hand-card-wrap"
69199
+ [class.is-selected]="selectedHandCard() === cardId"
69200
+ [class.is-dragging]="draggingCardId() === cardId"
69201
+ [style.z-index]="handCardZIndex($index)"
69202
+ [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
69203
+ (pointerenter)="setHoveredHandIndex($index)"
69204
+ (pointerdown)="setHoveredHandIndex($index)"
69205
+ (pointerup)="releaseHoveredHand($event)"
69206
+ >
69207
+ <button
69208
+ type="button"
69209
+ class="christianity-card-preview-card christianity-card-preview-card--hand"
69210
+ cdkDrag
69211
+ valLightRipple
69212
+ [cdkDragData]="cardId"
69213
+ [cdkDragDisabled]="!canPlay(card)"
69214
+ [class.is-selected]="selectedHandCard() === cardId"
69215
+ [class.is-disabled]="!canPlay(card)"
69216
+ (cdkDragStarted)="startDraggingCard(cardId)"
69217
+ (cdkDragEnded)="endDraggingCard()"
69218
+ (click)="selectHandCard(cardId)"
69219
+ >
69220
+ <small>
69221
+ @if (card.type === 'offering') {
69222
+ {{ t('christianityOfferingCard') }}
69223
+ } @else {
69224
+ {{ t('christianityCost') }} {{ card.cost }}
69225
+ }
69226
+ </small>
69227
+ <span>{{ card.name }}</span>
69228
+ <strong>
69229
+ @if (card.type === 'offering') {
69230
+ +{{ card.life }}
69231
+ } @else {
69232
+ {{ card.attack }} / {{ card.life }}
69233
+ }
69234
+ </strong>
69235
+ </button>
69236
+ <button
69237
+ type="button"
69238
+ class="christianity-card-eye"
69239
+ [attr.aria-label]="t('christianityPreviewCard')"
69240
+ (click)="inspectHandCard(cardId, true); $event.stopPropagation()"
69241
+ ></button>
69242
+ </div>
69243
+ }
69244
+ </section>
69245
+ </section>
69246
+
69247
+ @if (selectedPreview()) {
69248
+ <button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
69249
+ <aside
69250
+ class="christianity-floating-card-shell"
69251
+ aria-live="polite"
69252
+ >
69253
+ <button type="button" class="christianity-floating-card-close" (click)="closePreview()">
69254
+ {{ t('close') }}
69255
+ </button>
69256
+ <div
69257
+ class="christianity-floating-card"
69258
+ [style.--preview-rotate-x]="previewTilt().rotateX + 'deg'"
69259
+ [style.--preview-rotate-y]="previewTilt().rotateY + 'deg'"
69260
+ [style.--preview-shift-x]="previewTilt().shiftX + 'px'"
69261
+ [style.--preview-shift-y]="previewTilt().shiftY + 'px'"
69262
+ (pointermove)="tiltPreview($event)"
69263
+ (pointerleave)="resetPreviewTilt()"
69264
+ >
69265
+ <small>{{ selectedPreview()?.eyebrow }}</small>
69266
+ <strong>{{ selectedPreview()?.title }}</strong>
69267
+ <span>{{ selectedPreview()?.meta }}</span>
69268
+ <p>{{ selectedPreview()?.body }}</p>
69269
+ @if (selectedPreview()?.source === 'hand') {
69270
+ <div class="christianity-floating-card-actions">
69271
+ <button type="button" [disabled]="previewActionDisabled()" (click)="playPreviewCard()">
69272
+ {{ selectedActionLabel() }}
69273
+ </button>
69274
+ </div>
69275
+ }
69276
+ </div>
69277
+ </aside>
69278
+ }
69279
+
69280
+ <section class="christianity-actions" aria-live="polite">
69281
+ <p>{{ statusText() }}</p>
69282
+ <div>
69283
+ <button type="button" [disabled]="selectedActionDisabled()" (click)="playSelectedCard()">
69284
+ {{ selectedActionLabel() }}
69285
+ </button>
69286
+ <button type="button" (click)="resetMock()">
69287
+ {{ t('christianityReset') }}
69288
+ </button>
69289
+ </div>
69290
+ </section>
69291
+
69292
+ @if (showHistory()) {
69293
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="showHistory.set(false)"></button>
69294
+ <section class="christianity-history-drawer">
69295
+ <header>
69296
+ <h2>{{ t('christianityHistory') }}</h2>
69297
+ <div class="christianity-dialog-actions">
69298
+ <span>{{ game().historyZone.length }}</span>
69299
+ <button type="button" class="christianity-dialog-close" (click)="showHistory.set(false)">
69300
+ {{ t('close') }}
69301
+ </button>
69302
+ </div>
69303
+ </header>
69304
+ @if (game().historyZone.length) {
69305
+ <div class="christianity-history-grid">
69306
+ @for (cardId of game().historyZone; track cardId + $index) {
69307
+ @let card = cardDefinition(cardId);
69308
+ <button type="button" class="christianity-card-preview-card" valLightRipple (click)="inspectHistoryCard(cardId)">
69309
+ <small>{{ card.type === 'offering' ? t('christianityOfferingCard') : t('christianityCharacterCard') }}</small>
69310
+ <span>{{ card.name }}</span>
69311
+ <strong>
69312
+ @if (card.type === 'offering') {
69313
+ +{{ card.life }}
69314
+ } @else {
69315
+ {{ card.attack }} / {{ card.life }}
69316
+ }
69317
+ </strong>
69318
+ </button>
69319
+ }
69320
+ </div>
69321
+ } @else {
69322
+ <p>{{ t('christianityHistoryEmpty') }}</p>
69323
+ }
69324
+ </section>
69325
+ }
69326
+
69327
+ @if (offeringsSeat()) {
69328
+ @let offeringPlayer = game().players[offeringsSeat()!];
69329
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseOfferings')" (click)="closeOfferings()"></button>
69330
+ <section class="christianity-history-drawer christianity-offerings-drawer">
69331
+ <header>
69332
+ <h2>{{ t('christianityOfferings') }}</h2>
69333
+ <div class="christianity-dialog-actions">
69334
+ <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
69335
+ <button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
69336
+ {{ t('close') }}
69337
+ </button>
69338
+ </div>
69339
+ </header>
69340
+ <div class="christianity-offering-list">
69341
+ @for (offering of offeringPlayer.offerings; track offering.instanceId) {
69342
+ <article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
69343
+ <button type="button" class="christianity-offering-card" valLightRipple (click)="inspectOffering(offering)">
69344
+ <small>{{ t('christianityOfferingCard') }}</small>
69345
+ <span>{{ offering.name }}</span>
69346
+ <strong>+{{ offering.value }}</strong>
69347
+ @if (offering.abilityName) {
69348
+ <p>{{ offering.abilityName }}</p>
69349
+ }
69350
+ </button>
69351
+ <div>
69352
+ <strong>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</strong>
69353
+ <p>{{ offering.abilityText || t('christianityOfferingNoAbility') }}</p>
69354
+ @if (offering.abilityName) {
69355
+ <button
69356
+ type="button"
69357
+ [disabled]="!canUseOfferingAbility(offering, offeringsSeat()!)"
69358
+ (click)="useOfferingAbility(offering, offeringsSeat()!)"
69359
+ >
69360
+ {{ t('christianityUseAbility') }}
69361
+ </button>
69362
+ }
69363
+ </div>
69364
+ </article>
69365
+ }
69366
+ </div>
69367
+ </section>
69368
+ }
69369
+ </main>
69370
+ `, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.65rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb;overflow:visible}.christianity-header,.christianity-match-strip,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-match-player strong,.christianity-match-player small,.christianity-scoreboard span,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-match-strip{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);padding:.45rem;border:1px solid rgba(36,48,68,.1);border-radius:.75rem;background:#fff}.christianity-match-player{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.5rem;align-items:center;min-width:0}.christianity-match-player--opponent{direction:rtl}.christianity-match-player--opponent div{direction:ltr;text-align:right}.christianity-match-player div{display:grid;min-width:0}.christianity-match-player strong,.christianity-match-player small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-match-player small,.christianity-scoreboard span{color:#1f293394;font-size:.72rem}.christianity-scoreboard{display:grid;justify-items:center;min-width:4.2rem;padding:0 .55rem;border-right:1px solid rgba(36,48,68,.1);border-left:1px solid rgba(36,48,68,.1)}.christianity-scoreboard strong{font-size:1.2rem;line-height:1}.christianity-table{display:grid;gap:.45rem;padding:.45rem .35rem;border-radius:.75rem;background:#dceafb;overflow:visible}.christianity-player-side{display:grid;gap:.35rem;padding:.35rem .3rem;border-radius:.7rem;background:#ffffff57;grid-template-rows:minmax(7rem,1fr) auto;min-height:13.75rem}.christianity-player-side--opponent{grid-template-rows:auto minmax(7rem,1fr)}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(4,minmax(4.2rem,1fr));gap:.5rem;align-items:center;min-height:clamp(7.8rem,25vw,9.6rem);padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2;transition:background .16s ease,box-shadow .16s ease}.christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#eff6fff0,#ffffffd1),#ffffffc2;box-shadow:inset 0 0 0 .14rem #2563eb29,0 .8rem 1.7rem #2563eb1f}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{display:grid;place-items:center;min-height:clamp(6.8rem,21vw,8.2rem);border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73;color:inherit;font:inherit}.christianity-slot--play-target{position:relative;border-color:#2563eb8c;background:#dbeafec7;color:#1d4ed8;font-weight:800;overflow:hidden;box-shadow:inset 0 0 0 .12rem #60a5fa33,0 .7rem 1.25rem #2563eb29;animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-slot--play-target:before{content:\"\";position:absolute;inset:.35rem;border:1px solid rgba(37,99,235,.2);border-radius:.4rem;background:linear-gradient(135deg,rgba(37,99,235,.08),transparent 46%),radial-gradient(circle at 50% 42%,rgba(96,165,250,.22),transparent 58%)}.christianity-slot--play-target span{position:relative;z-index:2;padding:.16rem .44rem;border-radius:999px;background:#ffffffc7;font-size:.78rem}@keyframes christianity-target-pulse{0%,to{box-shadow:inset 0 0 0 .12rem #60a5fa33,0 .7rem 1.25rem #2563eb29}50%{box-shadow:inset 0 0 0 .16rem #60a5fa57,0 .9rem 1.65rem #2563eb3d}}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}.christianity-hand-fan{position:relative;display:flex;justify-content:center;min-height:10.8rem;padding:.25rem .25rem 2.1rem;isolation:isolate;overflow:visible}.christianity-hand-shelf{position:relative;display:grid;z-index:12;min-height:12rem;margin-top:-1.15rem;padding:1.45rem .25rem 1rem;overflow:visible}.christianity-hand-shelf--opponent{z-index:8;min-height:6.85rem;margin-top:0;margin-bottom:0;padding:.45rem .25rem .85rem}.christianity-hand-fan--opponent{min-height:5.9rem;padding-bottom:.75rem;align-items:start}.christianity-card-preview-card,.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile,.christianity-end-turn{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card-preview-card{display:grid;align-content:space-between;width:clamp(4.9rem,17vw,7.1rem);min-height:clamp(6.6rem,22vw,8.8rem);padding:.48rem;text-align:left;transform-origin:50% 115%;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;box-shadow:0 .5rem 1.25rem #2430441a}.christianity-hand-card-wrap{position:relative;display:grid;justify-items:center;margin-inline:-.42rem;padding-bottom:2rem;transform-origin:50% 115%;transition:transform .16s ease,filter .16s ease}.christianity-hand-card-wrap:hover,.christianity-hand-card-wrap.is-selected,.christianity-hand-card-wrap.is-dragging{z-index:3}.christianity-hand-card-wrap:hover .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-selected .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-dragging .christianity-card-preview-card--hand{border-color:#2563eb;box-shadow:0 1rem 2rem #2563eb2e}.christianity-card-preview-card--hand{touch-action:none}.christianity-card-preview-card--hand.cdk-drag-disabled{cursor:not-allowed}.christianity-card-preview-card.cdk-drag-preview{border:1px solid rgba(37,99,235,.48);box-shadow:0 0 0 .16rem #bfdbfe6b,0 1.5rem 3rem #102a4347;transform:rotate(2deg)}.christianity-card-preview-card.cdk-drag-placeholder{opacity:.22}.christianity-slot.cdk-drop-list-dragging,.christianity-offering-pile.cdk-drop-list-dragging{border-color:#2563ebb8}.christianity-slot.cdk-drop-list-receiving,.christianity-offering-pile.cdk-drop-list-receiving{box-shadow:inset 0 0 0 .18rem #60a5fa57,0 1rem 1.9rem #2563eb38}.christianity-card-eye{position:absolute;right:50%;bottom:.38rem;width:2rem;height:1.45rem;border:1px solid rgba(37,99,235,.24);border-radius:999px;background:#fffffff0;box-shadow:0 .55rem 1.1rem #102a4324;opacity:0;transform:translate(50%,-.2rem) scale(.92);transition:opacity .14s ease,transform .14s ease,border-color .14s ease}.christianity-card-eye:before{content:\"\";position:absolute;top:50%;left:50%;width:1.05rem;height:.62rem;border:.12rem solid #2563eb;border-radius:999px 999px .72rem .72rem;transform:translate(-50%,-50%)}.christianity-card-eye:after{content:\"\";position:absolute;top:50%;left:50%;width:.28rem;height:.28rem;border-radius:999px;background:#2563eb;transform:translate(-50%,-50%)}.christianity-hand-card-wrap:hover .christianity-card-eye,.christianity-hand-card-wrap.is-selected .christianity-card-eye,.christianity-card-eye:focus-visible{opacity:1;transform:translate(50%) scale(1)}.christianity-offering-pile.is-play-target{border-color:#2563eb94;background:linear-gradient(180deg,#eff6fff5,#fffffff0),radial-gradient(circle at 82% 14%,rgba(250,204,21,.28) 0 .7rem,transparent .72rem);box-shadow:inset 0 0 0 .12rem #60a5fa3d,0 .8rem 1.55rem #2563eb33;animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-card-preview-card--back{width:clamp(4rem,14vw,5.7rem);min-height:clamp(5rem,16vw,6.6rem);box-shadow:0 .8rem 1.55rem #24304424;transform-origin:50% -18%;background:linear-gradient(135deg,#102a431f,#102a4305),repeating-linear-gradient(45deg,#e2e8f0 0 .35rem,#f8fafc .35rem .7rem)}.christianity-card-preview-card--battle{justify-self:center;width:auto;min-width:clamp(4.8rem,15vw,6.6rem);height:clamp(6.8rem,21vw,8.4rem);min-height:0;aspect-ratio:5 / 7;margin-inline:0}.christianity-card-preview-card span,.christianity-card-mini span,.christianity-offering-pile span,.christianity-offering-card span,.christianity-leader-card span,.christianity-zone-card span,.christianity-zone-pile span{position:relative;z-index:2;font-weight:700}.christianity-card-preview-card strong,.christianity-card-mini strong,.christianity-offering-pile strong,.christianity-offering-card strong,.christianity-leader-card strong,.christianity-zone-card strong,.christianity-zone-pile strong{position:relative;z-index:3;justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{display:grid;grid-template-columns:minmax(5.9rem,7rem) minmax(5rem,1fr) minmax(4.2rem,7rem);gap:.45rem;align-items:end;justify-items:stretch}.christianity-player-rack--opponent{align-items:start}.christianity-hand-meter{position:absolute;top:0;right:.35rem;z-index:4;display:inline-grid;grid-auto-flow:column;gap:.25rem;align-items:center;min-height:1.7rem;padding:.18rem .46rem;border:1px solid rgba(36,48,68,.12);border-radius:999px;background:#ffffffe6;box-shadow:0 .35rem .8rem #102a4314}.christianity-hand-meter--opponent{top:.15rem}.christianity-hand-meter span{color:#1f293394;font-size:.68rem}.christianity-hand-meter strong{font-size:.86rem}.christianity-player-badge,.christianity-player-command{display:grid;gap:.35rem;justify-items:center;min-width:0}.christianity-player-badge{align-content:start;color:#1f2933c2;font-size:.74rem}.christianity-player-badge--opponent{justify-self:center;grid-auto-flow:column;align-items:center;justify-content:center}.christianity-player-badge strong{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-avatar{display:grid;place-items:center;width:1.85rem;height:1.85rem;border-radius:999px;color:#fff;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .9rem #102a4329}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-start;justify-self:start;width:100%}.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-mini{width:3.5rem}.christianity-offering-pile{position:relative;isolation:isolate;overflow:hidden;justify-self:start;width:min(100%,5.9rem);min-height:7.1rem;padding:.95rem .52rem .6rem;background:linear-gradient(180deg,#fff,#f8fafc),linear-gradient(135deg,rgba(250,204,21,.18),transparent 42%)}.christianity-offering-pile i{position:absolute;inset:auto auto 1.05rem .72rem;z-index:-1;width:2.55rem;height:3.55rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:linear-gradient(180deg,#ffffffeb,#f1f5f9eb),radial-gradient(circle at 78% 18%,#facc15 0 .38rem,transparent .4rem);box-shadow:0 .35rem .85rem #102a431a;transform:rotate(-5deg)}.christianity-offering-pile i:nth-child(2){transform:translate(.28rem,.08rem) rotate(3deg)}.christianity-offering-pile i:nth-child(3){transform:translate(.55rem,.18rem) rotate(-1deg)}.christianity-leader-card{align-self:center;justify-self:center;width:clamp(4.75rem,17vw,6rem);min-height:clamp(6.6rem,22vw,8.4rem)}.christianity-rack-spacer{display:block;min-height:1px}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(4rem,1fr))}.christianity-shared-zone{display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch}.christianity-zone-card,.christianity-zone-pile{min-height:6.45rem;padding:.7rem .52rem .55rem}.christianity-zone-pile{position:relative;isolation:isolate;overflow:hidden;box-shadow:inset 0 0 0 999px #ffffff1f}.christianity-zone-pile i{position:absolute;inset:auto .72rem 1.02rem auto;z-index:-1;width:2.7rem;height:3.7rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:#f8fafc;box-shadow:0 .35rem .85rem #102a431c;transform:rotate(4deg)}.christianity-zone-pile i:nth-child(2){transform:translate(-.28rem,.12rem) rotate(-3deg)}.christianity-zone-pile i:nth-child(3){background:linear-gradient(135deg,#102a4329,#102a4308),repeating-linear-gradient(45deg,#dbeafe 0 .33rem,#fff .33rem .66rem);transform:translate(-.54rem,.24rem) rotate(2deg)}.christianity-floating-card-shell{position:fixed;top:50%;left:50%;z-index:61;width:min(28rem,calc(100vw - 1.25rem));transform:translate(-50%,-50%)}.christianity-floating-card{display:grid;gap:.45rem;width:100%;min-height:min(31rem,calc(100vh - 3.5rem));padding:1.15rem;border:1px solid rgba(36,48,68,.18);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 20% 0%,rgba(37,99,235,.12),transparent 45%);box-shadow:0 0 0 .18rem #bfdbfe6b,0 0 2.2rem #60a5fa57,0 2.4rem 5rem #102a4357,inset 0 0 0 .35rem #ffffff8c;touch-action:none;transform:translate(var(--preview-shift-x, 0px),var(--preview-shift-y, 0px)) perspective(48rem) rotateX(var(--preview-rotate-x, 5deg)) rotateY(var(--preview-rotate-y, -5deg));transition:transform 90ms ease-out}.christianity-floating-card-close{position:absolute;top:-2.6rem;right:0;z-index:62;min-height:2rem;padding:0 .6rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#ffffffe6;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .45rem 1rem #102a431a}.christianity-preview-backdrop,.christianity-history-backdrop{position:fixed;inset:0;border:0;border-radius:0;background:#0f172a75}.christianity-preview-backdrop{z-index:60}.christianity-floating-card small,.christianity-floating-card span{color:#1f2933a3}.christianity-floating-card strong{font-size:clamp(1.55rem,8vw,2.35rem);line-height:1.05}.christianity-floating-card p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-floating-card-actions{display:flex;justify-content:flex-end;margin-top:.35rem}.christianity-floating-card-actions button{min-height:2.35rem;padding:0 .9rem;border:0;border-radius:999px;background:#102a43;color:#fff;font:inherit;font-size:.9rem;font-weight:800;box-shadow:0 .65rem 1.3rem #102a432e}.christianity-floating-card-actions button:disabled{cursor:not-allowed;opacity:.45}@media (min-width: 52rem){.christianity-floating-card-shell{width:min(34rem,calc(100vw - 3rem))}.christianity-floating-card{min-height:min(43rem,calc(100vh - 4rem));padding:1.45rem}}.christianity-history-backdrop{z-index:40}.christianity-history-drawer{position:fixed;right:auto;bottom:max(.5rem,env(safe-area-inset-bottom));left:50%;z-index:41;display:grid;grid-template-rows:auto minmax(0,1fr);gap:.75rem;width:min(calc(100vw - 1rem),44rem);min-height:min(18rem,calc(100dvh - 1rem));max-height:min(32rem,calc(100dvh - 2rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347;transform:translate(-50%)}.christianity-history-drawer header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-history-drawer h2,.christianity-history-drawer p{margin:0}.christianity-history-drawer header span{display:grid;place-items:center;min-width:1.85rem;height:1.85rem;border-radius:999px;background:#edf2f7;font-weight:800}.christianity-dialog-actions{display:flex;align-items:center;gap:.45rem}.christianity-dialog-close{min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#fff;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .8rem #102a4314}.christianity-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .25rem}.christianity-history-grid::-webkit-scrollbar,.christianity-offering-list::-webkit-scrollbar{width:.65rem}.christianity-history-grid::-webkit-scrollbar-track,.christianity-offering-list::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-history-grid::-webkit-scrollbar-thumb,.christianity-offering-list::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offerings-drawer{width:min(calc(100vw - 1rem),48rem);min-height:min(20rem,calc(100dvh - 1rem));max-height:min(34rem,calc(100dvh - 2rem))}.christianity-offering-list{display:grid;gap:.6rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem}.christianity-offering-row{display:grid;grid-template-columns:minmax(4.9rem,6.2rem) minmax(0,1fr);gap:.65rem;align-items:stretch;padding:.45rem;border:1px solid rgba(36,48,68,.12);border-radius:.65rem;background:#fff}.christianity-offering-row.is-exhausted{opacity:.68}.christianity-offering-card{min-height:7.4rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 82% 14%,#facc15 0 .48rem,transparent .5rem);box-shadow:0 .45rem 1rem #102a431a}.christianity-offering-card small{color:#1f293394;font-size:.66rem;text-transform:uppercase}.christianity-offering-card p,.christianity-offering-row p{margin:0}.christianity-offering-card p{align-self:end;color:#1f2933a3;font-size:.72rem;line-height:1.2}.christianity-offering-row>div{display:grid;gap:.35rem;align-content:center;min-width:0}.christianity-offering-row>div p{color:#1f2933b8;font-size:.85rem;line-height:1.3}.christianity-offering-row>div button{justify-self:start;min-height:2.2rem;padding:0 .7rem;border:1px solid rgba(16,42,67,.16);border-radius:.5rem;background:#102a43;color:#fff;font:inherit;font-weight:800}.christianity-offering-row>div button:disabled{background:#e2e8f0;color:#1f293394}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-match-strip{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:.35rem;padding:.35rem}.christianity-match-player{gap:.35rem}.christianity-match-player small{display:none}.christianity-scoreboard{min-width:3.65rem;padding:0 .35rem}.christianity-scoreboard strong{font-size:1.05rem}.christianity-table{gap:.35rem}.christianity-player-side{padding:.3rem .25rem}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(3.35rem,1fr));overflow-x:auto}.christianity-hand-fan{min-height:10.55rem;padding-bottom:2rem;overflow:visible}.christianity-hand-shelf{min-height:11.75rem;margin-top:-1rem;padding-top:1.35rem;padding-bottom:.9rem}.christianity-hand-shelf--opponent{min-height:6.65rem;margin-top:0;margin-bottom:0;padding-top:.4rem;padding-bottom:.85rem}.christianity-player-rack{grid-template-columns:minmax(4.7rem,5.9rem) minmax(4.8rem,1fr) minmax(3.7rem,5rem)}.christianity-shared-zone{grid-template-columns:repeat(3,minmax(3.7rem,1fr))}.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem}.christianity-offering-pile{min-height:6.85rem;padding:.88rem .46rem .55rem}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);min-height:clamp(5.8rem,26vw,7.4rem)}.christianity-leader-card{width:clamp(4.55rem,20vw,5.7rem);min-height:clamp(6.15rem,27vw,7.6rem)}.christianity-offering-row{grid-template-columns:minmax(4.5rem,5.5rem) minmax(0,1fr);gap:.5rem}.christianity-hand-fan--opponent{min-height:5.75rem;padding-bottom:.7rem}}\n"] }]
69371
+ }], ctorParameters: () => [] });
69372
+
68441
69373
  addIcons({ refreshOutline, sparklesOutline, trophyOutline });
68442
69374
  const BUBBLE_COLORS = {
68443
69375
  rose: '#ff4f9f',
@@ -68494,6 +69426,7 @@ class BubbleBlitzGameComponent {
68494
69426
  this.animating = signal(false);
68495
69427
  this.leaderboard = signal(this.readLeaderboard());
68496
69428
  this.confirmAction = signal(undefined);
69429
+ this.confirmedAction = signal(undefined);
68497
69430
  this.config = computed(() => MODE_CONFIG[this.mode()]);
68498
69431
  this.feverReady = computed(() => this.fever() >= this.config().feverTarget);
68499
69432
  this.feverProgress = computed(() => Math.min(100, Math.round((this.fever() / this.config().feverTarget) * 100)));
@@ -68673,13 +69606,12 @@ class BubbleBlitzGameComponent {
68673
69606
  closeConfirmModal() {
68674
69607
  this.confirmAction.set(undefined);
68675
69608
  }
68676
- confirmPendingAction(token) {
68677
- if (token !== 'confirm') {
68678
- this.closeConfirmModal();
68679
- return;
68680
- }
68681
- const action = this.confirmAction();
69609
+ handleConfirmModalDismissed() {
68682
69610
  this.confirmAction.set(undefined);
69611
+ const action = this.confirmedAction();
69612
+ this.confirmedAction.set(undefined);
69613
+ if (!action)
69614
+ return;
68683
69615
  if (action === 'restart') {
68684
69616
  this.start();
68685
69617
  return;
@@ -68692,6 +69624,15 @@ class BubbleBlitzGameComponent {
68692
69624
  this.resetToGamesMenu();
68693
69625
  }
68694
69626
  }
69627
+ confirmPendingAction(token) {
69628
+ if (token !== 'confirm') {
69629
+ this.closeConfirmModal();
69630
+ return;
69631
+ }
69632
+ const action = this.confirmAction();
69633
+ this.confirmedAction.set(action);
69634
+ this.confirmAction.set(undefined);
69635
+ }
68695
69636
  startTimer() {
68696
69637
  this.stopTimer();
68697
69638
  this.timer = window.setInterval(() => {
@@ -68995,7 +69936,7 @@ class BubbleBlitzGameComponent {
68995
69936
  <ion-modal
68996
69937
  [isOpen]="!!confirmAction()"
68997
69938
  cssClass="val-modal-adaptive"
68998
- (didDismiss)="closeConfirmModal()"
69939
+ (didDismiss)="handleConfirmModalDismissed()"
68999
69940
  >
69000
69941
  <ng-template>
69001
69942
  <val-modal-layout
@@ -69145,7 +70086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
69145
70086
  <ion-modal
69146
70087
  [isOpen]="!!confirmAction()"
69147
70088
  cssClass="val-modal-adaptive"
69148
- (didDismiss)="closeConfirmModal()"
70089
+ (didDismiss)="handleConfirmModalDismissed()"
69149
70090
  >
69150
70091
  <ng-template>
69151
70092
  <val-modal-layout
@@ -69209,6 +70150,7 @@ class MemoryGameComponent {
69209
70150
  this.lockBoard = signal(false);
69210
70151
  this.leaderboard = signal(this.readLeaderboard());
69211
70152
  this.confirmAction = signal(undefined);
70153
+ this.confirmedAction = signal(undefined);
69212
70154
  this.profileConfig = computed(() => PROFILE_CONFIG[this.profile()]);
69213
70155
  this.pairCount = computed(() => this.profileConfig().pairs);
69214
70156
  this.boardClass = computed(() => `memory-board ${this.profileConfig().boardClass}`);
@@ -69346,13 +70288,12 @@ class MemoryGameComponent {
69346
70288
  closeConfirmModal() {
69347
70289
  this.confirmAction.set(undefined);
69348
70290
  }
69349
- confirmPendingAction(token) {
69350
- if (token !== 'confirm') {
69351
- this.closeConfirmModal();
69352
- return;
69353
- }
69354
- const action = this.confirmAction();
70291
+ handleConfirmModalDismissed() {
69355
70292
  this.confirmAction.set(undefined);
70293
+ const action = this.confirmedAction();
70294
+ this.confirmedAction.set(undefined);
70295
+ if (!action)
70296
+ return;
69356
70297
  if (action === 'restart') {
69357
70298
  this.start();
69358
70299
  return;
@@ -69365,6 +70306,15 @@ class MemoryGameComponent {
69365
70306
  this.resetToGamesMenu();
69366
70307
  }
69367
70308
  }
70309
+ confirmPendingAction(token) {
70310
+ if (token !== 'confirm') {
70311
+ this.closeConfirmModal();
70312
+ return;
70313
+ }
70314
+ const action = this.confirmAction();
70315
+ this.confirmedAction.set(action);
70316
+ this.confirmAction.set(undefined);
70317
+ }
69368
70318
  flip(card) {
69369
70319
  if (this.lockBoard() || card.flipped || card.matched || this.won() || this.failed())
69370
70320
  return;
@@ -69679,7 +70629,7 @@ class MemoryGameComponent {
69679
70629
  <ion-modal
69680
70630
  [isOpen]="!!confirmAction()"
69681
70631
  cssClass="val-modal-adaptive"
69682
- (didDismiss)="closeConfirmModal()"
70632
+ (didDismiss)="handleConfirmModalDismissed()"
69683
70633
  >
69684
70634
  <ng-template>
69685
70635
  <val-modal-layout
@@ -69837,7 +70787,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
69837
70787
  <ion-modal
69838
70788
  [isOpen]="!!confirmAction()"
69839
70789
  cssClass="val-modal-adaptive"
69840
- (didDismiss)="closeConfirmModal()"
70790
+ (didDismiss)="handleConfirmModalDismissed()"
69841
70791
  >
69842
70792
  <ng-template>
69843
70793
  <val-modal-layout
@@ -70183,6 +71133,7 @@ class SimonGameComponent {
70183
71133
  this.activePad = signal(undefined);
70184
71134
  this.leaderboard = signal(this.readLeaderboard());
70185
71135
  this.confirmAction = signal(undefined);
71136
+ this.confirmedAction = signal(undefined);
70186
71137
  this.modeConfig = computed(() => SIMON_MODES[this.mode()]);
70187
71138
  this.bestRound = computed(() => this.modeLeaderboard()[0]?.round ?? 0);
70188
71139
  this.modeLeaderboard = computed(() => this.leaderboard()
@@ -70282,13 +71233,12 @@ class SimonGameComponent {
70282
71233
  closeConfirmModal() {
70283
71234
  this.confirmAction.set(undefined);
70284
71235
  }
70285
- confirmPendingAction(token) {
70286
- if (token !== 'confirm') {
70287
- this.closeConfirmModal();
70288
- return;
70289
- }
70290
- const action = this.confirmAction();
71236
+ handleConfirmModalDismissed() {
70291
71237
  this.confirmAction.set(undefined);
71238
+ const action = this.confirmedAction();
71239
+ this.confirmedAction.set(undefined);
71240
+ if (!action)
71241
+ return;
70292
71242
  if (action === 'restart') {
70293
71243
  this.start();
70294
71244
  return;
@@ -70301,6 +71251,15 @@ class SimonGameComponent {
70301
71251
  this.resetToGamesMenu();
70302
71252
  }
70303
71253
  }
71254
+ confirmPendingAction(token) {
71255
+ if (token !== 'confirm') {
71256
+ this.closeConfirmModal();
71257
+ return;
71258
+ }
71259
+ const action = this.confirmAction();
71260
+ this.confirmedAction.set(action);
71261
+ this.confirmAction.set(undefined);
71262
+ }
70304
71263
  tap(pad) {
70305
71264
  if (this.phase() !== 'waiting' || !this.acceptingInput)
70306
71265
  return;
@@ -70544,7 +71503,7 @@ class SimonGameComponent {
70544
71503
  <ion-modal
70545
71504
  [isOpen]="!!confirmAction()"
70546
71505
  cssClass="val-modal-adaptive"
70547
- (didDismiss)="closeConfirmModal()"
71506
+ (didDismiss)="handleConfirmModalDismissed()"
70548
71507
  >
70549
71508
  <ng-template>
70550
71509
  <val-modal-layout
@@ -70674,7 +71633,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
70674
71633
  <ion-modal
70675
71634
  [isOpen]="!!confirmAction()"
70676
71635
  cssClass="val-modal-adaptive"
70677
- (didDismiss)="closeConfirmModal()"
71636
+ (didDismiss)="handleConfirmModalDismissed()"
70678
71637
  >
70679
71638
  <ng-template>
70680
71639
  <val-modal-layout
@@ -85990,5 +86949,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
85990
86949
  * Generated bundle index. Do not edit.
85991
86950
  */
85992
86951
 
85993
- export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AboutViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, BubbleBlitzGameComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHESSIMALS_BOT_PROFILES, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, ChatComposerComponent, ChatInputComponent, ChatWindowComponent, CheckInputComponent, CheckboxRadioInputComponent, ChessimalsGameComponent, ChessimalsOnlineService, ChipGroupComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentReactionModalComponent, ContentService, ContentTransformer, ConversationListItemComponent, ConversationService, CookieBannerComponent, CookieSettingsComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_LOGIN_LOGO, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_POST_UPDATE_GRACE_MS, DEFAULT_PRESETS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DatasetPaginationService, DateInputComponent, DatePickerComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmptyStateComponent, EntityCardComponent, EntityFeedService, ExpandableTextComponent, ExternalBrowserService, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormFieldComponent, FormSchemaBuilderService, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HapticsService, HasPermissionDirective, HeaderActionsService, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, HtmlViewerModalComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, KNOWN_ROUTES, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LiveReadFallbackService, LoadMoreComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, META_SCHEMA_VERSION, METRIC_CARD_DEFAULTS, MINI_GAME_PLAYER_AVATARS, MINI_GAME_PLAYER_COLORS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MediaViewerModalComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MemoryGameComponent, MenuComponent, MessageBubbleComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, MiniGamePlayerProfileService, MiniGamesMenuComponent, ModalLayoutComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OperationReferenceComponent, OptionCardsComponent, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, POST_UPDATE_TS_KEY, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PdfService, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneDisplayComponent, PhoneFormatService, PhoneInputComponent, PickerV2Component, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, PricingTableComponent, ProcessLinksPipe, ProfileContentComponent, ProfileModalComponent, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, ReactionBarComponent, ReactionsService, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, RequestModalComponent, RequestService, RetroAudioService, RightsFooterComponent, RotatingTextComponent, SEARCH_HEADER_DEFAULTS, SETTINGS_SECTIONS_CATALOG, SHAPE_KEYS, SHARE_PROFILE_MODAL_DEFAULTS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STATS_BAR_DEFAULTS, STROKE_KEYS, SearchHeaderComponent, SearchSelectorComponent, SearchbarComponent, SectionHeaderComponent, SecurityViewComponent, SegmentControlComponent, SelectSearchComponent, SessionListModalComponent, SessionService, SessionTransitionOverlayComponent, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimonGameComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SplashComponent, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, ThreadPanelComponent, TicketCardComponent, TicketCardImageService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, TypingIndicatorComponent, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UsageMetersComponent, UsageService, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_CHAT_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_CONTENT_CONFIG, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_REACTIONS_CONFIG, VALTECH_SETTINGS_MENU_LINKS, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VALTECH_WHATSAPP_CONFIG, VERSION, ValtechErrorService, VerifyViewComponent, WhatsappFabComponent, WhatsappService, WizardComponent, WizardFooterComponent, WorkflowService, applyChessimalsMove, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildSettingsCards, button, canSubmitRequestType, chooseChessimalsBotMove, collections, connectPageRefresh, createChessimalsGame, createChessimalsReviewState, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialDatasetState, createInitialPaginationState, createNumberFromToField, createPageState, createPermissionLabeler, createRefreshableStream, createTitleProps, datasetPageFromLegacyCursor, docs, errorLoggingInterceptor, extractPathParams, formatClockTime, formatDateSeparator, formatRelativeTime, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getChessimalsAllLegalMoves, getChessimalsLegalMoves, getChessimalsPieceAt, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, groupPermissionsByScope, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isKnownRoute, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, positionKey, provideLegalContent, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechChat, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationClickActions, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechReactions, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, rbacGuard, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resignChessimalsGame, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle, validateRoutes };
86952
+ export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AboutViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, BubbleBlitzGameComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHESSIMALS_BOT_PROFILES, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, ChatComposerComponent, ChatInputComponent, ChatWindowComponent, CheckInputComponent, CheckboxRadioInputComponent, ChessimalsGameComponent, ChessimalsOnlineService, ChipGroupComponent, ChristianityGameComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentReactionModalComponent, ContentService, ContentTransformer, ConversationListItemComponent, ConversationService, CookieBannerComponent, CookieSettingsComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_LOGIN_LOGO, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_POST_UPDATE_GRACE_MS, DEFAULT_PRESETS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DatasetPaginationService, DateInputComponent, DatePickerComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmptyStateComponent, EntityCardComponent, EntityFeedService, ExpandableTextComponent, ExternalBrowserService, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormFieldComponent, FormSchemaBuilderService, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HapticsService, HasPermissionDirective, HeaderActionsService, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, HtmlViewerModalComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, KNOWN_ROUTES, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LightRippleDirective, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LiveReadFallbackService, LoadMoreComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, META_SCHEMA_VERSION, METRIC_CARD_DEFAULTS, MINI_GAME_PLAYER_AVATARS, MINI_GAME_PLAYER_COLORS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MediaViewerModalComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MemoryGameComponent, MenuComponent, MessageBubbleComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, MiniGamePlayerProfileService, MiniGamesMenuComponent, ModalLayoutComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OperationReferenceComponent, OptionCardsComponent, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, POST_UPDATE_TS_KEY, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PdfService, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneDisplayComponent, PhoneFormatService, PhoneInputComponent, PickerV2Component, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, PricingTableComponent, ProcessLinksPipe, ProfileContentComponent, ProfileModalComponent, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, ReactionBarComponent, ReactionsService, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, RequestModalComponent, RequestService, RetroAudioService, RightsFooterComponent, RotatingTextComponent, SEARCH_HEADER_DEFAULTS, SETTINGS_SECTIONS_CATALOG, SHAPE_KEYS, SHARE_PROFILE_MODAL_DEFAULTS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STATS_BAR_DEFAULTS, STROKE_KEYS, SearchHeaderComponent, SearchSelectorComponent, SearchbarComponent, SectionHeaderComponent, SecurityViewComponent, SegmentControlComponent, SelectSearchComponent, SessionListModalComponent, SessionService, SessionTransitionOverlayComponent, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimonGameComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SplashComponent, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, ThreadPanelComponent, TicketCardComponent, TicketCardImageService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, TypingIndicatorComponent, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UsageMetersComponent, UsageService, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_CHAT_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_CONTENT_CONFIG, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_REACTIONS_CONFIG, VALTECH_SETTINGS_MENU_LINKS, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VALTECH_WHATSAPP_CONFIG, VERSION, ValtechErrorService, VerifyViewComponent, WhatsappFabComponent, WhatsappService, WizardComponent, WizardFooterComponent, WorkflowService, applyChessimalsMove, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildSettingsCards, button, canSubmitRequestType, chooseChessimalsBotMove, collections, connectPageRefresh, createChessimalsGame, createChessimalsReviewState, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialDatasetState, createInitialPaginationState, createNumberFromToField, createPageState, createPermissionLabeler, createRefreshableStream, createTitleProps, datasetPageFromLegacyCursor, docs, errorLoggingInterceptor, extractPathParams, formatClockTime, formatDateSeparator, formatRelativeTime, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getChessimalsAllLegalMoves, getChessimalsLegalMoves, getChessimalsPieceAt, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, groupPermissionsByScope, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isKnownRoute, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, positionKey, provideLegalContent, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechChat, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationClickActions, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechReactions, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, rbacGuard, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resignChessimalsGame, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle, validateRoutes };
85994
86953
  //# sourceMappingURL=valtech-components.mjs.map