valtech-components 4.0.434 → 4.0.436

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, InjectionToken, makeEnvironmentProviders, APP_INITIALIZER, ErrorHandler, Injectable, DestroyRef, Inject, signal, computed, PLATFORM_ID, isDevMode, Optional, runInInjectionContext, effect, Pipe, TemplateRef, ViewContainerRef, input, Directive, EventEmitter, Component, Input, Output, ChangeDetectionStrategy, HostBinding, HostListener, SecurityContext, NgZone, ViewChild, ElementRef, ChangeDetectorRef, output, ContentChild, model, ViewEncapsulation, untracked, viewChild, Injector, isSignal } from '@angular/core';
2
+ import { inject, InjectionToken, makeEnvironmentProviders, APP_INITIALIZER, ErrorHandler, Injectable, DestroyRef, Inject, signal, computed, PLATFORM_ID, isDevMode, Optional, runInInjectionContext, effect, Pipe, TemplateRef, ViewContainerRef, input, Directive, ElementRef, Renderer2, HostListener, EventEmitter, Component, Input, Output, ChangeDetectionStrategy, HostBinding, SecurityContext, NgZone, ViewChild, ChangeDetectorRef, output, ContentChild, model, ViewEncapsulation, untracked, viewChild, Injector, isSignal } from '@angular/core';
3
3
  import { BehaviorSubject, throwError, Subject, map, distinctUntilChanged, filter as filter$1, take as take$1, firstValueFrom, of, from, EMPTY, Observable, interval, defer, timer, merge, concat, debounceTime, switchMap as switchMap$1, catchError as catchError$1, takeUntil, isObservable, forkJoin, race, tap as tap$1, Subscription, shareReplay as shareReplay$1 } from 'rxjs';
4
4
  import { catchError, switchMap, finalize, filter, take, timeout, map as map$1, tap, shareReplay, distinctUntilChanged as distinctUntilChanged$1, retry, debounceTime as debounceTime$1, takeUntil as takeUntil$1 } from 'rxjs/operators';
5
5
  import * as i1$3 from '@angular/common/http';
@@ -58,7 +58,7 @@ import fixWebmDuration from 'fix-webm-duration';
58
58
  * Current version of valtech-components.
59
59
  * This is automatically updated during the publish process.
60
60
  */
61
- const VERSION = '4.0.434';
61
+ const VERSION = '4.0.436';
62
62
 
63
63
  // Control de estado de refresco (singleton a nivel de módulo)
64
64
  let isRefreshing = false;
@@ -10115,6 +10115,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
10115
10115
  }]
10116
10116
  }], ctorParameters: () => [] });
10117
10117
 
10118
+ class LightRippleDirective {
10119
+ constructor() {
10120
+ this.host = inject(ElementRef);
10121
+ this.renderer = inject(Renderer2);
10122
+ }
10123
+ createRipple(event) {
10124
+ const element = this.host.nativeElement;
10125
+ const rect = element.getBoundingClientRect();
10126
+ const size = Math.max(rect.width, rect.height) * 1.55;
10127
+ const ripple = this.renderer.createElement('span');
10128
+ const x = event.clientX - rect.left - size / 2;
10129
+ const y = event.clientY - rect.top - size / 2;
10130
+ if (getComputedStyle(element).position === 'static') {
10131
+ this.renderer.setStyle(element, 'position', 'relative');
10132
+ }
10133
+ this.renderer.setStyle(element, 'overflow', 'hidden');
10134
+ this.renderer.setStyle(element, 'isolation', 'isolate');
10135
+ this.renderer.setStyle(element, 'touch-action', 'manipulation');
10136
+ this.renderer.setStyle(ripple, 'position', 'absolute');
10137
+ this.renderer.setStyle(ripple, 'left', `${x}px`);
10138
+ this.renderer.setStyle(ripple, 'top', `${y}px`);
10139
+ this.renderer.setStyle(ripple, 'width', `${size}px`);
10140
+ this.renderer.setStyle(ripple, 'height', `${size}px`);
10141
+ this.renderer.setStyle(ripple, 'border-radius', '999px');
10142
+ this.renderer.setStyle(ripple, 'pointer-events', 'none');
10143
+ this.renderer.setStyle(ripple, 'z-index', '1');
10144
+ 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%)');
10145
+ 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)');
10146
+ this.renderer.appendChild(element, ripple);
10147
+ ripple
10148
+ .animate([
10149
+ { opacity: 0.88, transform: 'scale(0.08)' },
10150
+ { opacity: 0.48, transform: 'scale(0.48)' },
10151
+ { opacity: 0, transform: 'scale(1)' },
10152
+ ], { duration: 680, easing: 'cubic-bezier(0.16, 0.84, 0.24, 1)' })
10153
+ .finished.finally(() => {
10154
+ if (ripple.parentNode === element) {
10155
+ this.renderer.removeChild(element, ripple);
10156
+ }
10157
+ });
10158
+ }
10159
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LightRippleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
10160
+ 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 }); }
10161
+ }
10162
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LightRippleDirective, decorators: [{
10163
+ type: Directive,
10164
+ args: [{
10165
+ selector: '[valLightRipple]',
10166
+ standalone: true,
10167
+ }]
10168
+ }], propDecorators: { createRipple: [{
10169
+ type: HostListener,
10170
+ args: ['pointerdown', ['$event']]
10171
+ }] } });
10172
+
10118
10173
  /**
10119
10174
  * Presets de botón por defecto provistos por la librería.
10120
10175
  *
@@ -62480,11 +62535,14 @@ const MINI_GAMES_I18N = {
62480
62535
  christianityHiddenCard: 'Carta oculta',
62481
62536
  christianityEndTurn: 'Terminar turno',
62482
62537
  christianityPlayCard: 'Jugar carta',
62538
+ christianityPlayHere: 'Jugar aquí',
62483
62539
  christianityReset: 'Reiniciar mock',
62484
62540
  christianityWaitTurn: 'Espera el turno rival.',
62485
62541
  christianityChooseTarget: 'Elige un objetivo para atacar.',
62486
62542
  christianityChooseCharacterTarget: 'El rival tiene personajes: debes atacarlos antes que al líder.',
62487
62543
  christianityReadyToPlay: 'Puedes jugar esta carta.',
62544
+ christianityChooseSlot: 'Elige una casilla disponible para jugar esta carta.',
62545
+ christianityPlaceOffering: 'Toca la pila de ofrendas para jugar esta ofrenda.',
62488
62546
  christianityNeedOfferings: 'Necesitas más ofrendas para jugar esa carta.',
62489
62547
  christianityChooseCard: 'Elige una carta o un personaje listo para actuar.',
62490
62548
  christianityLeaderProtected: 'No puedes atacar directamente al líder mientras tenga personajes en batalla.',
@@ -62906,11 +62964,14 @@ const MINI_GAMES_I18N = {
62906
62964
  christianityHiddenCard: 'Hidden card',
62907
62965
  christianityEndTurn: 'End turn',
62908
62966
  christianityPlayCard: 'Play card',
62967
+ christianityPlayHere: 'Play here',
62909
62968
  christianityReset: 'Reset mock',
62910
62969
  christianityWaitTurn: 'Wait for the opponent turn.',
62911
62970
  christianityChooseTarget: 'Choose a target to attack.',
62912
62971
  christianityChooseCharacterTarget: 'The opponent has characters: attack them before the leader.',
62913
62972
  christianityReadyToPlay: 'You can play this card.',
62973
+ christianityChooseSlot: 'Choose an available slot to play this card.',
62974
+ christianityPlaceOffering: 'Tap the offering pile to play this offering.',
62914
62975
  christianityNeedOfferings: 'You need more offerings to play that card.',
62915
62976
  christianityChooseCard: 'Choose a card or a ready character.',
62916
62977
  christianityLeaderProtected: 'You cannot attack the leader directly while they have characters in battle.',
@@ -68038,6 +68099,7 @@ class ChristianityGameComponent {
68038
68099
  this.selectedAttacker = signal(null);
68039
68100
  this.selectedPreview = signal(null);
68040
68101
  this.previewTilt = signal({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
68102
+ this.hoveredHandIndex = signal(null);
68041
68103
  this.showHistory = signal(false);
68042
68104
  this.offeringsSeat = signal(null);
68043
68105
  this.player = computed(() => this.game().players.P1);
@@ -68046,9 +68108,13 @@ class ChristianityGameComponent {
68046
68108
  this.isOwnTurn = computed(() => this.game().turnOwner === 'P1');
68047
68109
  this.hasOpponentGuards = computed(() => this.opponent().battleZone.length > 0);
68048
68110
  this.opponentHandCount = computed(() => this.opponent().handCount ?? this.opponent().hand?.length ?? 0);
68111
+ this.selectedCardDefinition = computed(() => {
68112
+ const selected = this.selectedHandCard();
68113
+ return selected ? this.cardDefinition(selected) : null;
68114
+ });
68049
68115
  this.statusText = computed(() => {
68050
68116
  const attacker = this.selectedAttacker();
68051
- const handCard = this.selectedHandCard();
68117
+ const handCard = this.selectedCardDefinition();
68052
68118
  if (!this.isOwnTurn()) {
68053
68119
  return this.t('christianityWaitTurn');
68054
68120
  }
@@ -68056,8 +68122,10 @@ class ChristianityGameComponent {
68056
68122
  return this.hasOpponentGuards() ? this.t('christianityChooseCharacterTarget') : this.t('christianityChooseTarget');
68057
68123
  }
68058
68124
  if (handCard) {
68059
- const card = this.cardDefinition(handCard);
68060
- return this.canPlay(card) ? this.t('christianityReadyToPlay') : this.t('christianityNeedOfferings');
68125
+ if (!this.canPlay(handCard)) {
68126
+ return this.t('christianityNeedOfferings');
68127
+ }
68128
+ return handCard.type === 'offering' ? this.t('christianityPlaceOffering') : this.t('christianityChooseSlot');
68061
68129
  }
68062
68130
  return this.t('christianityChooseCard');
68063
68131
  });
@@ -68087,8 +68155,52 @@ class ChristianityGameComponent {
68087
68155
  const offset = index - center;
68088
68156
  const rotate = offset * 5;
68089
68157
  const lift = Math.abs(offset) * 0.25;
68158
+ const hoverLift = opponent ? 0 : this.handWaveLift(index);
68159
+ const scale = opponent ? 1 : this.handWaveScale(index);
68090
68160
  const base = opponent ? 'rotate(180deg)' : '';
68091
- return `${base} translateY(${lift}rem) rotate(${rotate}deg)`;
68161
+ return `${base} translateY(${lift + hoverLift}rem) rotate(${rotate}deg) scale(${scale})`;
68162
+ }
68163
+ handCardZIndex(index) {
68164
+ const hovered = this.hoveredHandIndex();
68165
+ if (hovered === null)
68166
+ return 2;
68167
+ const distance = Math.abs(index - hovered);
68168
+ return Math.max(2, 8 - distance);
68169
+ }
68170
+ setHoveredHandIndex(index) {
68171
+ this.hoveredHandIndex.set(index);
68172
+ }
68173
+ clearHoveredHandIndex() {
68174
+ this.hoveredHandIndex.set(null);
68175
+ }
68176
+ releaseHoveredHand(event) {
68177
+ if (event.pointerType !== 'mouse') {
68178
+ window.setTimeout(() => this.clearHoveredHandIndex(), 180);
68179
+ }
68180
+ }
68181
+ handWaveLift(index) {
68182
+ const hovered = this.hoveredHandIndex();
68183
+ if (hovered === null)
68184
+ return 0;
68185
+ const distance = Math.abs(index - hovered);
68186
+ if (distance === 0)
68187
+ return -1.15;
68188
+ if (distance === 1)
68189
+ return -0.58;
68190
+ if (distance === 2)
68191
+ return -0.22;
68192
+ return 0;
68193
+ }
68194
+ handWaveScale(index) {
68195
+ const hovered = this.hoveredHandIndex();
68196
+ if (hovered === null)
68197
+ return 1;
68198
+ const distance = Math.abs(index - hovered);
68199
+ if (distance === 0)
68200
+ return 1.06;
68201
+ if (distance === 1)
68202
+ return 1.03;
68203
+ return 1;
68092
68204
  }
68093
68205
  readyOfferings(player) {
68094
68206
  return player.offerings.reduce((total, offering) => total + (offering.ready ? offering.value : 0), 0);
@@ -68107,12 +68219,20 @@ class ChristianityGameComponent {
68107
68219
  const selected = this.selectedHandCard();
68108
68220
  return !!selected && this.canPlay(this.cardDefinition(selected));
68109
68221
  }
68222
+ canPlaceSelectedCharacter() {
68223
+ const selected = this.selectedCardDefinition();
68224
+ return !!selected && selected.type === 'character' && this.canPlay(selected);
68225
+ }
68226
+ canPlaceSelectedOffering() {
68227
+ const selected = this.selectedCardDefinition();
68228
+ return !!selected && selected.type === 'offering' && this.canPlay(selected);
68229
+ }
68110
68230
  selectHandCard(cardId) {
68111
68231
  this.selectedAttacker.set(null);
68112
68232
  this.selectedHandCard.set(this.selectedHandCard() === cardId ? null : cardId);
68113
68233
  this.inspectHandCard(cardId);
68114
68234
  }
68115
- playSelectedCard() {
68235
+ playSelectedCard(slotIndex) {
68116
68236
  const cardId = this.selectedHandCard();
68117
68237
  if (!cardId)
68118
68238
  return;
@@ -68142,7 +68262,8 @@ class ChristianityGameComponent {
68142
68262
  }
68143
68263
  else {
68144
68264
  this.spendOfferings(player, card.cost);
68145
- player.battleZone.push({
68265
+ const insertIndex = Math.min(slotIndex ?? player.battleZone.length, player.battleZone.length);
68266
+ player.battleZone.splice(insertIndex, 0, {
68146
68267
  instanceId: `p1_${next.revision + 1}_${player.battleZone.length}`,
68147
68268
  cardId: card.id,
68148
68269
  name: card.name,
@@ -68163,6 +68284,13 @@ class ChristianityGameComponent {
68163
68284
  });
68164
68285
  this.selectedHandCard.set(null);
68165
68286
  }
68287
+ handleOfferingPile(seat) {
68288
+ if (seat === 'P1' && this.canPlaceSelectedOffering()) {
68289
+ this.playSelectedCard();
68290
+ return;
68291
+ }
68292
+ this.openOfferings(seat);
68293
+ }
68166
68294
  selectAttacker(card) {
68167
68295
  this.selectedHandCard.set(null);
68168
68296
  this.inspectCharacter(card);
@@ -68415,24 +68543,29 @@ class ChristianityGameComponent {
68415
68543
  </article>
68416
68544
  </section>
68417
68545
 
68418
- <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
68419
- <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
68420
- @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
68421
- <button
68422
- type="button"
68423
- class="christianity-card-preview-card christianity-card-preview-card--back"
68424
- [style.transform]="fanTransform($index, opponentHandCount(), true)"
68425
- [attr.aria-label]="t('christianityHiddenCard')"
68426
- ></button>
68427
- }
68546
+ <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
68547
+ <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
68548
+ <div class="christianity-hand-meter christianity-hand-meter--opponent">
68549
+ <span>{{ t('christianityHand') }}</span>
68550
+ <strong>{{ opponentHandCount() }}</strong>
68551
+ </div>
68552
+ <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
68553
+ @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
68554
+ <button
68555
+ type="button"
68556
+ class="christianity-card-preview-card christianity-card-preview-card--back"
68557
+ valLightRipple
68558
+ [style.transform]="fanTransform($index, opponentHandCount(), true)"
68559
+ [attr.aria-label]="t('christianityHiddenCard')"
68560
+ ></button>
68561
+ }
68562
+ </section>
68428
68563
  </section>
68429
- </section>
68430
68564
 
68431
- <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
68432
68565
  <section class="christianity-player-side christianity-player-side--opponent">
68433
68566
  <section class="christianity-player-rack christianity-player-rack--opponent">
68434
68567
  <div class="christianity-offerings-zone">
68435
- <button type="button" class="christianity-offering-pile" (click)="openOfferings('P2')">
68568
+ <button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
68436
68569
  <i aria-hidden="true"></i>
68437
68570
  <i aria-hidden="true"></i>
68438
68571
  <i aria-hidden="true"></i>
@@ -68440,14 +68573,11 @@ class ChristianityGameComponent {
68440
68573
  <strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
68441
68574
  </button>
68442
68575
  </div>
68443
- <button type="button" class="christianity-leader-card" [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
68576
+ <button type="button" class="christianity-leader-card" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
68444
68577
  <span>{{ opponent().leaderName }}</span>
68445
68578
  <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
68446
68579
  </button>
68447
- <div class="christianity-hand-count">
68448
- <span>{{ t('christianityHand') }}</span>
68449
- <strong>{{ opponentHandCount() }}</strong>
68450
- </div>
68580
+ <span class="christianity-rack-spacer" aria-hidden="true"></span>
68451
68581
  </section>
68452
68582
 
68453
68583
  <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
@@ -68456,6 +68586,7 @@ class ChristianityGameComponent {
68456
68586
  <button
68457
68587
  type="button"
68458
68588
  class="christianity-card-preview-card christianity-card-preview-card--battle"
68589
+ valLightRipple
68459
68590
  [class.is-target]="selectedAttacker()"
68460
68591
  (click)="handleOpponentCharacter(slot.card)"
68461
68592
  >
@@ -68470,14 +68601,14 @@ class ChristianityGameComponent {
68470
68601
  </section>
68471
68602
 
68472
68603
  <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
68473
- <button type="button" class="christianity-zone-pile christianity-zone-pile--history" (click)="showHistory.set(true)">
68604
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="showHistory.set(true)">
68474
68605
  <i aria-hidden="true"></i>
68475
68606
  <i aria-hidden="true"></i>
68476
68607
  <i aria-hidden="true"></i>
68477
68608
  <span>{{ t('christianityHistory') }}</span>
68478
68609
  <strong>{{ game().historyZone.length }}</strong>
68479
68610
  </button>
68480
- <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" aria-live="polite" (click)="inspectDeck()">
68611
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
68481
68612
  <i aria-hidden="true"></i>
68482
68613
  <i aria-hidden="true"></i>
68483
68614
  <i aria-hidden="true"></i>
@@ -68497,6 +68628,7 @@ class ChristianityGameComponent {
68497
68628
  <button
68498
68629
  type="button"
68499
68630
  class="christianity-card-preview-card christianity-card-preview-card--battle"
68631
+ valLightRipple
68500
68632
  [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
68501
68633
  [class.is-exhausted]="!slot.card.canAttack"
68502
68634
  (click)="selectAttacker(slot.card)"
@@ -68504,6 +68636,10 @@ class ChristianityGameComponent {
68504
68636
  <span>{{ slot.card.name }}</span>
68505
68637
  <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68506
68638
  </button>
68639
+ } @else if (canPlaceSelectedCharacter()) {
68640
+ <button type="button" class="christianity-slot christianity-slot--play-target" valLightRipple (click)="playSelectedCard($index)">
68641
+ <span>{{ t('christianityPlayHere') }}</span>
68642
+ </button>
68507
68643
  } @else {
68508
68644
  <span class="christianity-slot"></span>
68509
68645
  }
@@ -68512,7 +68648,13 @@ class ChristianityGameComponent {
68512
68648
 
68513
68649
  <section class="christianity-player-rack">
68514
68650
  <div class="christianity-offerings-zone">
68515
- <button type="button" class="christianity-offering-pile" (click)="openOfferings('P1')">
68651
+ <button
68652
+ type="button"
68653
+ class="christianity-offering-pile"
68654
+ valLightRipple
68655
+ [class.is-play-target]="canPlaceSelectedOffering()"
68656
+ (click)="handleOfferingPile('P1')"
68657
+ >
68516
68658
  <i aria-hidden="true"></i>
68517
68659
  <i aria-hidden="true"></i>
68518
68660
  <i aria-hidden="true"></i>
@@ -68520,7 +68662,7 @@ class ChristianityGameComponent {
68520
68662
  <strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
68521
68663
  </button>
68522
68664
  </div>
68523
- <button type="button" class="christianity-leader-card" (click)="inspectLeader('P1')">
68665
+ <button type="button" class="christianity-leader-card" valLightRipple (click)="inspectLeader('P1')">
68524
68666
  <span>{{ player().leaderName }}</span>
68525
68667
  <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
68526
68668
  </button>
@@ -68542,15 +68684,24 @@ class ChristianityGameComponent {
68542
68684
  </section>
68543
68685
 
68544
68686
  <section class="christianity-hand-shelf">
68545
- <section class="christianity-hand-fan" [attr.aria-label]="t('christianityYourHand')">
68687
+ <div class="christianity-hand-meter">
68688
+ <span>{{ t('christianityHand') }}</span>
68689
+ <strong>{{ player().hand?.length ?? 0 }}</strong>
68690
+ </div>
68691
+ <section class="christianity-hand-fan" [attr.aria-label]="t('christianityYourHand')" (pointerleave)="clearHoveredHandIndex()">
68546
68692
  @for (cardId of player().hand ?? []; track cardId + $index) {
68547
68693
  @let card = cardDefinition(cardId);
68548
68694
  <button
68549
68695
  type="button"
68550
68696
  class="christianity-card-preview-card christianity-card-preview-card--hand"
68697
+ valLightRipple
68551
68698
  [class.is-selected]="selectedHandCard() === cardId"
68552
68699
  [class.is-disabled]="!canPlay(card)"
68700
+ [style.z-index]="handCardZIndex($index)"
68553
68701
  [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
68702
+ (pointerenter)="setHoveredHandIndex($index)"
68703
+ (pointerdown)="setHoveredHandIndex($index)"
68704
+ (pointerup)="releaseHoveredHand($event)"
68554
68705
  (click)="selectHandCard(cardId)"
68555
68706
  >
68556
68707
  <small>
@@ -68585,6 +68736,9 @@ class ChristianityGameComponent {
68585
68736
  (pointermove)="tiltPreview($event)"
68586
68737
  (pointerleave)="resetPreviewTilt()"
68587
68738
  >
68739
+ <button type="button" class="christianity-floating-card-close" (click)="closePreview()">
68740
+ {{ t('close') }}
68741
+ </button>
68588
68742
  <small>{{ selectedPreview()?.eyebrow }}</small>
68589
68743
  <strong>{{ selectedPreview()?.title }}</strong>
68590
68744
  <span>{{ selectedPreview()?.meta }}</span>
@@ -68609,13 +68763,18 @@ class ChristianityGameComponent {
68609
68763
  <section class="christianity-history-drawer">
68610
68764
  <header>
68611
68765
  <h2>{{ t('christianityHistory') }}</h2>
68612
- <span>{{ game().historyZone.length }}</span>
68766
+ <div class="christianity-dialog-actions">
68767
+ <span>{{ game().historyZone.length }}</span>
68768
+ <button type="button" class="christianity-dialog-close" (click)="showHistory.set(false)">
68769
+ {{ t('close') }}
68770
+ </button>
68771
+ </div>
68613
68772
  </header>
68614
68773
  @if (game().historyZone.length) {
68615
68774
  <div class="christianity-history-grid">
68616
68775
  @for (cardId of game().historyZone; track cardId + $index) {
68617
68776
  @let card = cardDefinition(cardId);
68618
- <button type="button" class="christianity-card-preview-card" (click)="inspectHistoryCard(cardId)">
68777
+ <button type="button" class="christianity-card-preview-card" valLightRipple (click)="inspectHistoryCard(cardId)">
68619
68778
  <small>{{ card.type === 'offering' ? t('christianityOfferingCard') : t('christianityCharacterCard') }}</small>
68620
68779
  <span>{{ card.name }}</span>
68621
68780
  <strong>
@@ -68640,12 +68799,17 @@ class ChristianityGameComponent {
68640
68799
  <section class="christianity-history-drawer christianity-offerings-drawer">
68641
68800
  <header>
68642
68801
  <h2>{{ t('christianityOfferings') }}</h2>
68643
- <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
68802
+ <div class="christianity-dialog-actions">
68803
+ <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
68804
+ <button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
68805
+ {{ t('close') }}
68806
+ </button>
68807
+ </div>
68644
68808
  </header>
68645
68809
  <div class="christianity-offering-list">
68646
68810
  @for (offering of offeringPlayer.offerings; track offering.instanceId) {
68647
68811
  <article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
68648
- <button type="button" class="christianity-offering-card" (click)="inspectOffering(offering)">
68812
+ <button type="button" class="christianity-offering-card" valLightRipple (click)="inspectOffering(offering)">
68649
68813
  <small>{{ t('christianityOfferingCard') }}</small>
68650
68814
  <span>{{ offering.name }}</span>
68651
68815
  <strong>+{{ offering.value }}</strong>
@@ -68672,11 +68836,11 @@ class ChristianityGameComponent {
68672
68836
  </section>
68673
68837
  }
68674
68838
  </main>
68675
- `, isInline: true, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.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}.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(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.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{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.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:7.4rem;padding:0 .25rem;isolation:isolate}.christianity-hand-shelf{display:grid;min-height:8.1rem;padding:.35rem .25rem 0;overflow:hidden}.christianity-hand-shelf--opponent{min-height:5.6rem;padding:0 .25rem .15rem}.christianity-hand-fan--opponent{min-height:4.4rem;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);margin-inline:-.42rem;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-card-preview-card--hand:hover,.christianity-card-preview-card--hand.is-selected{z-index:3;border-color:#2563eb;box-shadow:0 1rem 2rem #2563eb2e}.christianity-card-preview-card--back{width:clamp(4rem,14vw,5.7rem);min-height:clamp(5rem,16vw,6.6rem);background:linear-gradient(135deg,#102a431f,#102a4305),repeating-linear-gradient(45deg,#e2e8f0 0 .35rem,#f8fafc .35rem .7rem)}.christianity-card-preview-card--battle{width:100%;min-height:5.7rem;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{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{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-count{display:grid;align-content:center;justify-items:center;width:100%;min-height:3.4rem;padding:.35rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#ffffffad}.christianity-hand-count span{color:#1f293394;font-size:.72rem}.christianity-hand-count strong{font-size:1.05rem}.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:6.6rem;padding:.62rem .52rem .55rem;background:linear-gradient(180deg,#fff,#f8fafc),linear-gradient(135deg,rgba(250,204,21,.18),transparent 42%)}.christianity-offering-pile i{position:absolute;inset:.6rem auto auto .7rem;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{width:min(100%,6.5rem);min-height:5.8rem}.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:.62rem .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:.62rem .72rem auto 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{position:fixed;top:50%;left:50%;z-index:21;display:grid;gap:.45rem;width:min(20rem,calc(100vw - 2rem));min-height:min(27rem,calc(100vh - 5rem));padding:1rem;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 2.4rem 5rem #102a4357,inset 0 0 0 .35rem #ffffff8c;touch-action:none;transform:translate(calc(-50% + var(--preview-shift-x, 0px)),calc(-50% + 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-preview-backdrop,.christianity-history-backdrop{position:fixed;inset:0;z-index:20;border:0;border-radius:0;background:#0f172a75}.christianity-floating-card small,.christianity-floating-card span{color:#1f2933a3}.christianity-floating-card strong{font-size:clamp(1.35rem,8vw,2rem);line-height:1.05}.christianity-floating-card p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-history-backdrop{z-index:22}.christianity-history-drawer{position:fixed;right:max(.5rem,env(safe-area-inset-right));bottom:max(.5rem,env(safe-area-inset-bottom));left:max(.5rem,env(safe-area-inset-left));z-index:23;display:grid;gap:.75rem;max-height:min(27rem,calc(100vh - 4rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347}.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-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;overflow-y:auto;padding:.1rem .1rem .25rem}.christianity-offerings-drawer{max-height:min(30rem,calc(100vh - 3rem))}.christianity-offering-list{display:grid;gap:.6rem;overflow-y:auto;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:6.8rem;overflow-x:clip}.christianity-hand-shelf{min-height:7.4rem;padding-top:.25rem}.christianity-hand-shelf--opponent{min-height:5rem;padding-top:0}.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-offering-pile,.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);min-height:clamp(5.8rem,26vw,7.4rem)}.christianity-offering-row{grid-template-columns:minmax(4.5rem,5.5rem) minmax(0,1fr);gap:.5rem}.christianity-hand-fan--opponent{min-height:4rem}}\n"] }); }
68839
+ `, isInline: true, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.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(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.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:5.8rem;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 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:9.6rem;padding:0 .25rem;isolation:isolate;overflow:visible}.christianity-hand-shelf{position:relative;display:grid;z-index:7;min-height:10.35rem;padding:1.05rem .25rem .65rem;overflow:visible}.christianity-hand-shelf--opponent{z-index:5;min-height:5.9rem;padding:.55rem .25rem .2rem}.christianity-hand-fan--opponent{min-height:5rem;align-items:start;transform:translateY(-.15rem)}.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);margin-inline:-.42rem;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-card-preview-card--hand:hover,.christianity-card-preview-card--hand.is-selected{z-index:3;border-color:#2563eb;box-shadow:0 1rem 2rem #2563eb2e}.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);background:linear-gradient(135deg,#102a431f,#102a4305),repeating-linear-gradient(45deg,#e2e8f0 0 .35rem,#f8fafc .35rem .7rem)}.christianity-card-preview-card--battle{width:100%;min-height:5.7rem;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:6.6rem;padding:.7rem .52rem .55rem;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.1rem .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{position:fixed;top:50%;left:50%;z-index:61;display:grid;gap:.45rem;width:min(23rem,calc(100vw - 1.25rem));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(calc(-50% + var(--preview-shift-x, 0px)),calc(-50% + 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-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;gap:.75rem;width:min(calc(100vw - 1rem),44rem);max-height:min(27rem,calc(100vh - 4rem));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;overflow-y:auto;padding:.1rem .1rem .25rem}.christianity-offerings-drawer{width:min(calc(100vw - 1rem),48rem);max-height:min(30rem,calc(100vh - 3rem))}.christianity-offering-list{display:grid;gap:.6rem;overflow-y:auto;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:8.75rem;overflow:visible}.christianity-hand-shelf{min-height:9.45rem;padding-top:1rem;padding-bottom:.45rem}.christianity-hand-shelf--opponent{min-height:5.65rem;padding-top:.5rem;padding-bottom:.2rem}.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-offering-pile,.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem}.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:4.85rem}}\n"], dependencies: [{ kind: "directive", type: LightRippleDirective, selector: "[valLightRipple]" }] }); }
68676
68840
  }
68677
68841
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, decorators: [{
68678
68842
  type: Component,
68679
- args: [{ selector: 'val-christianity-game', standalone: true, template: `
68843
+ args: [{ selector: 'val-christianity-game', standalone: true, imports: [LightRippleDirective], template: `
68680
68844
  <main class="christianity-shell">
68681
68845
  <section class="christianity-header">
68682
68846
  <div>
@@ -68710,24 +68874,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68710
68874
  </article>
68711
68875
  </section>
68712
68876
 
68713
- <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
68714
- <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
68715
- @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
68716
- <button
68717
- type="button"
68718
- class="christianity-card-preview-card christianity-card-preview-card--back"
68719
- [style.transform]="fanTransform($index, opponentHandCount(), true)"
68720
- [attr.aria-label]="t('christianityHiddenCard')"
68721
- ></button>
68722
- }
68877
+ <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
68878
+ <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
68879
+ <div class="christianity-hand-meter christianity-hand-meter--opponent">
68880
+ <span>{{ t('christianityHand') }}</span>
68881
+ <strong>{{ opponentHandCount() }}</strong>
68882
+ </div>
68883
+ <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
68884
+ @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
68885
+ <button
68886
+ type="button"
68887
+ class="christianity-card-preview-card christianity-card-preview-card--back"
68888
+ valLightRipple
68889
+ [style.transform]="fanTransform($index, opponentHandCount(), true)"
68890
+ [attr.aria-label]="t('christianityHiddenCard')"
68891
+ ></button>
68892
+ }
68893
+ </section>
68723
68894
  </section>
68724
- </section>
68725
68895
 
68726
- <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
68727
68896
  <section class="christianity-player-side christianity-player-side--opponent">
68728
68897
  <section class="christianity-player-rack christianity-player-rack--opponent">
68729
68898
  <div class="christianity-offerings-zone">
68730
- <button type="button" class="christianity-offering-pile" (click)="openOfferings('P2')">
68899
+ <button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
68731
68900
  <i aria-hidden="true"></i>
68732
68901
  <i aria-hidden="true"></i>
68733
68902
  <i aria-hidden="true"></i>
@@ -68735,14 +68904,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68735
68904
  <strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
68736
68905
  </button>
68737
68906
  </div>
68738
- <button type="button" class="christianity-leader-card" [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
68907
+ <button type="button" class="christianity-leader-card" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
68739
68908
  <span>{{ opponent().leaderName }}</span>
68740
68909
  <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
68741
68910
  </button>
68742
- <div class="christianity-hand-count">
68743
- <span>{{ t('christianityHand') }}</span>
68744
- <strong>{{ opponentHandCount() }}</strong>
68745
- </div>
68911
+ <span class="christianity-rack-spacer" aria-hidden="true"></span>
68746
68912
  </section>
68747
68913
 
68748
68914
  <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
@@ -68751,6 +68917,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68751
68917
  <button
68752
68918
  type="button"
68753
68919
  class="christianity-card-preview-card christianity-card-preview-card--battle"
68920
+ valLightRipple
68754
68921
  [class.is-target]="selectedAttacker()"
68755
68922
  (click)="handleOpponentCharacter(slot.card)"
68756
68923
  >
@@ -68765,14 +68932,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68765
68932
  </section>
68766
68933
 
68767
68934
  <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
68768
- <button type="button" class="christianity-zone-pile christianity-zone-pile--history" (click)="showHistory.set(true)">
68935
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="showHistory.set(true)">
68769
68936
  <i aria-hidden="true"></i>
68770
68937
  <i aria-hidden="true"></i>
68771
68938
  <i aria-hidden="true"></i>
68772
68939
  <span>{{ t('christianityHistory') }}</span>
68773
68940
  <strong>{{ game().historyZone.length }}</strong>
68774
68941
  </button>
68775
- <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" aria-live="polite" (click)="inspectDeck()">
68942
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
68776
68943
  <i aria-hidden="true"></i>
68777
68944
  <i aria-hidden="true"></i>
68778
68945
  <i aria-hidden="true"></i>
@@ -68792,6 +68959,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68792
68959
  <button
68793
68960
  type="button"
68794
68961
  class="christianity-card-preview-card christianity-card-preview-card--battle"
68962
+ valLightRipple
68795
68963
  [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
68796
68964
  [class.is-exhausted]="!slot.card.canAttack"
68797
68965
  (click)="selectAttacker(slot.card)"
@@ -68799,6 +68967,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68799
68967
  <span>{{ slot.card.name }}</span>
68800
68968
  <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68801
68969
  </button>
68970
+ } @else if (canPlaceSelectedCharacter()) {
68971
+ <button type="button" class="christianity-slot christianity-slot--play-target" valLightRipple (click)="playSelectedCard($index)">
68972
+ <span>{{ t('christianityPlayHere') }}</span>
68973
+ </button>
68802
68974
  } @else {
68803
68975
  <span class="christianity-slot"></span>
68804
68976
  }
@@ -68807,7 +68979,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68807
68979
 
68808
68980
  <section class="christianity-player-rack">
68809
68981
  <div class="christianity-offerings-zone">
68810
- <button type="button" class="christianity-offering-pile" (click)="openOfferings('P1')">
68982
+ <button
68983
+ type="button"
68984
+ class="christianity-offering-pile"
68985
+ valLightRipple
68986
+ [class.is-play-target]="canPlaceSelectedOffering()"
68987
+ (click)="handleOfferingPile('P1')"
68988
+ >
68811
68989
  <i aria-hidden="true"></i>
68812
68990
  <i aria-hidden="true"></i>
68813
68991
  <i aria-hidden="true"></i>
@@ -68815,7 +68993,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68815
68993
  <strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
68816
68994
  </button>
68817
68995
  </div>
68818
- <button type="button" class="christianity-leader-card" (click)="inspectLeader('P1')">
68996
+ <button type="button" class="christianity-leader-card" valLightRipple (click)="inspectLeader('P1')">
68819
68997
  <span>{{ player().leaderName }}</span>
68820
68998
  <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
68821
68999
  </button>
@@ -68837,15 +69015,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68837
69015
  </section>
68838
69016
 
68839
69017
  <section class="christianity-hand-shelf">
68840
- <section class="christianity-hand-fan" [attr.aria-label]="t('christianityYourHand')">
69018
+ <div class="christianity-hand-meter">
69019
+ <span>{{ t('christianityHand') }}</span>
69020
+ <strong>{{ player().hand?.length ?? 0 }}</strong>
69021
+ </div>
69022
+ <section class="christianity-hand-fan" [attr.aria-label]="t('christianityYourHand')" (pointerleave)="clearHoveredHandIndex()">
68841
69023
  @for (cardId of player().hand ?? []; track cardId + $index) {
68842
69024
  @let card = cardDefinition(cardId);
68843
69025
  <button
68844
69026
  type="button"
68845
69027
  class="christianity-card-preview-card christianity-card-preview-card--hand"
69028
+ valLightRipple
68846
69029
  [class.is-selected]="selectedHandCard() === cardId"
68847
69030
  [class.is-disabled]="!canPlay(card)"
69031
+ [style.z-index]="handCardZIndex($index)"
68848
69032
  [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
69033
+ (pointerenter)="setHoveredHandIndex($index)"
69034
+ (pointerdown)="setHoveredHandIndex($index)"
69035
+ (pointerup)="releaseHoveredHand($event)"
68849
69036
  (click)="selectHandCard(cardId)"
68850
69037
  >
68851
69038
  <small>
@@ -68880,6 +69067,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68880
69067
  (pointermove)="tiltPreview($event)"
68881
69068
  (pointerleave)="resetPreviewTilt()"
68882
69069
  >
69070
+ <button type="button" class="christianity-floating-card-close" (click)="closePreview()">
69071
+ {{ t('close') }}
69072
+ </button>
68883
69073
  <small>{{ selectedPreview()?.eyebrow }}</small>
68884
69074
  <strong>{{ selectedPreview()?.title }}</strong>
68885
69075
  <span>{{ selectedPreview()?.meta }}</span>
@@ -68904,13 +69094,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68904
69094
  <section class="christianity-history-drawer">
68905
69095
  <header>
68906
69096
  <h2>{{ t('christianityHistory') }}</h2>
68907
- <span>{{ game().historyZone.length }}</span>
69097
+ <div class="christianity-dialog-actions">
69098
+ <span>{{ game().historyZone.length }}</span>
69099
+ <button type="button" class="christianity-dialog-close" (click)="showHistory.set(false)">
69100
+ {{ t('close') }}
69101
+ </button>
69102
+ </div>
68908
69103
  </header>
68909
69104
  @if (game().historyZone.length) {
68910
69105
  <div class="christianity-history-grid">
68911
69106
  @for (cardId of game().historyZone; track cardId + $index) {
68912
69107
  @let card = cardDefinition(cardId);
68913
- <button type="button" class="christianity-card-preview-card" (click)="inspectHistoryCard(cardId)">
69108
+ <button type="button" class="christianity-card-preview-card" valLightRipple (click)="inspectHistoryCard(cardId)">
68914
69109
  <small>{{ card.type === 'offering' ? t('christianityOfferingCard') : t('christianityCharacterCard') }}</small>
68915
69110
  <span>{{ card.name }}</span>
68916
69111
  <strong>
@@ -68935,12 +69130,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68935
69130
  <section class="christianity-history-drawer christianity-offerings-drawer">
68936
69131
  <header>
68937
69132
  <h2>{{ t('christianityOfferings') }}</h2>
68938
- <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
69133
+ <div class="christianity-dialog-actions">
69134
+ <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
69135
+ <button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
69136
+ {{ t('close') }}
69137
+ </button>
69138
+ </div>
68939
69139
  </header>
68940
69140
  <div class="christianity-offering-list">
68941
69141
  @for (offering of offeringPlayer.offerings; track offering.instanceId) {
68942
69142
  <article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
68943
- <button type="button" class="christianity-offering-card" (click)="inspectOffering(offering)">
69143
+ <button type="button" class="christianity-offering-card" valLightRipple (click)="inspectOffering(offering)">
68944
69144
  <small>{{ t('christianityOfferingCard') }}</small>
68945
69145
  <span>{{ offering.name }}</span>
68946
69146
  <strong>+{{ offering.value }}</strong>
@@ -68967,7 +69167,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68967
69167
  </section>
68968
69168
  }
68969
69169
  </main>
68970
- `, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.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}.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(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.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{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.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:7.4rem;padding:0 .25rem;isolation:isolate}.christianity-hand-shelf{display:grid;min-height:8.1rem;padding:.35rem .25rem 0;overflow:hidden}.christianity-hand-shelf--opponent{min-height:5.6rem;padding:0 .25rem .15rem}.christianity-hand-fan--opponent{min-height:4.4rem;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);margin-inline:-.42rem;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-card-preview-card--hand:hover,.christianity-card-preview-card--hand.is-selected{z-index:3;border-color:#2563eb;box-shadow:0 1rem 2rem #2563eb2e}.christianity-card-preview-card--back{width:clamp(4rem,14vw,5.7rem);min-height:clamp(5rem,16vw,6.6rem);background:linear-gradient(135deg,#102a431f,#102a4305),repeating-linear-gradient(45deg,#e2e8f0 0 .35rem,#f8fafc .35rem .7rem)}.christianity-card-preview-card--battle{width:100%;min-height:5.7rem;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{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{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-count{display:grid;align-content:center;justify-items:center;width:100%;min-height:3.4rem;padding:.35rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#ffffffad}.christianity-hand-count span{color:#1f293394;font-size:.72rem}.christianity-hand-count strong{font-size:1.05rem}.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:6.6rem;padding:.62rem .52rem .55rem;background:linear-gradient(180deg,#fff,#f8fafc),linear-gradient(135deg,rgba(250,204,21,.18),transparent 42%)}.christianity-offering-pile i{position:absolute;inset:.6rem auto auto .7rem;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{width:min(100%,6.5rem);min-height:5.8rem}.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:.62rem .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:.62rem .72rem auto 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{position:fixed;top:50%;left:50%;z-index:21;display:grid;gap:.45rem;width:min(20rem,calc(100vw - 2rem));min-height:min(27rem,calc(100vh - 5rem));padding:1rem;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 2.4rem 5rem #102a4357,inset 0 0 0 .35rem #ffffff8c;touch-action:none;transform:translate(calc(-50% + var(--preview-shift-x, 0px)),calc(-50% + 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-preview-backdrop,.christianity-history-backdrop{position:fixed;inset:0;z-index:20;border:0;border-radius:0;background:#0f172a75}.christianity-floating-card small,.christianity-floating-card span{color:#1f2933a3}.christianity-floating-card strong{font-size:clamp(1.35rem,8vw,2rem);line-height:1.05}.christianity-floating-card p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-history-backdrop{z-index:22}.christianity-history-drawer{position:fixed;right:max(.5rem,env(safe-area-inset-right));bottom:max(.5rem,env(safe-area-inset-bottom));left:max(.5rem,env(safe-area-inset-left));z-index:23;display:grid;gap:.75rem;max-height:min(27rem,calc(100vh - 4rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347}.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-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;overflow-y:auto;padding:.1rem .1rem .25rem}.christianity-offerings-drawer{max-height:min(30rem,calc(100vh - 3rem))}.christianity-offering-list{display:grid;gap:.6rem;overflow-y:auto;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:6.8rem;overflow-x:clip}.christianity-hand-shelf{min-height:7.4rem;padding-top:.25rem}.christianity-hand-shelf--opponent{min-height:5rem;padding-top:0}.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-offering-pile,.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);min-height:clamp(5.8rem,26vw,7.4rem)}.christianity-offering-row{grid-template-columns:minmax(4.5rem,5.5rem) minmax(0,1fr);gap:.5rem}.christianity-hand-fan--opponent{min-height:4rem}}\n"] }]
69170
+ `, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.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(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.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:5.8rem;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 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:9.6rem;padding:0 .25rem;isolation:isolate;overflow:visible}.christianity-hand-shelf{position:relative;display:grid;z-index:7;min-height:10.35rem;padding:1.05rem .25rem .65rem;overflow:visible}.christianity-hand-shelf--opponent{z-index:5;min-height:5.9rem;padding:.55rem .25rem .2rem}.christianity-hand-fan--opponent{min-height:5rem;align-items:start;transform:translateY(-.15rem)}.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);margin-inline:-.42rem;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-card-preview-card--hand:hover,.christianity-card-preview-card--hand.is-selected{z-index:3;border-color:#2563eb;box-shadow:0 1rem 2rem #2563eb2e}.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);background:linear-gradient(135deg,#102a431f,#102a4305),repeating-linear-gradient(45deg,#e2e8f0 0 .35rem,#f8fafc .35rem .7rem)}.christianity-card-preview-card--battle{width:100%;min-height:5.7rem;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:6.6rem;padding:.7rem .52rem .55rem;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.1rem .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{position:fixed;top:50%;left:50%;z-index:61;display:grid;gap:.45rem;width:min(23rem,calc(100vw - 1.25rem));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(calc(-50% + var(--preview-shift-x, 0px)),calc(-50% + 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-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;gap:.75rem;width:min(calc(100vw - 1rem),44rem);max-height:min(27rem,calc(100vh - 4rem));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;overflow-y:auto;padding:.1rem .1rem .25rem}.christianity-offerings-drawer{width:min(calc(100vw - 1rem),48rem);max-height:min(30rem,calc(100vh - 3rem))}.christianity-offering-list{display:grid;gap:.6rem;overflow-y:auto;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:8.75rem;overflow:visible}.christianity-hand-shelf{min-height:9.45rem;padding-top:1rem;padding-bottom:.45rem}.christianity-hand-shelf--opponent{min-height:5.65rem;padding-top:.5rem;padding-bottom:.2rem}.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-offering-pile,.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem}.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:4.85rem}}\n"] }]
68971
69171
  }], ctorParameters: () => [] });
68972
69172
 
68973
69173
  addIcons({ refreshOutline, sparklesOutline, trophyOutline });
@@ -86549,5 +86749,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
86549
86749
  * Generated bundle index. Do not edit.
86550
86750
  */
86551
86751
 
86552
- 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, 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 };
86752
+ 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 };
86553
86753
  //# sourceMappingURL=valtech-components.mjs.map