valtech-components 4.0.442 → 4.0.443
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.
- package/esm2022/lib/components/organisms/mini-games/bubble-blitz-game.component.mjs +9 -18
- package/esm2022/lib/components/organisms/mini-games/chessimals-challenge-progress.service.mjs +145 -0
- package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +16 -109
- package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +541 -23
- package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +9 -18
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +89 -149
- package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +9 -18
- package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
- package/esm2022/lib/services/firebase/analytics.service.mjs +6 -4
- package/esm2022/lib/services/preferences/preferences.service.mjs +2 -2
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/mini-games/public-api.mjs +2 -34
- package/esm2022/public-api.mjs +1 -3
- package/fesm2022/valtech-components-mini-games.mjs +2 -34
- package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
- package/fesm2022/valtech-components.mjs +814 -1771
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/bubble-blitz-game.component.d.ts +0 -2
- package/lib/components/organisms/mini-games/chessimals-challenge-progress.service.d.ts +30 -0
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +36 -4
- package/lib/components/organisms/mini-games/memory-game.component.d.ts +0 -2
- package/lib/components/organisms/mini-games/simon-game.component.d.ts +0 -2
- package/lib/components/organisms/mini-games/types.d.ts +57 -65
- package/lib/version.d.ts +1 -1
- package/mini-games/public-api.d.ts +0 -4
- package/package.json +1 -2
- package/public-api.d.ts +0 -2
- package/src/lib/services/firebase/scripts/generate-sw-config.js +0 -0
- package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +0 -1385
- package/esm2022/lib/directives/light-ripple.directive.mjs +0 -57
- package/lib/components/organisms/mini-games/christianity-game.component.d.ts +0 -101
- package/lib/directives/light-ripple.directive.d.ts +0 -8
|
@@ -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,
|
|
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';
|
|
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,7 +49,6 @@ 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';
|
|
53
52
|
import 'prismjs/components/prism-scss';
|
|
54
53
|
import 'prismjs/components/prism-json';
|
|
55
54
|
import { BrowserMultiFormatReader } from '@zxing/browser';
|
|
@@ -59,7 +58,7 @@ import fixWebmDuration from 'fix-webm-duration';
|
|
|
59
58
|
* Current version of valtech-components.
|
|
60
59
|
* This is automatically updated during the publish process.
|
|
61
60
|
*/
|
|
62
|
-
const VERSION = '4.0.
|
|
61
|
+
const VERSION = '4.0.443';
|
|
63
62
|
|
|
64
63
|
// Control de estado de refresco (singleton a nivel de módulo)
|
|
65
64
|
let isRefreshing = false;
|
|
@@ -1382,9 +1381,11 @@ class AnalyticsService {
|
|
|
1382
1381
|
params,
|
|
1383
1382
|
sent,
|
|
1384
1383
|
};
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1384
|
+
queueMicrotask(() => {
|
|
1385
|
+
this._debugHistory.update(history => {
|
|
1386
|
+
const newHistory = [event, ...history];
|
|
1387
|
+
return newHistory.slice(0, MAX_DEBUG_HISTORY);
|
|
1388
|
+
});
|
|
1388
1389
|
});
|
|
1389
1390
|
}
|
|
1390
1391
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AnalyticsService, deps: [{ token: i0.Injector }, { token: VALTECH_FIREBASE_CONFIG }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -10116,61 +10117,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
10116
10117
|
}]
|
|
10117
10118
|
}], ctorParameters: () => [] });
|
|
10118
10119
|
|
|
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
|
-
|
|
10174
10120
|
/**
|
|
10175
10121
|
* Presets de botón por defecto provistos por la librería.
|
|
10176
10122
|
*
|
|
@@ -47749,7 +47695,7 @@ class PreferencesService {
|
|
|
47749
47695
|
if (this.i18n && this.i18n.lang() !== l) {
|
|
47750
47696
|
this.i18n.setLanguage(l);
|
|
47751
47697
|
}
|
|
47752
|
-
});
|
|
47698
|
+
}, { allowSignalWrites: true });
|
|
47753
47699
|
// Side-effect: aplicar fontSize.
|
|
47754
47700
|
// SIN gate `_synced` (igual que theme): el tamaño es una
|
|
47755
47701
|
// preferencia local-first — FontSizeService/localStorage es la verdad del
|
|
@@ -61085,66 +61031,18 @@ const CHESSIMALS_BOT_PROFILES = [
|
|
|
61085
61031
|
labelKey: 'chessimalsBotSentinel',
|
|
61086
61032
|
descriptionKey: 'chessimalsBotSentinelBody',
|
|
61087
61033
|
},
|
|
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
|
-
},
|
|
61130
61034
|
];
|
|
61131
61035
|
const BOT_STYLES = {
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 },
|
|
61036
|
+
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 },
|
|
61037
|
+
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 },
|
|
61038
|
+
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 },
|
|
61039
|
+
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 },
|
|
61040
|
+
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 },
|
|
61041
|
+
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 },
|
|
61042
|
+
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 },
|
|
61043
|
+
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 },
|
|
61044
|
+
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 },
|
|
61045
|
+
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 },
|
|
61148
61046
|
};
|
|
61149
61047
|
const DEFAULT_BOT_PROFILE_BY_DIFFICULTY = {
|
|
61150
61048
|
easy: 'explorer',
|
|
@@ -61230,17 +61128,8 @@ function chooseChessimalsBotMove(state, difficulty = 'normal', profileId = DEFAU
|
|
|
61230
61128
|
if (moves.length === 0)
|
|
61231
61129
|
return undefined;
|
|
61232
61130
|
const style = BOT_STYLES[profileId] ?? BOT_STYLES[DEFAULT_BOT_PROFILE_BY_DIFFICULTY[difficulty]];
|
|
61233
|
-
const
|
|
61234
|
-
.map((move) => ({ move, score:
|
|
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
|
+
const scored = moves
|
|
61132
|
+
.map((move) => ({ move, score: scoreBotMoveWithLookahead(state, move, difficulty, style) }))
|
|
61244
61133
|
.sort((a, b) => b.score - a.score);
|
|
61245
61134
|
if (difficulty === 'easy') {
|
|
61246
61135
|
const playable = scored.filter((item) => item.score > -3000);
|
|
@@ -61438,7 +61327,7 @@ function getPowerMoves(state, piece, animal) {
|
|
|
61438
61327
|
const directions = getPowerDirections(animal);
|
|
61439
61328
|
const moves = [];
|
|
61440
61329
|
for (const direction of directions) {
|
|
61441
|
-
for (let distance = 1; distance
|
|
61330
|
+
for (let distance = 1; distance <= 3; distance += 1) {
|
|
61442
61331
|
const target = {
|
|
61443
61332
|
row: piece.position.row + direction.row * distance,
|
|
61444
61333
|
col: piece.position.col + direction.col * distance,
|
|
@@ -61499,7 +61388,7 @@ function getKangarooMoves(state, piece) {
|
|
|
61499
61388
|
}
|
|
61500
61389
|
return moves;
|
|
61501
61390
|
}
|
|
61502
|
-
function scoreBotMove(state, move, difficulty, style
|
|
61391
|
+
function scoreBotMove(state, move, difficulty, style) {
|
|
61503
61392
|
const color = state.currentTurn;
|
|
61504
61393
|
const targetPiece = move.capturesPieceId
|
|
61505
61394
|
? activePieces(state).find((piece) => piece.id === move.capturesPieceId)
|
|
@@ -61525,14 +61414,6 @@ function scoreBotMove(state, move, difficulty, style, includeTacticalPressure =
|
|
|
61525
61414
|
score += 14 * style.power;
|
|
61526
61415
|
if (wouldUnlockPower(state, color, move.to))
|
|
61527
61416
|
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
|
-
}
|
|
61536
61417
|
if (difficulty === 'hard' && isSquareVulnerableAfterMove(state, move)) {
|
|
61537
61418
|
score -= (targetPiece ? 80 : 140) * style.safety;
|
|
61538
61419
|
}
|
|
@@ -61563,7 +61444,7 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style) {
|
|
|
61563
61444
|
score += centerControl * (difficulty === 'hard' ? 18 : 10) * style.center;
|
|
61564
61445
|
}
|
|
61565
61446
|
const opponentBestReply = opponentMoves
|
|
61566
|
-
.map((opponentMove) => scoreBotMove(afterMove, opponentMove, difficulty, style
|
|
61447
|
+
.map((opponentMove) => scoreBotMove(afterMove, opponentMove, difficulty, style))
|
|
61567
61448
|
.sort((a, b) => b - a)[0];
|
|
61568
61449
|
if (opponentBestReply) {
|
|
61569
61450
|
const replyWeight = difficulty === 'easy' ? 0.12 : difficulty === 'normal' ? 0.32 : 0.48;
|
|
@@ -61575,34 +61456,6 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style) {
|
|
|
61575
61456
|
}
|
|
61576
61457
|
return score;
|
|
61577
61458
|
}
|
|
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
|
-
}
|
|
61606
61459
|
function pickNoisyBotMove(scored, spread) {
|
|
61607
61460
|
if (scored.length === 0)
|
|
61608
61461
|
return undefined;
|
|
@@ -62499,6 +62352,145 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
62499
62352
|
args: [{ providedIn: 'root' }]
|
|
62500
62353
|
}] });
|
|
62501
62354
|
|
|
62355
|
+
const EMPTY_POWERS = { eagle: 0, bull: 0, kangaroo: 0, lion: 0 };
|
|
62356
|
+
class ChessimalsChallengeProgressService {
|
|
62357
|
+
constructor() {
|
|
62358
|
+
this.firebaseAuth = inject(Auth);
|
|
62359
|
+
this.firestore = inject(Firestore);
|
|
62360
|
+
this.firebase = inject(FirebaseService);
|
|
62361
|
+
}
|
|
62362
|
+
get currentUid() {
|
|
62363
|
+
return this.firebaseAuth.currentUser?.uid;
|
|
62364
|
+
}
|
|
62365
|
+
watchStats() {
|
|
62366
|
+
const uid = this.currentUid;
|
|
62367
|
+
if (!uid)
|
|
62368
|
+
return of(undefined);
|
|
62369
|
+
return new Observable((subscriber) => {
|
|
62370
|
+
const unsubscribe = onSnapshot(this.statsRef(uid), (snapshot) => subscriber.next(snapshot.exists() ? this.normalizeStats(snapshot.data()) : undefined), (error) => subscriber.error(error));
|
|
62371
|
+
return unsubscribe;
|
|
62372
|
+
});
|
|
62373
|
+
}
|
|
62374
|
+
watchRecentRuns(limitCount = 4) {
|
|
62375
|
+
const uid = this.currentUid;
|
|
62376
|
+
if (!uid)
|
|
62377
|
+
return of([]);
|
|
62378
|
+
const runsQuery = query$1(collection(this.firestore, this.runsPath(uid)), orderBy('updatedAt', 'desc'), limit(limitCount));
|
|
62379
|
+
return new Observable((subscriber) => {
|
|
62380
|
+
const unsubscribe = onSnapshot(runsQuery, (snapshot) => subscriber.next(snapshot.docs.map((item) => item.data())), (error) => subscriber.error(error));
|
|
62381
|
+
return unsubscribe;
|
|
62382
|
+
});
|
|
62383
|
+
}
|
|
62384
|
+
async saveRun(run) {
|
|
62385
|
+
const uid = await this.ensureUser();
|
|
62386
|
+
await setDoc(this.runRef(uid, run.id), this.withoutUndefined({
|
|
62387
|
+
...run,
|
|
62388
|
+
userId: uid,
|
|
62389
|
+
updatedAt: new Date().toISOString(),
|
|
62390
|
+
updatedAtServer: serverTimestamp(),
|
|
62391
|
+
}), { merge: true });
|
|
62392
|
+
}
|
|
62393
|
+
async recordChallengeStarted(run) {
|
|
62394
|
+
const uid = await this.ensureUser();
|
|
62395
|
+
const current = await this.readStats(uid);
|
|
62396
|
+
await setDoc(this.statsRef(uid), {
|
|
62397
|
+
...current,
|
|
62398
|
+
userId: uid,
|
|
62399
|
+
challengesPlayed: current.challengesPlayed + 1,
|
|
62400
|
+
updatedAt: new Date().toISOString(),
|
|
62401
|
+
updatedAtServer: serverTimestamp(),
|
|
62402
|
+
}, { merge: true });
|
|
62403
|
+
await this.saveRun(run);
|
|
62404
|
+
}
|
|
62405
|
+
async applyRoundResult(args) {
|
|
62406
|
+
const uid = await this.ensureUser();
|
|
62407
|
+
const current = await this.readStats(uid);
|
|
62408
|
+
const next = {
|
|
62409
|
+
userId: uid,
|
|
62410
|
+
challengesPlayed: current.challengesPlayed,
|
|
62411
|
+
challengesCompleted: current.challengesCompleted + (args.completed ? 1 : 0),
|
|
62412
|
+
bestWinStreak: Math.max(current.bestWinStreak, args.run.bestStreakInRun),
|
|
62413
|
+
bestRoundReached: Math.max(current.bestRoundReached, args.roundReached),
|
|
62414
|
+
totalWins: current.totalWins + (args.won ? 1 : 0),
|
|
62415
|
+
totalLosses: current.totalLosses + (args.won ? 0 : 1),
|
|
62416
|
+
botsDefeated: current.botsDefeated + (args.won ? 1 : 0),
|
|
62417
|
+
powersUsed: {
|
|
62418
|
+
eagle: current.powersUsed.eagle + args.roundStats.powersUsed.eagle,
|
|
62419
|
+
bull: current.powersUsed.bull + args.roundStats.powersUsed.bull,
|
|
62420
|
+
kangaroo: current.powersUsed.kangaroo + args.roundStats.powersUsed.kangaroo,
|
|
62421
|
+
lion: current.powersUsed.lion + args.roundStats.powersUsed.lion,
|
|
62422
|
+
},
|
|
62423
|
+
powerCaptures: current.powerCaptures + args.roundStats.powerCaptures,
|
|
62424
|
+
promotions: current.promotions + args.roundStats.promotions,
|
|
62425
|
+
updatedAt: new Date().toISOString(),
|
|
62426
|
+
};
|
|
62427
|
+
await setDoc(this.statsRef(uid), { ...next, updatedAtServer: serverTimestamp() }, { merge: true });
|
|
62428
|
+
await this.saveRun(args.run);
|
|
62429
|
+
}
|
|
62430
|
+
emptyStats() {
|
|
62431
|
+
return {
|
|
62432
|
+
challengesPlayed: 0,
|
|
62433
|
+
challengesCompleted: 0,
|
|
62434
|
+
bestWinStreak: 0,
|
|
62435
|
+
bestRoundReached: 0,
|
|
62436
|
+
totalWins: 0,
|
|
62437
|
+
totalLosses: 0,
|
|
62438
|
+
botsDefeated: 0,
|
|
62439
|
+
powersUsed: { ...EMPTY_POWERS },
|
|
62440
|
+
powerCaptures: 0,
|
|
62441
|
+
promotions: 0,
|
|
62442
|
+
};
|
|
62443
|
+
}
|
|
62444
|
+
async readStats(uid) {
|
|
62445
|
+
// Firestore's web SDK does not need a transaction for these casual game stats.
|
|
62446
|
+
// Last-write-wins is acceptable for this first version because one run is active per browser.
|
|
62447
|
+
const snapshot = await getDoc(this.statsRef(uid));
|
|
62448
|
+
return snapshot.exists() ? this.normalizeStats(snapshot.data()) : this.emptyStats();
|
|
62449
|
+
}
|
|
62450
|
+
normalizeStats(value) {
|
|
62451
|
+
const empty = this.emptyStats();
|
|
62452
|
+
return {
|
|
62453
|
+
...empty,
|
|
62454
|
+
...value,
|
|
62455
|
+
powersUsed: {
|
|
62456
|
+
...EMPTY_POWERS,
|
|
62457
|
+
...(value.powersUsed ?? {}),
|
|
62458
|
+
},
|
|
62459
|
+
};
|
|
62460
|
+
}
|
|
62461
|
+
async ensureUser() {
|
|
62462
|
+
await this.firebase.whenFirebaseAuthReady();
|
|
62463
|
+
const user = this.firebaseAuth.currentUser;
|
|
62464
|
+
if (user?.uid) {
|
|
62465
|
+
await user.getIdToken();
|
|
62466
|
+
return user.uid;
|
|
62467
|
+
}
|
|
62468
|
+
throw new Error('CHESSIMALS_CHALLENGE_LOGIN_REQUIRED');
|
|
62469
|
+
}
|
|
62470
|
+
statsRef(uid) {
|
|
62471
|
+
return doc(this.firestore, `users/${uid}/miniGames/chessimals/challenge/stats`);
|
|
62472
|
+
}
|
|
62473
|
+
runRef(uid, runId) {
|
|
62474
|
+
return doc(this.firestore, `${this.runsPath(uid)}/${runId}`);
|
|
62475
|
+
}
|
|
62476
|
+
runsPath(uid) {
|
|
62477
|
+
return `users/${uid}/miniGames/chessimals/challengeRuns`;
|
|
62478
|
+
}
|
|
62479
|
+
withoutUndefined(value) {
|
|
62480
|
+
return Object.entries(value).reduce((acc, [key, entry]) => {
|
|
62481
|
+
if (entry !== undefined)
|
|
62482
|
+
acc[key] = entry;
|
|
62483
|
+
return acc;
|
|
62484
|
+
}, {});
|
|
62485
|
+
}
|
|
62486
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChessimalsChallengeProgressService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
62487
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChessimalsChallengeProgressService, providedIn: 'root' }); }
|
|
62488
|
+
}
|
|
62489
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChessimalsChallengeProgressService, decorators: [{
|
|
62490
|
+
type: Injectable,
|
|
62491
|
+
args: [{ providedIn: 'root' }]
|
|
62492
|
+
}] });
|
|
62493
|
+
|
|
62502
62494
|
const MINI_GAMES_I18N = {
|
|
62503
62495
|
es: {
|
|
62504
62496
|
menuTitle: 'Mini juegos',
|
|
@@ -62511,58 +62503,6 @@ const MINI_GAMES_I18N = {
|
|
|
62511
62503
|
bubbleDescription: 'Revienta grupos de burbujas, encadena combos y sube tu puntaje.',
|
|
62512
62504
|
chessimalsTitle: 'Chessimals',
|
|
62513
62505
|
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.',
|
|
62566
62506
|
soonTitle: 'Próximamente',
|
|
62567
62507
|
openGame: 'Jugar',
|
|
62568
62508
|
close: 'Cerrar',
|
|
@@ -62687,10 +62627,10 @@ const MINI_GAMES_I18N = {
|
|
|
62687
62627
|
chessimalsRulePowersTitle: 'Cuándo se activan los poderes',
|
|
62688
62628
|
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.',
|
|
62689
62629
|
chessimalsRuleCardsTitle: 'Cartas de animales',
|
|
62690
|
-
chessimalsRuleEagle: 'Águila: se mueve
|
|
62691
|
-
chessimalsRuleBull: 'Toro: se mueve en línea recta
|
|
62630
|
+
chessimalsRuleEagle: 'Águila: se mueve hasta 3 casillas en diagonal, hacia adelante o atrás.',
|
|
62631
|
+
chessimalsRuleBull: 'Toro: se mueve hasta 3 casillas en línea recta, incluso hacia los lados.',
|
|
62692
62632
|
chessimalsRuleKangaroo: 'Canguro: salta en L, como el caballo del ajedrez. Puede saltar por encima de piezas y caer libre o capturar una pieza rival.',
|
|
62693
|
-
chessimalsRuleLion: 'León: se mueve en cualquier dirección
|
|
62633
|
+
chessimalsRuleLion: 'León: se mueve hasta 3 casillas en cualquier dirección.',
|
|
62694
62634
|
chessimalsRuleLimitsTitle: 'Reglas de equilibrio',
|
|
62695
62635
|
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.',
|
|
62696
62636
|
chessimalsBoardSize: 'Tamaño del tablero',
|
|
@@ -62803,18 +62743,6 @@ const MINI_GAMES_I18N = {
|
|
|
62803
62743
|
chessimalsBotSprinterBody: 'Optimiza rutas de promoción.',
|
|
62804
62744
|
chessimalsBotSentinel: 'Centinela',
|
|
62805
62745
|
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.',
|
|
62818
62746
|
chessimalsBotExplorerTendency: 'Tiende a variar rutas, probar el centro y cometer errores suaves.',
|
|
62819
62747
|
chessimalsBotImpulsiveTendency: 'Tiende a capturar rápido, incluso cuando puede quedar expuesto.',
|
|
62820
62748
|
chessimalsBotRunnerTendency: 'Tiende a avanzar hacia la promoción antes que defender.',
|
|
@@ -62825,12 +62753,6 @@ const MINI_GAMES_I18N = {
|
|
|
62825
62753
|
chessimalsBotPredatorTendency: 'Tiende a forzar capturas y usar poderes agresivos.',
|
|
62826
62754
|
chessimalsBotSprinterTendency: 'Tiende a encontrar caminos rápidos de promoción.',
|
|
62827
62755
|
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.',
|
|
62834
62756
|
chessimalsBotReportTitle: 'Reporte del bot',
|
|
62835
62757
|
chessimalsBotReportVs: 'Contra {bot}',
|
|
62836
62758
|
chessimalsBotReportBody: '{outcome}. Hizo {captures} capturas y usó {powers} poderes. {style}',
|
|
@@ -62839,6 +62761,46 @@ const MINI_GAMES_I18N = {
|
|
|
62839
62761
|
chessimalsBotThinkingTitle: 'Chessibot está pensando',
|
|
62840
62762
|
chessimalsBotThinkingBody: 'El bot mueve las negras. Espera un momento para continuar.',
|
|
62841
62763
|
chessimalsBotYourTurnBody: 'Juegas con blancas. Toca uno de tus peones para ver sus movimientos.',
|
|
62764
|
+
chessimalsChallengeEyebrow: 'Nuevo modo',
|
|
62765
|
+
chessimalsChallengeTitle: 'Modo desafío',
|
|
62766
|
+
chessimalsChallengeBody: 'Tres vidas, ocho rivales y una ruta de peones cada vez más dura.',
|
|
62767
|
+
chessimalsChallengeStart: 'Empezar desafío',
|
|
62768
|
+
chessimalsChallengeContinue: 'Continuar desafío',
|
|
62769
|
+
chessimalsChallengeLives: 'Vidas',
|
|
62770
|
+
chessimalsChallengeFirstRival: 'Primer rival',
|
|
62771
|
+
chessimalsChallengeBestRound: 'Mejor ronda',
|
|
62772
|
+
chessimalsChallengeBestStreak: 'Mejor racha',
|
|
62773
|
+
chessimalsChallengePath: 'Ruta de rivales',
|
|
62774
|
+
chessimalsChallengeRound: 'Ronda',
|
|
62775
|
+
chessimalsChallengeRecentRuns: 'Últimos desafíos',
|
|
62776
|
+
chessimalsChallengeRunLine: 'ronda {round} · {wins} victorias',
|
|
62777
|
+
chessimalsChallengeStatusActive: 'Activo',
|
|
62778
|
+
chessimalsChallengeStatusCompleted: 'Completo',
|
|
62779
|
+
chessimalsChallengeStatusFailed: 'Sin vidas',
|
|
62780
|
+
chessimalsChallengeStatusAbandoned: 'Abandonado',
|
|
62781
|
+
chessimalsChallengeNewRecord: 'Nueva mejor marca',
|
|
62782
|
+
chessimalsChallengeNextRival: 'Siguiente rival',
|
|
62783
|
+
chessimalsChallengeNextRivalLabel: 'Próximo rival',
|
|
62784
|
+
chessimalsChallengePlayAgain: 'Jugar desafío otra vez',
|
|
62785
|
+
chessimalsChallengePowersUsed: 'Poderes',
|
|
62786
|
+
chessimalsChallengePowerCaptures: 'Capturas poder',
|
|
62787
|
+
chessimalsChallengePromotions: 'Promociones',
|
|
62788
|
+
chessimalsChallengeRoundWonTitle: 'Rival superado',
|
|
62789
|
+
chessimalsChallengeRoundWonBody: 'Derrotaste a {bot}. Te quedan {lives} vidas y usaste {powers} poderes.',
|
|
62790
|
+
chessimalsChallengeRoundLostTitle: 'Una vida menos',
|
|
62791
|
+
chessimalsChallengeRoundLostBody: '{bot} ganó esta ronda. Te quedan {lives} vidas para remontar.',
|
|
62792
|
+
chessimalsChallengeCompletedTitle: 'Desafío completo',
|
|
62793
|
+
chessimalsChallengeCompletedBody: 'Derrotaste {wins} rivales. Tus peones llegaron hasta el final.',
|
|
62794
|
+
chessimalsChallengeFailedTitle: 'Desafío terminado',
|
|
62795
|
+
chessimalsChallengeFailedBody: 'Llegaste lejos con {wins} victorias. La próxima ruta empieza con más colmillo.',
|
|
62796
|
+
chessimalsChallengeBotSproutIntro: 'Prueba rutas y te deja respirar.',
|
|
62797
|
+
chessimalsChallengeBotSentinelIntro: 'Cuida sus peones y bloquea caminos.',
|
|
62798
|
+
chessimalsChallengeBotHunterIntro: 'Busca capturas útiles desde temprano.',
|
|
62799
|
+
chessimalsChallengeBotJumperIntro: 'Activa poderes y abre rutas raras.',
|
|
62800
|
+
chessimalsChallengeBotPredatorIntro: 'Presiona con capturas y poderes agresivos.',
|
|
62801
|
+
chessimalsChallengeBotOracleIntro: 'Calcula amenazas antes de que aparezcan.',
|
|
62802
|
+
chessimalsChallengeBotSprinterIntro: 'Corre hacia la promoción sin pedir permiso.',
|
|
62803
|
+
chessimalsChallengeBotChampionIntro: 'Defiende, espera y castiga cada apuro.',
|
|
62842
62804
|
chessimalsCurrentTurn: 'Juegan: {player}',
|
|
62843
62805
|
chessimalsBoardFlips: 'El tablero se orienta automáticamente para quien tiene el turno.',
|
|
62844
62806
|
chessimalsRival: 'Rival',
|
|
@@ -62878,7 +62840,7 @@ const MINI_GAMES_I18N = {
|
|
|
62878
62840
|
chessimalsTutorialStep4Title: 'Devuelve el turno',
|
|
62879
62841
|
chessimalsTutorialStep4Body: 'Mueve el peón negro de la columna F una casilla hacia abajo para continuar.',
|
|
62880
62842
|
chessimalsTutorialStep5Title: 'Usa el poder Canguro',
|
|
62881
|
-
chessimalsTutorialStep5Body: 'Selecciona la carta Canguro y salta en L para capturar el peón negro.
|
|
62843
|
+
chessimalsTutorialStep5Body: 'Selecciona la carta Canguro y salta en L para capturar el peón negro.',
|
|
62882
62844
|
chessimalsTutorialStep6Title: 'Prepara la llegada',
|
|
62883
62845
|
chessimalsTutorialStep6Body: 'Mueve el último peón negro hacia abajo. Después tendrás camino para ganar.',
|
|
62884
62846
|
chessimalsTutorialStep7Title: 'Llega a la última fila',
|
|
@@ -62942,58 +62904,6 @@ const MINI_GAMES_I18N = {
|
|
|
62942
62904
|
bubbleDescription: 'Pop bubble groups, chain combos, and push your score higher.',
|
|
62943
62905
|
chessimalsTitle: 'Chessimals',
|
|
62944
62906
|
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.',
|
|
62997
62907
|
soonTitle: 'Coming soon',
|
|
62998
62908
|
openGame: 'Play',
|
|
62999
62909
|
close: 'Close',
|
|
@@ -63118,10 +63028,10 @@ const MINI_GAMES_I18N = {
|
|
|
63118
63028
|
chessimalsRulePowersTitle: 'When powers unlock',
|
|
63119
63029
|
chessimalsRulePowersBody: 'Your cards unlock when one of your pawns crosses the center line, or when a rival pawn enters your half of the board.',
|
|
63120
63030
|
chessimalsRuleCardsTitle: 'Animal cards',
|
|
63121
|
-
chessimalsRuleEagle: 'Eagle: moves
|
|
63122
|
-
chessimalsRuleBull: 'Bull: moves in a straight line
|
|
63031
|
+
chessimalsRuleEagle: 'Eagle: moves up to 3 squares diagonally, forward or backward.',
|
|
63032
|
+
chessimalsRuleBull: 'Bull: moves up to 3 squares in a straight line, including sideways.',
|
|
63123
63033
|
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.',
|
|
63124
|
-
chessimalsRuleLion: 'Lion: moves
|
|
63034
|
+
chessimalsRuleLion: 'Lion: moves up to 3 squares in any direction.',
|
|
63125
63035
|
chessimalsRuleLimitsTitle: 'Balance rules',
|
|
63126
63036
|
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.',
|
|
63127
63037
|
chessimalsBoardSize: 'Board size',
|
|
@@ -63234,18 +63144,6 @@ const MINI_GAMES_I18N = {
|
|
|
63234
63144
|
chessimalsBotSprinterBody: 'Optimizes promotion routes.',
|
|
63235
63145
|
chessimalsBotSentinel: 'Sentinel',
|
|
63236
63146
|
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.',
|
|
63249
63147
|
chessimalsBotExplorerTendency: 'Tends to vary routes, test the center, and make soft mistakes.',
|
|
63250
63148
|
chessimalsBotImpulsiveTendency: 'Tends to capture quickly, even when it can become exposed.',
|
|
63251
63149
|
chessimalsBotRunnerTendency: 'Tends to push toward promotion before defending.',
|
|
@@ -63256,12 +63154,6 @@ const MINI_GAMES_I18N = {
|
|
|
63256
63154
|
chessimalsBotPredatorTendency: 'Tends to force captures and use aggressive powers.',
|
|
63257
63155
|
chessimalsBotSprinterTendency: 'Tends to find fast promotion paths.',
|
|
63258
63156
|
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.',
|
|
63265
63157
|
chessimalsBotReportTitle: 'Bot report',
|
|
63266
63158
|
chessimalsBotReportVs: 'Against {bot}',
|
|
63267
63159
|
chessimalsBotReportBody: '{outcome}. It made {captures} captures and used {powers} powers. {style}',
|
|
@@ -63270,6 +63162,46 @@ const MINI_GAMES_I18N = {
|
|
|
63270
63162
|
chessimalsBotThinkingTitle: 'Chessibot is thinking',
|
|
63271
63163
|
chessimalsBotThinkingBody: 'The bot is moving black. Wait a moment to continue.',
|
|
63272
63164
|
chessimalsBotYourTurnBody: 'You play white. Tap one of your pawns to see its moves.',
|
|
63165
|
+
chessimalsChallengeEyebrow: 'New mode',
|
|
63166
|
+
chessimalsChallengeTitle: 'Challenge mode',
|
|
63167
|
+
chessimalsChallengeBody: 'Three lives, eight rivals, and a pawn path that gets sharper every round.',
|
|
63168
|
+
chessimalsChallengeStart: 'Start challenge',
|
|
63169
|
+
chessimalsChallengeContinue: 'Continue challenge',
|
|
63170
|
+
chessimalsChallengeLives: 'Lives',
|
|
63171
|
+
chessimalsChallengeFirstRival: 'First rival',
|
|
63172
|
+
chessimalsChallengeBestRound: 'Best round',
|
|
63173
|
+
chessimalsChallengeBestStreak: 'Best streak',
|
|
63174
|
+
chessimalsChallengePath: 'Rival path',
|
|
63175
|
+
chessimalsChallengeRound: 'Round',
|
|
63176
|
+
chessimalsChallengeRecentRuns: 'Recent challenges',
|
|
63177
|
+
chessimalsChallengeRunLine: 'round {round} · {wins} wins',
|
|
63178
|
+
chessimalsChallengeStatusActive: 'Active',
|
|
63179
|
+
chessimalsChallengeStatusCompleted: 'Complete',
|
|
63180
|
+
chessimalsChallengeStatusFailed: 'No lives',
|
|
63181
|
+
chessimalsChallengeStatusAbandoned: 'Abandoned',
|
|
63182
|
+
chessimalsChallengeNewRecord: 'New personal best',
|
|
63183
|
+
chessimalsChallengeNextRival: 'Next rival',
|
|
63184
|
+
chessimalsChallengeNextRivalLabel: 'Next rival',
|
|
63185
|
+
chessimalsChallengePlayAgain: 'Play challenge again',
|
|
63186
|
+
chessimalsChallengePowersUsed: 'Powers',
|
|
63187
|
+
chessimalsChallengePowerCaptures: 'Power captures',
|
|
63188
|
+
chessimalsChallengePromotions: 'Promotions',
|
|
63189
|
+
chessimalsChallengeRoundWonTitle: 'Rival cleared',
|
|
63190
|
+
chessimalsChallengeRoundWonBody: 'You defeated {bot}. You have {lives} lives left and used {powers} powers.',
|
|
63191
|
+
chessimalsChallengeRoundLostTitle: 'One life down',
|
|
63192
|
+
chessimalsChallengeRoundLostBody: '{bot} won this round. You have {lives} lives left to climb back.',
|
|
63193
|
+
chessimalsChallengeCompletedTitle: 'Challenge complete',
|
|
63194
|
+
chessimalsChallengeCompletedBody: 'You defeated {wins} rivals. Your pawns made it all the way.',
|
|
63195
|
+
chessimalsChallengeFailedTitle: 'Challenge over',
|
|
63196
|
+
chessimalsChallengeFailedBody: 'You got far with {wins} wins. The next run starts wiser.',
|
|
63197
|
+
chessimalsChallengeBotSproutIntro: 'Tests routes and gives you room.',
|
|
63198
|
+
chessimalsChallengeBotSentinelIntro: 'Protects pawns and blocks paths.',
|
|
63199
|
+
chessimalsChallengeBotHunterIntro: 'Looks for useful captures early.',
|
|
63200
|
+
chessimalsChallengeBotJumperIntro: 'Unlocks powers and opens odd routes.',
|
|
63201
|
+
chessimalsChallengeBotPredatorIntro: 'Pressures with captures and aggressive powers.',
|
|
63202
|
+
chessimalsChallengeBotOracleIntro: 'Calculates threats before they appear.',
|
|
63203
|
+
chessimalsChallengeBotSprinterIntro: 'Runs toward promotion without asking.',
|
|
63204
|
+
chessimalsChallengeBotChampionIntro: 'Defends, waits, and punishes every rush.',
|
|
63273
63205
|
chessimalsCurrentTurn: '{player} to move',
|
|
63274
63206
|
chessimalsBoardFlips: 'The board automatically faces the player whose turn it is.',
|
|
63275
63207
|
chessimalsRival: 'Rival',
|
|
@@ -63309,7 +63241,7 @@ const MINI_GAMES_I18N = {
|
|
|
63309
63241
|
chessimalsTutorialStep4Title: 'Return the turn',
|
|
63310
63242
|
chessimalsTutorialStep4Body: 'Move the black pawn on file F one square downward to continue.',
|
|
63311
63243
|
chessimalsTutorialStep5Title: 'Use the Kangaroo power',
|
|
63312
|
-
chessimalsTutorialStep5Body: 'Select the Kangaroo card and jump in an L shape to capture the black pawn.
|
|
63244
|
+
chessimalsTutorialStep5Body: 'Select the Kangaroo card and jump in an L shape to capture the black pawn.',
|
|
63313
63245
|
chessimalsTutorialStep6Title: 'Prepare the finish',
|
|
63314
63246
|
chessimalsTutorialStep6Body: 'Move the last black pawn downward. Then your path to win is open.',
|
|
63315
63247
|
chessimalsTutorialStep7Title: 'Reach the last row',
|
|
@@ -64401,6 +64333,16 @@ const ANIMALS = [
|
|
|
64401
64333
|
{ type: 'kangaroo', assetSrc: 'assets/games/chessimals/kangaroo.jpg', tone: 523.25 },
|
|
64402
64334
|
{ type: 'lion', assetSrc: 'assets/games/chessimals/lion.jpg', tone: 392 },
|
|
64403
64335
|
];
|
|
64336
|
+
const CHESSIMALS_CHALLENGE_LADDER = [
|
|
64337
|
+
{ id: 'sprout', round: 1, profileId: 'explorer', difficulty: 'easy', boardSize: 6, introKey: 'chessimalsChallengeBotSproutIntro' },
|
|
64338
|
+
{ id: 'sentinel', round: 2, profileId: 'guardian', difficulty: 'normal', boardSize: 6, introKey: 'chessimalsChallengeBotSentinelIntro' },
|
|
64339
|
+
{ id: 'hunter', round: 3, profileId: 'hunter', difficulty: 'normal', boardSize: 6, introKey: 'chessimalsChallengeBotHunterIntro' },
|
|
64340
|
+
{ id: 'jumper', round: 4, profileId: 'jumper', difficulty: 'normal', boardSize: 6, introKey: 'chessimalsChallengeBotJumperIntro' },
|
|
64341
|
+
{ id: 'predator', round: 5, profileId: 'predator', difficulty: 'hard', boardSize: 8, introKey: 'chessimalsChallengeBotPredatorIntro' },
|
|
64342
|
+
{ id: 'oracle', round: 6, profileId: 'strategist', difficulty: 'hard', boardSize: 8, introKey: 'chessimalsChallengeBotOracleIntro' },
|
|
64343
|
+
{ id: 'sprinter', round: 7, profileId: 'sprinter', difficulty: 'hard', boardSize: 8, introKey: 'chessimalsChallengeBotSprinterIntro' },
|
|
64344
|
+
{ id: 'champion', round: 8, profileId: 'sentinel', difficulty: 'hard', boardSize: 8, introKey: 'chessimalsChallengeBotChampionIntro' },
|
|
64345
|
+
];
|
|
64404
64346
|
class ChessimalsGameComponent {
|
|
64405
64347
|
set onlineGameId(value) {
|
|
64406
64348
|
const gameId = this.online.normalizeGameId(value ?? '');
|
|
@@ -64415,6 +64357,7 @@ class ChessimalsGameComponent {
|
|
|
64415
64357
|
this.i18n = inject(I18nService);
|
|
64416
64358
|
this.audio = inject(RetroAudioService);
|
|
64417
64359
|
this.online = inject(ChessimalsOnlineService);
|
|
64360
|
+
this.challengeProgress = inject(ChessimalsChallengeProgressService);
|
|
64418
64361
|
this.router = inject(Router);
|
|
64419
64362
|
this.toast = inject(ToastService);
|
|
64420
64363
|
this.auth = inject(AuthService);
|
|
@@ -64426,6 +64369,7 @@ class ChessimalsGameComponent {
|
|
|
64426
64369
|
this.localModes = ['one-device', 'bot'];
|
|
64427
64370
|
this.botDifficulties = ['easy', 'normal', 'hard'];
|
|
64428
64371
|
this.botProfiles = CHESSIMALS_BOT_PROFILES;
|
|
64372
|
+
this.challengeLadder = CHESSIMALS_CHALLENGE_LADDER;
|
|
64429
64373
|
this.animals = ANIMALS;
|
|
64430
64374
|
this.valtechComponentsVersion = VERSION;
|
|
64431
64375
|
this.screen = signal('home');
|
|
@@ -64435,6 +64379,14 @@ class ChessimalsGameComponent {
|
|
|
64435
64379
|
this.selectedBotProfileId = signal('hunter');
|
|
64436
64380
|
this.gameBotProfileId = signal(undefined);
|
|
64437
64381
|
this.game = signal(createChessimalsGame(6));
|
|
64382
|
+
this.challengePhase = signal('idle');
|
|
64383
|
+
this.challengeRun = signal(undefined);
|
|
64384
|
+
this.challengeStats = signal(this.challengeProgress.emptyStats());
|
|
64385
|
+
this.challengeHistory = signal([]);
|
|
64386
|
+
this.challengeLastWon = signal(undefined);
|
|
64387
|
+
this.challengeLastBot = signal(undefined);
|
|
64388
|
+
this.challengeLastRoundStats = signal(undefined);
|
|
64389
|
+
this.challengeNewRecord = signal(false);
|
|
64438
64390
|
this.selectedPieceId = signal(undefined);
|
|
64439
64391
|
this.selectedAnimal = signal(undefined);
|
|
64440
64392
|
this.isRulesModalOpen = signal(false);
|
|
@@ -64471,7 +64423,6 @@ class ChessimalsGameComponent {
|
|
|
64471
64423
|
});
|
|
64472
64424
|
this.botThinking = signal(false);
|
|
64473
64425
|
this.confirmAction = signal(undefined);
|
|
64474
|
-
this.confirmedAction = signal(undefined);
|
|
64475
64426
|
this.onlineJoinCode = signal('');
|
|
64476
64427
|
this.onlineLoading = signal(false);
|
|
64477
64428
|
this.onlineAction = signal(undefined);
|
|
@@ -64556,6 +64507,12 @@ class ChessimalsGameComponent {
|
|
|
64556
64507
|
const profileId = this.gameBotProfileId();
|
|
64557
64508
|
return profileId ? this.botProfiles.find((profile) => profile.id === profileId) : undefined;
|
|
64558
64509
|
});
|
|
64510
|
+
this.activeChallengeBot = computed(() => {
|
|
64511
|
+
const run = this.challengeRun();
|
|
64512
|
+
if (!run)
|
|
64513
|
+
return undefined;
|
|
64514
|
+
return this.challengeLadder[Math.max(0, run.currentRound - 1)];
|
|
64515
|
+
});
|
|
64559
64516
|
this.miniGamesRoute = '/mini-games';
|
|
64560
64517
|
this.projectionMode = false;
|
|
64561
64518
|
this.replayEntries = computed(() => this.game().moveHistory ?? []);
|
|
@@ -64958,13 +64915,30 @@ class ChessimalsGameComponent {
|
|
|
64958
64915
|
const user = this.loggedInUser();
|
|
64959
64916
|
if (user) {
|
|
64960
64917
|
this.queueHistoryWatch();
|
|
64918
|
+
this.watchChallengeStats();
|
|
64961
64919
|
return;
|
|
64962
64920
|
}
|
|
64963
64921
|
this.historyUid = undefined;
|
|
64964
64922
|
this.historySubscription?.unsubscribe();
|
|
64965
64923
|
this.historySubscription = undefined;
|
|
64966
64924
|
this.onlineHistory.set([]);
|
|
64967
|
-
|
|
64925
|
+
this.challengeStatsSubscription?.unsubscribe();
|
|
64926
|
+
this.challengeStatsSubscription = undefined;
|
|
64927
|
+
this.challengeRunsSubscription?.unsubscribe();
|
|
64928
|
+
this.challengeRunsSubscription = undefined;
|
|
64929
|
+
this.challengeStats.set(this.challengeProgress.emptyStats());
|
|
64930
|
+
this.challengeHistory.set([]);
|
|
64931
|
+
}, { allowSignalWrites: true });
|
|
64932
|
+
effect(() => {
|
|
64933
|
+
const game = this.game();
|
|
64934
|
+
if (game.status !== 'finished' || this.challengePhase() !== 'playing')
|
|
64935
|
+
return;
|
|
64936
|
+
const key = `${game.id}:${game.moveCount}:${game.winner ?? 'none'}:${game.winnerReason ?? 'none'}`;
|
|
64937
|
+
if (this.lastChallengeHandledKey === key)
|
|
64938
|
+
return;
|
|
64939
|
+
this.lastChallengeHandledKey = key;
|
|
64940
|
+
this.handleChallengeRoundFinished(game);
|
|
64941
|
+
}, { allowSignalWrites: true });
|
|
64968
64942
|
}
|
|
64969
64943
|
ngOnDestroy() {
|
|
64970
64944
|
this.resetFinishedLocalGameForNextVisit(true);
|
|
@@ -64986,6 +64960,8 @@ class ChessimalsGameComponent {
|
|
|
64986
64960
|
clearTimeout(this.historyWatchTimer);
|
|
64987
64961
|
this.onlineSubscription?.unsubscribe();
|
|
64988
64962
|
this.historySubscription?.unsubscribe();
|
|
64963
|
+
this.challengeStatsSubscription?.unsubscribe();
|
|
64964
|
+
this.challengeRunsSubscription?.unsubscribe();
|
|
64989
64965
|
}
|
|
64990
64966
|
ngOnInit() {
|
|
64991
64967
|
this.routeSubscription.add(this.router.events.subscribe((event) => {
|
|
@@ -65012,11 +64988,82 @@ class ChessimalsGameComponent {
|
|
|
65012
64988
|
const raw = typeof value === 'number' ? value : value.upper ?? value.lower ?? 0;
|
|
65013
64989
|
return Math.min(100, Math.max(0, Math.round(raw)));
|
|
65014
64990
|
}
|
|
64991
|
+
startChallenge() {
|
|
64992
|
+
const now = new Date().toISOString();
|
|
64993
|
+
const run = {
|
|
64994
|
+
id: `challenge-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`,
|
|
64995
|
+
status: 'active',
|
|
64996
|
+
livesStart: 3,
|
|
64997
|
+
livesRemaining: 3,
|
|
64998
|
+
currentRound: 1,
|
|
64999
|
+
wins: 0,
|
|
65000
|
+
losses: 0,
|
|
65001
|
+
bestStreakInRun: 0,
|
|
65002
|
+
currentStreak: 0,
|
|
65003
|
+
botLadder: this.challengeLadder.map((bot) => bot.id),
|
|
65004
|
+
roundResults: [],
|
|
65005
|
+
startedAt: now,
|
|
65006
|
+
updatedAt: now,
|
|
65007
|
+
};
|
|
65008
|
+
this.challengeRun.set(run);
|
|
65009
|
+
this.challengeLastWon.set(undefined);
|
|
65010
|
+
this.challengeLastBot.set(undefined);
|
|
65011
|
+
this.challengeLastRoundStats.set(undefined);
|
|
65012
|
+
this.challengeNewRecord.set(false);
|
|
65013
|
+
this.challengeNewRecord.set(false);
|
|
65014
|
+
this.startChallengeRound(run);
|
|
65015
|
+
void this.challengeProgress.recordChallengeStarted(run).catch((error) => {
|
|
65016
|
+
console.warn('[Chessimals] challenge run save failed', error);
|
|
65017
|
+
});
|
|
65018
|
+
}
|
|
65019
|
+
continueChallenge() {
|
|
65020
|
+
const run = this.challengeRun();
|
|
65021
|
+
if (!run || this.challengePhase() !== 'between')
|
|
65022
|
+
return;
|
|
65023
|
+
this.startChallengeRound(run);
|
|
65024
|
+
}
|
|
65025
|
+
startChallengeRound(run) {
|
|
65026
|
+
const bot = this.challengeLadder[Math.max(0, run.currentRound - 1)];
|
|
65027
|
+
if (!bot) {
|
|
65028
|
+
this.challengePhase.set('completed');
|
|
65029
|
+
return;
|
|
65030
|
+
}
|
|
65031
|
+
this.onlineSubscription?.unsubscribe();
|
|
65032
|
+
this.openedOnlineGameId = undefined;
|
|
65033
|
+
this.openingOnlineGameId = undefined;
|
|
65034
|
+
this.clearBotTurn();
|
|
65035
|
+
this.tutorialMode.set(false);
|
|
65036
|
+
this.onlineConnectionState.set('idle');
|
|
65037
|
+
this.selectedLocalMode.set('bot');
|
|
65038
|
+
this.selectedBoardSize.set(bot.boardSize);
|
|
65039
|
+
this.selectedBotDifficulty.set(bot.difficulty);
|
|
65040
|
+
this.selectedBotProfileId.set(bot.profileId);
|
|
65041
|
+
this.gameBotProfileId.set(bot.profileId);
|
|
65042
|
+
this.challengePhase.set('playing');
|
|
65043
|
+
this.lastChallengeHandledKey = undefined;
|
|
65044
|
+
this.lastOutcomeSoundKey = undefined;
|
|
65045
|
+
this.audio.stopMusic();
|
|
65046
|
+
this.game.set(createChessimalsGame(bot.boardSize));
|
|
65047
|
+
this.clearReview();
|
|
65048
|
+
this.selectedPieceId.set(undefined);
|
|
65049
|
+
this.selectedAnimal.set(undefined);
|
|
65050
|
+
this.movingPiece.set(undefined);
|
|
65051
|
+
this.screen.set('game');
|
|
65052
|
+
this.startChessimalsGameMusicSoon();
|
|
65053
|
+
this.audio.flip();
|
|
65054
|
+
this.focusBoardSoon();
|
|
65055
|
+
}
|
|
65015
65056
|
startGame() {
|
|
65016
65057
|
this.onlineSubscription?.unsubscribe();
|
|
65017
65058
|
this.openedOnlineGameId = undefined;
|
|
65018
65059
|
this.openingOnlineGameId = undefined;
|
|
65019
65060
|
this.clearBotTurn();
|
|
65061
|
+
this.challengePhase.set('idle');
|
|
65062
|
+
this.challengeRun.set(undefined);
|
|
65063
|
+
this.challengeLastWon.set(undefined);
|
|
65064
|
+
this.challengeLastBot.set(undefined);
|
|
65065
|
+
this.challengeLastRoundStats.set(undefined);
|
|
65066
|
+
this.challengeNewRecord.set(false);
|
|
65020
65067
|
this.tutorialMode.set(false);
|
|
65021
65068
|
this.onlineConnectionState.set('idle');
|
|
65022
65069
|
this.gameBotProfileId.set(this.selectedLocalMode() === 'bot' ? this.selectedBotProfileId() : undefined);
|
|
@@ -65033,6 +65080,72 @@ class ChessimalsGameComponent {
|
|
|
65033
65080
|
this.focusBoardSoon();
|
|
65034
65081
|
this.queueBotTurnIfNeeded();
|
|
65035
65082
|
}
|
|
65083
|
+
handleChallengeRoundFinished(game) {
|
|
65084
|
+
const run = this.challengeRun();
|
|
65085
|
+
const bot = this.activeChallengeBot();
|
|
65086
|
+
if (!run || !bot)
|
|
65087
|
+
return;
|
|
65088
|
+
const won = game.winner === 'white';
|
|
65089
|
+
const roundStats = this.createChallengeRoundStats(game);
|
|
65090
|
+
const nextLives = won ? run.livesRemaining : Math.max(0, run.livesRemaining - 1);
|
|
65091
|
+
const nextStreak = won ? run.currentStreak + 1 : 0;
|
|
65092
|
+
const completed = won && run.currentRound >= this.challengeLadder.length;
|
|
65093
|
+
const failed = !won && nextLives <= 0;
|
|
65094
|
+
const finishedAt = new Date().toISOString();
|
|
65095
|
+
const roundResult = {
|
|
65096
|
+
round: run.currentRound,
|
|
65097
|
+
botId: bot.id,
|
|
65098
|
+
profileId: bot.profileId,
|
|
65099
|
+
won,
|
|
65100
|
+
livesRemaining: nextLives,
|
|
65101
|
+
stats: roundStats,
|
|
65102
|
+
finishedAt,
|
|
65103
|
+
};
|
|
65104
|
+
const nextRun = {
|
|
65105
|
+
...run,
|
|
65106
|
+
status: completed ? 'completed' : failed ? 'failed' : 'active',
|
|
65107
|
+
livesRemaining: nextLives,
|
|
65108
|
+
wins: run.wins + (won ? 1 : 0),
|
|
65109
|
+
losses: run.losses + (won ? 0 : 1),
|
|
65110
|
+
currentStreak: nextStreak,
|
|
65111
|
+
bestStreakInRun: Math.max(run.bestStreakInRun, nextStreak),
|
|
65112
|
+
currentRound: completed || failed ? run.currentRound : Math.min(this.challengeLadder.length, run.currentRound + 1),
|
|
65113
|
+
roundResults: [...run.roundResults, roundResult],
|
|
65114
|
+
updatedAt: finishedAt,
|
|
65115
|
+
finishedAt: completed || failed ? finishedAt : undefined,
|
|
65116
|
+
};
|
|
65117
|
+
this.challengeRun.set(nextRun);
|
|
65118
|
+
this.challengeLastWon.set(won);
|
|
65119
|
+
this.challengeLastBot.set(bot);
|
|
65120
|
+
this.challengeLastRoundStats.set(roundStats);
|
|
65121
|
+
this.challengeNewRecord.set(run.currentRound > this.challengeStats().bestRoundReached
|
|
65122
|
+
|| Math.max(run.bestStreakInRun, nextStreak) > this.challengeStats().bestWinStreak);
|
|
65123
|
+
this.challengePhase.set(completed ? 'completed' : failed ? 'failed' : 'between');
|
|
65124
|
+
void this.challengeProgress.applyRoundResult({
|
|
65125
|
+
run: nextRun,
|
|
65126
|
+
roundReached: run.currentRound,
|
|
65127
|
+
won,
|
|
65128
|
+
completed,
|
|
65129
|
+
roundStats,
|
|
65130
|
+
}).catch((error) => {
|
|
65131
|
+
console.warn('[Chessimals] challenge stats save failed', error);
|
|
65132
|
+
});
|
|
65133
|
+
}
|
|
65134
|
+
abandonChallengeIfNeeded() {
|
|
65135
|
+
const run = this.challengeRun();
|
|
65136
|
+
if (!run || run.status !== 'active' || this.challengePhase() === 'idle')
|
|
65137
|
+
return;
|
|
65138
|
+
const now = new Date().toISOString();
|
|
65139
|
+
const nextRun = {
|
|
65140
|
+
...run,
|
|
65141
|
+
status: 'abandoned',
|
|
65142
|
+
updatedAt: now,
|
|
65143
|
+
finishedAt: now,
|
|
65144
|
+
};
|
|
65145
|
+
void this.challengeProgress.saveRun(nextRun).catch((error) => {
|
|
65146
|
+
console.warn('[Chessimals] challenge abandon save failed', error);
|
|
65147
|
+
});
|
|
65148
|
+
}
|
|
65036
65149
|
startTutorial() {
|
|
65037
65150
|
this.onlineSubscription?.unsubscribe();
|
|
65038
65151
|
this.openedOnlineGameId = undefined;
|
|
@@ -65180,6 +65293,12 @@ class ChessimalsGameComponent {
|
|
|
65180
65293
|
this.resetToModeSetup();
|
|
65181
65294
|
}
|
|
65182
65295
|
resetToModeSetup() {
|
|
65296
|
+
this.abandonChallengeIfNeeded();
|
|
65297
|
+
this.challengePhase.set('idle');
|
|
65298
|
+
this.challengeRun.set(undefined);
|
|
65299
|
+
this.challengeLastWon.set(undefined);
|
|
65300
|
+
this.challengeLastBot.set(undefined);
|
|
65301
|
+
this.challengeLastRoundStats.set(undefined);
|
|
65183
65302
|
this.tutorialMode.set(false);
|
|
65184
65303
|
this.resetFinishedLocalGameForNextVisit();
|
|
65185
65304
|
this.onlineSubscription?.unsubscribe();
|
|
@@ -65224,6 +65343,8 @@ class ChessimalsGameComponent {
|
|
|
65224
65343
|
}
|
|
65225
65344
|
}
|
|
65226
65345
|
requestRestartGame() {
|
|
65346
|
+
if (this.isChallengeActive())
|
|
65347
|
+
return;
|
|
65227
65348
|
if (!this.canControlCurrentGame())
|
|
65228
65349
|
return;
|
|
65229
65350
|
this.confirmAction.set('restart');
|
|
@@ -65246,12 +65367,13 @@ class ChessimalsGameComponent {
|
|
|
65246
65367
|
closeConfirmModal() {
|
|
65247
65368
|
this.confirmAction.set(undefined);
|
|
65248
65369
|
}
|
|
65249
|
-
|
|
65250
|
-
|
|
65251
|
-
|
|
65252
|
-
this.confirmedAction.set(undefined);
|
|
65253
|
-
if (!action)
|
|
65370
|
+
confirmPendingAction(token) {
|
|
65371
|
+
if (token !== 'confirm') {
|
|
65372
|
+
this.closeConfirmModal();
|
|
65254
65373
|
return;
|
|
65374
|
+
}
|
|
65375
|
+
const action = this.confirmAction();
|
|
65376
|
+
this.confirmAction.set(undefined);
|
|
65255
65377
|
if (action === 'restart') {
|
|
65256
65378
|
this.restartGame();
|
|
65257
65379
|
return;
|
|
@@ -65268,15 +65390,6 @@ class ChessimalsGameComponent {
|
|
|
65268
65390
|
this.resignGame();
|
|
65269
65391
|
}
|
|
65270
65392
|
}
|
|
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
|
-
}
|
|
65280
65393
|
resignGame() {
|
|
65281
65394
|
const game = this.game();
|
|
65282
65395
|
if (game.status === 'finished')
|
|
@@ -66126,6 +66239,18 @@ class ChessimalsGameComponent {
|
|
|
66126
66239
|
error: () => this.onlineHistory.set([]),
|
|
66127
66240
|
});
|
|
66128
66241
|
}
|
|
66242
|
+
watchChallengeStats() {
|
|
66243
|
+
if (this.challengeStatsSubscription)
|
|
66244
|
+
return;
|
|
66245
|
+
this.challengeStatsSubscription = this.challengeProgress.watchStats().subscribe({
|
|
66246
|
+
next: (stats) => this.challengeStats.set(stats ?? this.challengeProgress.emptyStats()),
|
|
66247
|
+
error: () => this.challengeStats.set(this.challengeProgress.emptyStats()),
|
|
66248
|
+
});
|
|
66249
|
+
this.challengeRunsSubscription = this.challengeProgress.watchRecentRuns(4).subscribe({
|
|
66250
|
+
next: (runs) => this.challengeHistory.set(runs),
|
|
66251
|
+
error: () => this.challengeHistory.set([]),
|
|
66252
|
+
});
|
|
66253
|
+
}
|
|
66129
66254
|
unlockedLabel(color) {
|
|
66130
66255
|
return this.game().players[color].powerUnlocked ? this.t('chessimalsUnlocked') : this.t('chessimalsLocked');
|
|
66131
66256
|
}
|
|
@@ -66157,6 +66282,104 @@ class ChessimalsGameComponent {
|
|
|
66157
66282
|
botProfileTendency(profile) {
|
|
66158
66283
|
return this.t(`chessimalsBot${this.capitalize(profile.id)}Tendency`);
|
|
66159
66284
|
}
|
|
66285
|
+
botProfileAvatar(profileId) {
|
|
66286
|
+
return this.botProfiles.find((profile) => profile.id === profileId)?.avatar ?? '♟';
|
|
66287
|
+
}
|
|
66288
|
+
challengeOpeningBot() {
|
|
66289
|
+
return this.challengeLadder[0];
|
|
66290
|
+
}
|
|
66291
|
+
challengeBotName(bot) {
|
|
66292
|
+
const profile = this.botProfiles.find((item) => item.id === bot.profileId);
|
|
66293
|
+
return profile ? this.botProfileLabel(profile) : this.t('chessimalsBotName');
|
|
66294
|
+
}
|
|
66295
|
+
challengeRunStatusLabel(run) {
|
|
66296
|
+
if (run.status === 'completed')
|
|
66297
|
+
return this.t('chessimalsChallengeStatusCompleted');
|
|
66298
|
+
if (run.status === 'failed')
|
|
66299
|
+
return this.t('chessimalsChallengeStatusFailed');
|
|
66300
|
+
if (run.status === 'abandoned')
|
|
66301
|
+
return this.t('chessimalsChallengeStatusAbandoned');
|
|
66302
|
+
return this.t('chessimalsChallengeStatusActive');
|
|
66303
|
+
}
|
|
66304
|
+
challengeRunLine(run) {
|
|
66305
|
+
return this.t('chessimalsChallengeRunLine')
|
|
66306
|
+
.replace('{round}', String(run.currentRound))
|
|
66307
|
+
.replace('{wins}', String(run.wins));
|
|
66308
|
+
}
|
|
66309
|
+
isChallengeActive() {
|
|
66310
|
+
return this.challengePhase() !== 'idle' && !!this.challengeRun();
|
|
66311
|
+
}
|
|
66312
|
+
challengeRoundLabel() {
|
|
66313
|
+
const run = this.challengeRun();
|
|
66314
|
+
if (!run)
|
|
66315
|
+
return '-';
|
|
66316
|
+
return `${run.currentRound}/${this.challengeLadder.length}`;
|
|
66317
|
+
}
|
|
66318
|
+
challengeLivesLabel() {
|
|
66319
|
+
const run = this.challengeRun();
|
|
66320
|
+
if (!run)
|
|
66321
|
+
return '-';
|
|
66322
|
+
return '♥'.repeat(Math.max(0, run.livesRemaining)) || '0';
|
|
66323
|
+
}
|
|
66324
|
+
challengeOutcomeTitle() {
|
|
66325
|
+
const phase = this.challengePhase();
|
|
66326
|
+
if (phase === 'completed')
|
|
66327
|
+
return this.t('chessimalsChallengeCompletedTitle');
|
|
66328
|
+
if (phase === 'failed')
|
|
66329
|
+
return this.t('chessimalsChallengeFailedTitle');
|
|
66330
|
+
return this.challengeLastWon()
|
|
66331
|
+
? this.t('chessimalsChallengeRoundWonTitle')
|
|
66332
|
+
: this.t('chessimalsChallengeRoundLostTitle');
|
|
66333
|
+
}
|
|
66334
|
+
challengeOutcomeBody() {
|
|
66335
|
+
const run = this.challengeRun();
|
|
66336
|
+
const stats = this.challengeLastRoundStats();
|
|
66337
|
+
const bot = this.challengeLastBot() ?? this.activeChallengeBot();
|
|
66338
|
+
const botName = bot ? this.challengeBotName(bot) : this.t('chessimalsBotName');
|
|
66339
|
+
const bodyKey = this.challengePhase() === 'completed'
|
|
66340
|
+
? 'chessimalsChallengeCompletedBody'
|
|
66341
|
+
: this.challengePhase() === 'failed'
|
|
66342
|
+
? 'chessimalsChallengeFailedBody'
|
|
66343
|
+
: this.challengeLastWon()
|
|
66344
|
+
? 'chessimalsChallengeRoundWonBody'
|
|
66345
|
+
: 'chessimalsChallengeRoundLostBody';
|
|
66346
|
+
return this.t(bodyKey)
|
|
66347
|
+
.replace('{bot}', botName)
|
|
66348
|
+
.replace('{lives}', String(run?.livesRemaining ?? 0))
|
|
66349
|
+
.replace('{wins}', String(run?.wins ?? 0))
|
|
66350
|
+
.replace('{powers}', String(this.totalChallengePowers(stats)));
|
|
66351
|
+
}
|
|
66352
|
+
challengeHasNewRecord() {
|
|
66353
|
+
return this.challengeNewRecord();
|
|
66354
|
+
}
|
|
66355
|
+
totalChallengePowers(stats) {
|
|
66356
|
+
if (!stats)
|
|
66357
|
+
return 0;
|
|
66358
|
+
return stats.powersUsed.eagle + stats.powersUsed.bull + stats.powersUsed.kangaroo + stats.powersUsed.lion;
|
|
66359
|
+
}
|
|
66360
|
+
createChallengeRoundStats(game) {
|
|
66361
|
+
const stats = {
|
|
66362
|
+
powersUsed: { eagle: 0, bull: 0, kangaroo: 0, lion: 0 },
|
|
66363
|
+
powerCaptures: 0,
|
|
66364
|
+
promotions: game.winner === 'white' && game.winnerReason === 'promotion' ? 1 : 0,
|
|
66365
|
+
captures: 0,
|
|
66366
|
+
moves: 0,
|
|
66367
|
+
};
|
|
66368
|
+
for (const entry of game.moveHistory ?? []) {
|
|
66369
|
+
const move = entry.move;
|
|
66370
|
+
if (!move || !move.pieceId.startsWith('W'))
|
|
66371
|
+
continue;
|
|
66372
|
+
stats.moves += 1;
|
|
66373
|
+
if (move.capturesPieceId)
|
|
66374
|
+
stats.captures += 1;
|
|
66375
|
+
if (!move.animal)
|
|
66376
|
+
continue;
|
|
66377
|
+
stats.powersUsed[move.animal] += 1;
|
|
66378
|
+
if (move.capturesPieceId)
|
|
66379
|
+
stats.powerCaptures += 1;
|
|
66380
|
+
}
|
|
66381
|
+
return stats;
|
|
66382
|
+
}
|
|
66160
66383
|
animalLabel(type) {
|
|
66161
66384
|
return this.t(`chessimalsAnimal${this.capitalize(type)}`);
|
|
66162
66385
|
}
|
|
@@ -66326,6 +66549,61 @@ class ChessimalsGameComponent {
|
|
|
66326
66549
|
</div>
|
|
66327
66550
|
</article>
|
|
66328
66551
|
|
|
66552
|
+
<article class="chessimals-challenge-card">
|
|
66553
|
+
<div class="chessimals-challenge-card__copy">
|
|
66554
|
+
<span>{{ t('chessimalsChallengeEyebrow') }}</span>
|
|
66555
|
+
<h2>{{ t('chessimalsChallengeTitle') }}</h2>
|
|
66556
|
+
<p>{{ t('chessimalsChallengeBody') }}</p>
|
|
66557
|
+
</div>
|
|
66558
|
+
<div class="chessimals-challenge-rival">
|
|
66559
|
+
<span aria-hidden="true">{{ botProfileAvatar(challengeOpeningBot().profileId) }}</span>
|
|
66560
|
+
<div>
|
|
66561
|
+
<small>{{ t('chessimalsChallengeFirstRival') }}</small>
|
|
66562
|
+
<strong>{{ challengeBotName(challengeOpeningBot()) }}</strong>
|
|
66563
|
+
<p>{{ t(challengeOpeningBot().introKey) }}</p>
|
|
66564
|
+
</div>
|
|
66565
|
+
</div>
|
|
66566
|
+
<div class="chessimals-challenge-card__stats">
|
|
66567
|
+
<span>
|
|
66568
|
+
<small>{{ t('chessimalsChallengeLives') }}</small>
|
|
66569
|
+
<strong>3</strong>
|
|
66570
|
+
</span>
|
|
66571
|
+
<span>
|
|
66572
|
+
<small>{{ t('chessimalsChallengeBestRound') }}</small>
|
|
66573
|
+
<strong>{{ challengeStats().bestRoundReached || '-' }}</strong>
|
|
66574
|
+
</span>
|
|
66575
|
+
<span>
|
|
66576
|
+
<small>{{ t('chessimalsChallengeBestStreak') }}</small>
|
|
66577
|
+
<strong>{{ challengeStats().bestWinStreak || '-' }}</strong>
|
|
66578
|
+
</span>
|
|
66579
|
+
</div>
|
|
66580
|
+
<div class="chessimals-challenge-path" [attr.aria-label]="t('chessimalsChallengePath')">
|
|
66581
|
+
@for (bot of challengeLadder; track bot.id) {
|
|
66582
|
+
<span
|
|
66583
|
+
[class.is-cleared]="challengeStats().bestRoundReached >= bot.round"
|
|
66584
|
+
[class.is-current]="challengeStats().bestRoundReached + 1 === bot.round"
|
|
66585
|
+
[attr.title]="challengeBotName(bot)"
|
|
66586
|
+
>
|
|
66587
|
+
{{ botProfileAvatar(bot.profileId) }}
|
|
66588
|
+
</span>
|
|
66589
|
+
}
|
|
66590
|
+
</div>
|
|
66591
|
+
@if (challengeHistory().length) {
|
|
66592
|
+
<div class="chessimals-challenge-history">
|
|
66593
|
+
<small>{{ t('chessimalsChallengeRecentRuns') }}</small>
|
|
66594
|
+
@for (run of challengeHistory(); track run.id) {
|
|
66595
|
+
<span>
|
|
66596
|
+
<b>{{ challengeRunStatusLabel(run) }}</b>
|
|
66597
|
+
{{ challengeRunLine(run) }}
|
|
66598
|
+
</span>
|
|
66599
|
+
}
|
|
66600
|
+
</div>
|
|
66601
|
+
}
|
|
66602
|
+
<button class="chessimals-primary" type="button" (click)="startChallenge()">
|
|
66603
|
+
{{ t('chessimalsChallengeStart') }}
|
|
66604
|
+
</button>
|
|
66605
|
+
</article>
|
|
66606
|
+
|
|
66329
66607
|
<div class="chessimals-size" role="radiogroup" [attr.aria-label]="t('chessimalsBoardSize')">
|
|
66330
66608
|
@for (size of boardSizes; track size) {
|
|
66331
66609
|
<button
|
|
@@ -66598,6 +66876,16 @@ class ChessimalsGameComponent {
|
|
|
66598
66876
|
}
|
|
66599
66877
|
|
|
66600
66878
|
<div class="chessimals-status">
|
|
66879
|
+
@if (isChallengeActive()) {
|
|
66880
|
+
<div>
|
|
66881
|
+
<small>{{ t('chessimalsChallengeRound') }}</small>
|
|
66882
|
+
<strong>{{ challengeRoundLabel() }}</strong>
|
|
66883
|
+
</div>
|
|
66884
|
+
<div>
|
|
66885
|
+
<small>{{ t('chessimalsChallengeLives') }}</small>
|
|
66886
|
+
<strong>{{ challengeLivesLabel() }}</strong>
|
|
66887
|
+
</div>
|
|
66888
|
+
}
|
|
66601
66889
|
<div>
|
|
66602
66890
|
<small>{{ t('chessimalsMoves') }}</small>
|
|
66603
66891
|
<strong>{{ game().moveCount }}</strong>
|
|
@@ -66876,6 +67164,54 @@ class ChessimalsGameComponent {
|
|
|
66876
67164
|
</div>
|
|
66877
67165
|
</div>
|
|
66878
67166
|
}
|
|
67167
|
+
@if (isChallengeActive()) {
|
|
67168
|
+
<div class="chessimals-challenge-summary">
|
|
67169
|
+
<small>{{ t('chessimalsChallengeTitle') }}</small>
|
|
67170
|
+
<strong>{{ challengeOutcomeTitle() }}</strong>
|
|
67171
|
+
<p>{{ challengeOutcomeBody() }}</p>
|
|
67172
|
+
@if (challengeHasNewRecord()) {
|
|
67173
|
+
<div class="chessimals-challenge-record">
|
|
67174
|
+
<span aria-hidden="true">★</span>
|
|
67175
|
+
<strong>{{ t('chessimalsChallengeNewRecord') }}</strong>
|
|
67176
|
+
</div>
|
|
67177
|
+
}
|
|
67178
|
+
@if (challengeLastRoundStats(); as roundStats) {
|
|
67179
|
+
<div class="chessimals-challenge-summary__stats">
|
|
67180
|
+
<span>
|
|
67181
|
+
<small>{{ t('chessimalsChallengePowersUsed') }}</small>
|
|
67182
|
+
<b>{{ totalChallengePowers(roundStats) }}</b>
|
|
67183
|
+
</span>
|
|
67184
|
+
<span>
|
|
67185
|
+
<small>{{ t('chessimalsChallengePowerCaptures') }}</small>
|
|
67186
|
+
<b>{{ roundStats.powerCaptures }}</b>
|
|
67187
|
+
</span>
|
|
67188
|
+
<span>
|
|
67189
|
+
<small>{{ t('chessimalsChallengePromotions') }}</small>
|
|
67190
|
+
<b>{{ roundStats.promotions }}</b>
|
|
67191
|
+
</span>
|
|
67192
|
+
</div>
|
|
67193
|
+
}
|
|
67194
|
+
@if (challengePhase() === 'between' && activeChallengeBot(); as nextBot) {
|
|
67195
|
+
<div class="chessimals-challenge-rival chessimals-challenge-rival--next">
|
|
67196
|
+
<span aria-hidden="true">{{ botProfileAvatar(nextBot.profileId) }}</span>
|
|
67197
|
+
<div>
|
|
67198
|
+
<small>{{ t('chessimalsChallengeNextRivalLabel') }}</small>
|
|
67199
|
+
<strong>{{ challengeBotName(nextBot) }}</strong>
|
|
67200
|
+
<p>{{ t(nextBot.introKey) }}</p>
|
|
67201
|
+
</div>
|
|
67202
|
+
</div>
|
|
67203
|
+
}
|
|
67204
|
+
@if (challengePhase() === 'between') {
|
|
67205
|
+
<button class="chessimals-primary" type="button" (click)="continueChallenge()">
|
|
67206
|
+
{{ t('chessimalsChallengeNextRival') }}
|
|
67207
|
+
</button>
|
|
67208
|
+
} @else {
|
|
67209
|
+
<button class="chessimals-primary" type="button" (click)="startChallenge()">
|
|
67210
|
+
{{ t('chessimalsChallengePlayAgain') }}
|
|
67211
|
+
</button>
|
|
67212
|
+
}
|
|
67213
|
+
</div>
|
|
67214
|
+
}
|
|
66879
67215
|
@if (seriesSummary()) {
|
|
66880
67216
|
<div class="chessimals-series">
|
|
66881
67217
|
<small>{{ t('chessimalsSeriesTitle') }}</small>
|
|
@@ -66967,7 +67303,7 @@ class ChessimalsGameComponent {
|
|
|
66967
67303
|
{{ rematchActionLabel() }}
|
|
66968
67304
|
</button>
|
|
66969
67305
|
}
|
|
66970
|
-
@if (game().mode !== 'online') {
|
|
67306
|
+
@if (game().mode !== 'online' && !isChallengeActive()) {
|
|
66971
67307
|
<button class="chessimals-secondary" type="button" (click)="requestRestartGame()">
|
|
66972
67308
|
{{ t('restart') }}
|
|
66973
67309
|
</button>
|
|
@@ -67124,7 +67460,7 @@ class ChessimalsGameComponent {
|
|
|
67124
67460
|
<ion-modal
|
|
67125
67461
|
[isOpen]="!!confirmAction()"
|
|
67126
67462
|
cssClass="val-modal-adaptive"
|
|
67127
|
-
(didDismiss)="
|
|
67463
|
+
(didDismiss)="closeConfirmModal()"
|
|
67128
67464
|
>
|
|
67129
67465
|
<ng-template>
|
|
67130
67466
|
<val-modal-layout
|
|
@@ -67138,7 +67474,7 @@ class ChessimalsGameComponent {
|
|
|
67138
67474
|
/>
|
|
67139
67475
|
</ng-template>
|
|
67140
67476
|
</ion-modal>
|
|
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"] }] }); }
|
|
67477
|
+
`, 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"] }] }); }
|
|
67142
67478
|
}
|
|
67143
67479
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChessimalsGameComponent, decorators: [{
|
|
67144
67480
|
type: Component,
|
|
@@ -67167,6 +67503,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
67167
67503
|
</div>
|
|
67168
67504
|
</article>
|
|
67169
67505
|
|
|
67506
|
+
<article class="chessimals-challenge-card">
|
|
67507
|
+
<div class="chessimals-challenge-card__copy">
|
|
67508
|
+
<span>{{ t('chessimalsChallengeEyebrow') }}</span>
|
|
67509
|
+
<h2>{{ t('chessimalsChallengeTitle') }}</h2>
|
|
67510
|
+
<p>{{ t('chessimalsChallengeBody') }}</p>
|
|
67511
|
+
</div>
|
|
67512
|
+
<div class="chessimals-challenge-rival">
|
|
67513
|
+
<span aria-hidden="true">{{ botProfileAvatar(challengeOpeningBot().profileId) }}</span>
|
|
67514
|
+
<div>
|
|
67515
|
+
<small>{{ t('chessimalsChallengeFirstRival') }}</small>
|
|
67516
|
+
<strong>{{ challengeBotName(challengeOpeningBot()) }}</strong>
|
|
67517
|
+
<p>{{ t(challengeOpeningBot().introKey) }}</p>
|
|
67518
|
+
</div>
|
|
67519
|
+
</div>
|
|
67520
|
+
<div class="chessimals-challenge-card__stats">
|
|
67521
|
+
<span>
|
|
67522
|
+
<small>{{ t('chessimalsChallengeLives') }}</small>
|
|
67523
|
+
<strong>3</strong>
|
|
67524
|
+
</span>
|
|
67525
|
+
<span>
|
|
67526
|
+
<small>{{ t('chessimalsChallengeBestRound') }}</small>
|
|
67527
|
+
<strong>{{ challengeStats().bestRoundReached || '-' }}</strong>
|
|
67528
|
+
</span>
|
|
67529
|
+
<span>
|
|
67530
|
+
<small>{{ t('chessimalsChallengeBestStreak') }}</small>
|
|
67531
|
+
<strong>{{ challengeStats().bestWinStreak || '-' }}</strong>
|
|
67532
|
+
</span>
|
|
67533
|
+
</div>
|
|
67534
|
+
<div class="chessimals-challenge-path" [attr.aria-label]="t('chessimalsChallengePath')">
|
|
67535
|
+
@for (bot of challengeLadder; track bot.id) {
|
|
67536
|
+
<span
|
|
67537
|
+
[class.is-cleared]="challengeStats().bestRoundReached >= bot.round"
|
|
67538
|
+
[class.is-current]="challengeStats().bestRoundReached + 1 === bot.round"
|
|
67539
|
+
[attr.title]="challengeBotName(bot)"
|
|
67540
|
+
>
|
|
67541
|
+
{{ botProfileAvatar(bot.profileId) }}
|
|
67542
|
+
</span>
|
|
67543
|
+
}
|
|
67544
|
+
</div>
|
|
67545
|
+
@if (challengeHistory().length) {
|
|
67546
|
+
<div class="chessimals-challenge-history">
|
|
67547
|
+
<small>{{ t('chessimalsChallengeRecentRuns') }}</small>
|
|
67548
|
+
@for (run of challengeHistory(); track run.id) {
|
|
67549
|
+
<span>
|
|
67550
|
+
<b>{{ challengeRunStatusLabel(run) }}</b>
|
|
67551
|
+
{{ challengeRunLine(run) }}
|
|
67552
|
+
</span>
|
|
67553
|
+
}
|
|
67554
|
+
</div>
|
|
67555
|
+
}
|
|
67556
|
+
<button class="chessimals-primary" type="button" (click)="startChallenge()">
|
|
67557
|
+
{{ t('chessimalsChallengeStart') }}
|
|
67558
|
+
</button>
|
|
67559
|
+
</article>
|
|
67560
|
+
|
|
67170
67561
|
<div class="chessimals-size" role="radiogroup" [attr.aria-label]="t('chessimalsBoardSize')">
|
|
67171
67562
|
@for (size of boardSizes; track size) {
|
|
67172
67563
|
<button
|
|
@@ -67439,6 +67830,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
67439
67830
|
}
|
|
67440
67831
|
|
|
67441
67832
|
<div class="chessimals-status">
|
|
67833
|
+
@if (isChallengeActive()) {
|
|
67834
|
+
<div>
|
|
67835
|
+
<small>{{ t('chessimalsChallengeRound') }}</small>
|
|
67836
|
+
<strong>{{ challengeRoundLabel() }}</strong>
|
|
67837
|
+
</div>
|
|
67838
|
+
<div>
|
|
67839
|
+
<small>{{ t('chessimalsChallengeLives') }}</small>
|
|
67840
|
+
<strong>{{ challengeLivesLabel() }}</strong>
|
|
67841
|
+
</div>
|
|
67842
|
+
}
|
|
67442
67843
|
<div>
|
|
67443
67844
|
<small>{{ t('chessimalsMoves') }}</small>
|
|
67444
67845
|
<strong>{{ game().moveCount }}</strong>
|
|
@@ -67717,6 +68118,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
67717
68118
|
</div>
|
|
67718
68119
|
</div>
|
|
67719
68120
|
}
|
|
68121
|
+
@if (isChallengeActive()) {
|
|
68122
|
+
<div class="chessimals-challenge-summary">
|
|
68123
|
+
<small>{{ t('chessimalsChallengeTitle') }}</small>
|
|
68124
|
+
<strong>{{ challengeOutcomeTitle() }}</strong>
|
|
68125
|
+
<p>{{ challengeOutcomeBody() }}</p>
|
|
68126
|
+
@if (challengeHasNewRecord()) {
|
|
68127
|
+
<div class="chessimals-challenge-record">
|
|
68128
|
+
<span aria-hidden="true">★</span>
|
|
68129
|
+
<strong>{{ t('chessimalsChallengeNewRecord') }}</strong>
|
|
68130
|
+
</div>
|
|
68131
|
+
}
|
|
68132
|
+
@if (challengeLastRoundStats(); as roundStats) {
|
|
68133
|
+
<div class="chessimals-challenge-summary__stats">
|
|
68134
|
+
<span>
|
|
68135
|
+
<small>{{ t('chessimalsChallengePowersUsed') }}</small>
|
|
68136
|
+
<b>{{ totalChallengePowers(roundStats) }}</b>
|
|
68137
|
+
</span>
|
|
68138
|
+
<span>
|
|
68139
|
+
<small>{{ t('chessimalsChallengePowerCaptures') }}</small>
|
|
68140
|
+
<b>{{ roundStats.powerCaptures }}</b>
|
|
68141
|
+
</span>
|
|
68142
|
+
<span>
|
|
68143
|
+
<small>{{ t('chessimalsChallengePromotions') }}</small>
|
|
68144
|
+
<b>{{ roundStats.promotions }}</b>
|
|
68145
|
+
</span>
|
|
68146
|
+
</div>
|
|
68147
|
+
}
|
|
68148
|
+
@if (challengePhase() === 'between' && activeChallengeBot(); as nextBot) {
|
|
68149
|
+
<div class="chessimals-challenge-rival chessimals-challenge-rival--next">
|
|
68150
|
+
<span aria-hidden="true">{{ botProfileAvatar(nextBot.profileId) }}</span>
|
|
68151
|
+
<div>
|
|
68152
|
+
<small>{{ t('chessimalsChallengeNextRivalLabel') }}</small>
|
|
68153
|
+
<strong>{{ challengeBotName(nextBot) }}</strong>
|
|
68154
|
+
<p>{{ t(nextBot.introKey) }}</p>
|
|
68155
|
+
</div>
|
|
68156
|
+
</div>
|
|
68157
|
+
}
|
|
68158
|
+
@if (challengePhase() === 'between') {
|
|
68159
|
+
<button class="chessimals-primary" type="button" (click)="continueChallenge()">
|
|
68160
|
+
{{ t('chessimalsChallengeNextRival') }}
|
|
68161
|
+
</button>
|
|
68162
|
+
} @else {
|
|
68163
|
+
<button class="chessimals-primary" type="button" (click)="startChallenge()">
|
|
68164
|
+
{{ t('chessimalsChallengePlayAgain') }}
|
|
68165
|
+
</button>
|
|
68166
|
+
}
|
|
68167
|
+
</div>
|
|
68168
|
+
}
|
|
67720
68169
|
@if (seriesSummary()) {
|
|
67721
68170
|
<div class="chessimals-series">
|
|
67722
68171
|
<small>{{ t('chessimalsSeriesTitle') }}</small>
|
|
@@ -67808,7 +68257,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
67808
68257
|
{{ rematchActionLabel() }}
|
|
67809
68258
|
</button>
|
|
67810
68259
|
}
|
|
67811
|
-
@if (game().mode !== 'online') {
|
|
68260
|
+
@if (game().mode !== 'online' && !isChallengeActive()) {
|
|
67812
68261
|
<button class="chessimals-secondary" type="button" (click)="requestRestartGame()">
|
|
67813
68262
|
{{ t('restart') }}
|
|
67814
68263
|
</button>
|
|
@@ -67965,7 +68414,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
67965
68414
|
<ion-modal
|
|
67966
68415
|
[isOpen]="!!confirmAction()"
|
|
67967
68416
|
cssClass="val-modal-adaptive"
|
|
67968
|
-
(didDismiss)="
|
|
68417
|
+
(didDismiss)="closeConfirmModal()"
|
|
67969
68418
|
>
|
|
67970
68419
|
<ng-template>
|
|
67971
68420
|
<val-modal-layout
|
|
@@ -67979,7 +68428,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
67979
68428
|
/>
|
|
67980
68429
|
</ng-template>
|
|
67981
68430
|
</ion-modal>
|
|
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"] }]
|
|
68431
|
+
`, 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"] }]
|
|
67983
68432
|
}], ctorParameters: () => [], propDecorators: { boardAnchor: [{
|
|
67984
68433
|
type: ViewChild,
|
|
67985
68434
|
args: ['boardAnchor']
|
|
@@ -67991,1385 +68440,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
67991
68440
|
type: Input
|
|
67992
68441
|
}] } });
|
|
67993
68442
|
|
|
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
|
-
|
|
69373
68443
|
addIcons({ refreshOutline, sparklesOutline, trophyOutline });
|
|
69374
68444
|
const BUBBLE_COLORS = {
|
|
69375
68445
|
rose: '#ff4f9f',
|
|
@@ -69426,7 +68496,6 @@ class BubbleBlitzGameComponent {
|
|
|
69426
68496
|
this.animating = signal(false);
|
|
69427
68497
|
this.leaderboard = signal(this.readLeaderboard());
|
|
69428
68498
|
this.confirmAction = signal(undefined);
|
|
69429
|
-
this.confirmedAction = signal(undefined);
|
|
69430
68499
|
this.config = computed(() => MODE_CONFIG[this.mode()]);
|
|
69431
68500
|
this.feverReady = computed(() => this.fever() >= this.config().feverTarget);
|
|
69432
68501
|
this.feverProgress = computed(() => Math.min(100, Math.round((this.fever() / this.config().feverTarget) * 100)));
|
|
@@ -69606,12 +68675,13 @@ class BubbleBlitzGameComponent {
|
|
|
69606
68675
|
closeConfirmModal() {
|
|
69607
68676
|
this.confirmAction.set(undefined);
|
|
69608
68677
|
}
|
|
69609
|
-
|
|
69610
|
-
|
|
69611
|
-
|
|
69612
|
-
this.confirmedAction.set(undefined);
|
|
69613
|
-
if (!action)
|
|
68678
|
+
confirmPendingAction(token) {
|
|
68679
|
+
if (token !== 'confirm') {
|
|
68680
|
+
this.closeConfirmModal();
|
|
69614
68681
|
return;
|
|
68682
|
+
}
|
|
68683
|
+
const action = this.confirmAction();
|
|
68684
|
+
this.confirmAction.set(undefined);
|
|
69615
68685
|
if (action === 'restart') {
|
|
69616
68686
|
this.start();
|
|
69617
68687
|
return;
|
|
@@ -69624,15 +68694,6 @@ class BubbleBlitzGameComponent {
|
|
|
69624
68694
|
this.resetToGamesMenu();
|
|
69625
68695
|
}
|
|
69626
68696
|
}
|
|
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
|
-
}
|
|
69636
68697
|
startTimer() {
|
|
69637
68698
|
this.stopTimer();
|
|
69638
68699
|
this.timer = window.setInterval(() => {
|
|
@@ -69936,7 +68997,7 @@ class BubbleBlitzGameComponent {
|
|
|
69936
68997
|
<ion-modal
|
|
69937
68998
|
[isOpen]="!!confirmAction()"
|
|
69938
68999
|
cssClass="val-modal-adaptive"
|
|
69939
|
-
(didDismiss)="
|
|
69000
|
+
(didDismiss)="closeConfirmModal()"
|
|
69940
69001
|
>
|
|
69941
69002
|
<ng-template>
|
|
69942
69003
|
<val-modal-layout
|
|
@@ -70086,7 +69147,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
70086
69147
|
<ion-modal
|
|
70087
69148
|
[isOpen]="!!confirmAction()"
|
|
70088
69149
|
cssClass="val-modal-adaptive"
|
|
70089
|
-
(didDismiss)="
|
|
69150
|
+
(didDismiss)="closeConfirmModal()"
|
|
70090
69151
|
>
|
|
70091
69152
|
<ng-template>
|
|
70092
69153
|
<val-modal-layout
|
|
@@ -70150,7 +69211,6 @@ class MemoryGameComponent {
|
|
|
70150
69211
|
this.lockBoard = signal(false);
|
|
70151
69212
|
this.leaderboard = signal(this.readLeaderboard());
|
|
70152
69213
|
this.confirmAction = signal(undefined);
|
|
70153
|
-
this.confirmedAction = signal(undefined);
|
|
70154
69214
|
this.profileConfig = computed(() => PROFILE_CONFIG[this.profile()]);
|
|
70155
69215
|
this.pairCount = computed(() => this.profileConfig().pairs);
|
|
70156
69216
|
this.boardClass = computed(() => `memory-board ${this.profileConfig().boardClass}`);
|
|
@@ -70288,12 +69348,13 @@ class MemoryGameComponent {
|
|
|
70288
69348
|
closeConfirmModal() {
|
|
70289
69349
|
this.confirmAction.set(undefined);
|
|
70290
69350
|
}
|
|
70291
|
-
|
|
70292
|
-
|
|
70293
|
-
|
|
70294
|
-
this.confirmedAction.set(undefined);
|
|
70295
|
-
if (!action)
|
|
69351
|
+
confirmPendingAction(token) {
|
|
69352
|
+
if (token !== 'confirm') {
|
|
69353
|
+
this.closeConfirmModal();
|
|
70296
69354
|
return;
|
|
69355
|
+
}
|
|
69356
|
+
const action = this.confirmAction();
|
|
69357
|
+
this.confirmAction.set(undefined);
|
|
70297
69358
|
if (action === 'restart') {
|
|
70298
69359
|
this.start();
|
|
70299
69360
|
return;
|
|
@@ -70306,15 +69367,6 @@ class MemoryGameComponent {
|
|
|
70306
69367
|
this.resetToGamesMenu();
|
|
70307
69368
|
}
|
|
70308
69369
|
}
|
|
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
|
-
}
|
|
70318
69370
|
flip(card) {
|
|
70319
69371
|
if (this.lockBoard() || card.flipped || card.matched || this.won() || this.failed())
|
|
70320
69372
|
return;
|
|
@@ -70629,7 +69681,7 @@ class MemoryGameComponent {
|
|
|
70629
69681
|
<ion-modal
|
|
70630
69682
|
[isOpen]="!!confirmAction()"
|
|
70631
69683
|
cssClass="val-modal-adaptive"
|
|
70632
|
-
(didDismiss)="
|
|
69684
|
+
(didDismiss)="closeConfirmModal()"
|
|
70633
69685
|
>
|
|
70634
69686
|
<ng-template>
|
|
70635
69687
|
<val-modal-layout
|
|
@@ -70787,7 +69839,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
70787
69839
|
<ion-modal
|
|
70788
69840
|
[isOpen]="!!confirmAction()"
|
|
70789
69841
|
cssClass="val-modal-adaptive"
|
|
70790
|
-
(didDismiss)="
|
|
69842
|
+
(didDismiss)="closeConfirmModal()"
|
|
70791
69843
|
>
|
|
70792
69844
|
<ng-template>
|
|
70793
69845
|
<val-modal-layout
|
|
@@ -71133,7 +70185,6 @@ class SimonGameComponent {
|
|
|
71133
70185
|
this.activePad = signal(undefined);
|
|
71134
70186
|
this.leaderboard = signal(this.readLeaderboard());
|
|
71135
70187
|
this.confirmAction = signal(undefined);
|
|
71136
|
-
this.confirmedAction = signal(undefined);
|
|
71137
70188
|
this.modeConfig = computed(() => SIMON_MODES[this.mode()]);
|
|
71138
70189
|
this.bestRound = computed(() => this.modeLeaderboard()[0]?.round ?? 0);
|
|
71139
70190
|
this.modeLeaderboard = computed(() => this.leaderboard()
|
|
@@ -71233,12 +70284,13 @@ class SimonGameComponent {
|
|
|
71233
70284
|
closeConfirmModal() {
|
|
71234
70285
|
this.confirmAction.set(undefined);
|
|
71235
70286
|
}
|
|
71236
|
-
|
|
71237
|
-
|
|
71238
|
-
|
|
71239
|
-
this.confirmedAction.set(undefined);
|
|
71240
|
-
if (!action)
|
|
70287
|
+
confirmPendingAction(token) {
|
|
70288
|
+
if (token !== 'confirm') {
|
|
70289
|
+
this.closeConfirmModal();
|
|
71241
70290
|
return;
|
|
70291
|
+
}
|
|
70292
|
+
const action = this.confirmAction();
|
|
70293
|
+
this.confirmAction.set(undefined);
|
|
71242
70294
|
if (action === 'restart') {
|
|
71243
70295
|
this.start();
|
|
71244
70296
|
return;
|
|
@@ -71251,15 +70303,6 @@ class SimonGameComponent {
|
|
|
71251
70303
|
this.resetToGamesMenu();
|
|
71252
70304
|
}
|
|
71253
70305
|
}
|
|
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
|
-
}
|
|
71263
70306
|
tap(pad) {
|
|
71264
70307
|
if (this.phase() !== 'waiting' || !this.acceptingInput)
|
|
71265
70308
|
return;
|
|
@@ -71503,7 +70546,7 @@ class SimonGameComponent {
|
|
|
71503
70546
|
<ion-modal
|
|
71504
70547
|
[isOpen]="!!confirmAction()"
|
|
71505
70548
|
cssClass="val-modal-adaptive"
|
|
71506
|
-
(didDismiss)="
|
|
70549
|
+
(didDismiss)="closeConfirmModal()"
|
|
71507
70550
|
>
|
|
71508
70551
|
<ng-template>
|
|
71509
70552
|
<val-modal-layout
|
|
@@ -71633,7 +70676,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
71633
70676
|
<ion-modal
|
|
71634
70677
|
[isOpen]="!!confirmAction()"
|
|
71635
70678
|
cssClass="val-modal-adaptive"
|
|
71636
|
-
(didDismiss)="
|
|
70679
|
+
(didDismiss)="closeConfirmModal()"
|
|
71637
70680
|
>
|
|
71638
70681
|
<ng-template>
|
|
71639
70682
|
<val-modal-layout
|
|
@@ -86949,5 +85992,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
86949
85992
|
* Generated bundle index. Do not edit.
|
|
86950
85993
|
*/
|
|
86951
85994
|
|
|
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 };
|
|
85995
|
+
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 };
|
|
86953
85996
|
//# sourceMappingURL=valtech-components.mjs.map
|