valtech-components 4.0.429 → 4.0.430

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.
@@ -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.429';
61
+ const VERSION = '4.0.430';
62
62
 
63
63
  // Control de estado de refresco (singleton a nivel de módulo)
64
64
  let isRefreshing = false;
@@ -62464,6 +62464,7 @@ const MINI_GAMES_I18N = {
62464
62464
  christianityHand: 'Mano',
62465
62465
  christianityOpponentBattle: 'Zona de batalla rival',
62466
62466
  christianityYourBattle: 'Tu zona de batalla',
62467
+ christianityOpponentHand: 'Mano rival',
62467
62468
  christianitySharedZone: 'Zona compartida',
62468
62469
  christianityHistory: 'Historia',
62469
62470
  christianityDeck: 'Mazo',
@@ -62472,14 +62473,26 @@ const MINI_GAMES_I18N = {
62472
62473
  christianityYourHand: 'Tu mano',
62473
62474
  christianityCost: 'Coste',
62474
62475
  christianityOfferingCard: 'Ofrenda',
62476
+ christianityCharacterCard: 'Personaje',
62477
+ christianityLeaderCard: 'Líder',
62478
+ christianityHiddenCard: 'Carta oculta',
62475
62479
  christianityEndTurn: 'Terminar turno',
62476
62480
  christianityPlayCard: 'Jugar carta',
62477
62481
  christianityReset: 'Reiniciar mock',
62478
62482
  christianityWaitTurn: 'Espera el turno rival.',
62479
62483
  christianityChooseTarget: 'Elige un objetivo para atacar.',
62484
+ christianityChooseCharacterTarget: 'El rival tiene personajes: debes atacarlos antes que al líder.',
62480
62485
  christianityReadyToPlay: 'Puedes jugar esta carta.',
62481
62486
  christianityNeedOfferings: 'Necesitas más ofrendas para jugar esa carta.',
62482
62487
  christianityChooseCard: 'Elige una carta o un personaje listo para actuar.',
62488
+ christianityLeaderProtected: 'No puedes atacar directamente al líder mientras tenga personajes en batalla.',
62489
+ christianityLeaderBody: 'Si su vida llega a 0, la partida termina.',
62490
+ christianityOfferingReady: 'Lista',
62491
+ christianityOfferingExhausted: 'Agotada',
62492
+ christianityOfferingBody: 'Se agota para pagar costes y vuelve a estar lista al comenzar tu turno.',
62493
+ christianityCharacterBody: 'Entra a batalla y debe esperar un turno para atacar.',
62494
+ christianityCharacterReady: 'Listo para atacar.',
62495
+ christianityCharacterExhausted: 'No puede atacar todavía.',
62483
62496
  christianityHistoryEmpty: 'Todavía no hay cartas en historia.',
62484
62497
  soonTitle: 'Próximamente',
62485
62498
  openGame: 'Jugar',
@@ -62869,6 +62882,7 @@ const MINI_GAMES_I18N = {
62869
62882
  christianityHand: 'Hand',
62870
62883
  christianityOpponentBattle: 'Opponent battle zone',
62871
62884
  christianityYourBattle: 'Your battle zone',
62885
+ christianityOpponentHand: 'Opponent hand',
62872
62886
  christianitySharedZone: 'Shared zone',
62873
62887
  christianityHistory: 'History',
62874
62888
  christianityDeck: 'Deck',
@@ -62877,14 +62891,26 @@ const MINI_GAMES_I18N = {
62877
62891
  christianityYourHand: 'Your hand',
62878
62892
  christianityCost: 'Cost',
62879
62893
  christianityOfferingCard: 'Offering',
62894
+ christianityCharacterCard: 'Character',
62895
+ christianityLeaderCard: 'Leader',
62896
+ christianityHiddenCard: 'Hidden card',
62880
62897
  christianityEndTurn: 'End turn',
62881
62898
  christianityPlayCard: 'Play card',
62882
62899
  christianityReset: 'Reset mock',
62883
62900
  christianityWaitTurn: 'Wait for the opponent turn.',
62884
62901
  christianityChooseTarget: 'Choose a target to attack.',
62902
+ christianityChooseCharacterTarget: 'The opponent has characters: attack them before the leader.',
62885
62903
  christianityReadyToPlay: 'You can play this card.',
62886
62904
  christianityNeedOfferings: 'You need more offerings to play that card.',
62887
62905
  christianityChooseCard: 'Choose a card or a ready character.',
62906
+ christianityLeaderProtected: 'You cannot attack the leader directly while they have characters in battle.',
62907
+ christianityLeaderBody: 'If this leader reaches 0 life, the game ends.',
62908
+ christianityOfferingReady: 'Ready',
62909
+ christianityOfferingExhausted: 'Exhausted',
62910
+ christianityOfferingBody: 'Exhaust it to pay costs. It readies again at the start of your turn.',
62911
+ christianityCharacterBody: 'Enters battle and must wait one turn before attacking.',
62912
+ christianityCharacterReady: 'Ready to attack.',
62913
+ christianityCharacterExhausted: 'Cannot attack yet.',
62888
62914
  christianityHistoryEmpty: 'There are no cards in history yet.',
62889
62915
  soonTitle: 'Coming soon',
62890
62916
  openGame: 'Play',
@@ -67944,11 +67970,13 @@ class ChristianityGameComponent {
67944
67970
  this.game = signal(structuredClone(STARTING_GAME));
67945
67971
  this.selectedHandCard = signal(null);
67946
67972
  this.selectedAttacker = signal(null);
67973
+ this.selectedPreview = signal(null);
67947
67974
  this.showHistory = signal(false);
67948
67975
  this.player = computed(() => this.game().players.P1);
67949
67976
  this.opponent = computed(() => this.game().players.P2);
67950
67977
  this.currentPlayer = computed(() => this.game().players[this.game().turnOwner]);
67951
67978
  this.isOwnTurn = computed(() => this.game().turnOwner === 'P1');
67979
+ this.hasOpponentGuards = computed(() => this.opponent().battleZone.length > 0);
67952
67980
  this.opponentHandCount = computed(() => this.opponent().handCount ?? this.opponent().hand?.length ?? 0);
67953
67981
  this.statusText = computed(() => {
67954
67982
  const attacker = this.selectedAttacker();
@@ -67957,7 +67985,7 @@ class ChristianityGameComponent {
67957
67985
  return this.t('christianityWaitTurn');
67958
67986
  }
67959
67987
  if (attacker) {
67960
- return this.t('christianityChooseTarget');
67988
+ return this.hasOpponentGuards() ? this.t('christianityChooseCharacterTarget') : this.t('christianityChooseTarget');
67961
67989
  }
67962
67990
  if (handCard) {
67963
67991
  const card = this.cardDefinition(handCard);
@@ -67976,11 +68004,24 @@ class ChristianityGameComponent {
67976
68004
  }
67977
68005
  battleSlots(seat) {
67978
68006
  const cards = this.game().players[seat].battleZone;
67979
- return Array.from({ length: 5 }, (_, index) => ({
68007
+ return Array.from({ length: 4 }, (_, index) => ({
67980
68008
  trackId: cards[index]?.instanceId ?? `${seat}-empty-${index}`,
67981
68009
  card: cards[index],
67982
68010
  }));
67983
68011
  }
68012
+ hiddenHandCards(count) {
68013
+ return Array.from({ length: count });
68014
+ }
68015
+ fanTransform(index, total, opponent) {
68016
+ if (total <= 1)
68017
+ return opponent ? 'rotate(180deg)' : 'none';
68018
+ const center = (total - 1) / 2;
68019
+ const offset = index - center;
68020
+ const rotate = offset * 5;
68021
+ const lift = Math.abs(offset) * 0.25;
68022
+ const base = opponent ? 'rotate(180deg)' : '';
68023
+ return `${base} translateY(${lift}rem) rotate(${rotate}deg)`;
68024
+ }
67984
68025
  readyOfferings(player) {
67985
68026
  return player.offerings.reduce((total, offering) => total + (offering.ready ? offering.value : 0), 0);
67986
68027
  }
@@ -67989,7 +68030,7 @@ class ChristianityGameComponent {
67989
68030
  return false;
67990
68031
  if (card.type === 'offering')
67991
68032
  return !this.player().offeringPlayedThisTurn;
67992
- return this.readyOfferings(this.player()) >= card.cost && this.player().battleZone.length < 5;
68033
+ return this.readyOfferings(this.player()) >= card.cost && this.player().battleZone.length < 4;
67993
68034
  }
67994
68035
  canPlaySelected() {
67995
68036
  const selected = this.selectedHandCard();
@@ -67998,6 +68039,7 @@ class ChristianityGameComponent {
67998
68039
  selectHandCard(cardId) {
67999
68040
  this.selectedAttacker.set(null);
68000
68041
  this.selectedHandCard.set(this.selectedHandCard() === cardId ? null : cardId);
68042
+ this.inspectHandCard(cardId);
68001
68043
  }
68002
68044
  playSelectedCard() {
68003
68045
  const cardId = this.selectedHandCard();
@@ -68049,14 +68091,36 @@ class ChristianityGameComponent {
68049
68091
  }
68050
68092
  selectAttacker(card) {
68051
68093
  this.selectedHandCard.set(null);
68094
+ this.inspectCharacter(card);
68052
68095
  if (!this.isOwnTurn() || !card.canAttack)
68053
68096
  return;
68054
68097
  this.selectedAttacker.set(this.selectedAttacker()?.instanceId === card.instanceId ? null : card);
68055
68098
  }
68099
+ handleOpponentCharacter(card) {
68100
+ this.inspectCharacter(card);
68101
+ if (this.selectedAttacker()) {
68102
+ this.attackCharacter(card);
68103
+ }
68104
+ }
68105
+ handleOpponentLeader() {
68106
+ this.inspectLeader('P2');
68107
+ if (this.selectedAttacker() && !this.hasOpponentGuards()) {
68108
+ this.attackLeader();
68109
+ }
68110
+ }
68056
68111
  attackLeader() {
68057
68112
  const attacker = this.selectedAttacker();
68058
68113
  if (!attacker)
68059
68114
  return;
68115
+ if (this.hasOpponentGuards()) {
68116
+ this.selectedPreview.set({
68117
+ title: this.opponent().leaderName,
68118
+ eyebrow: this.t('christianityLeaderCard'),
68119
+ meta: `${this.opponent().leaderHp}/${this.opponent().leaderMaxHp}`,
68120
+ body: this.t('christianityLeaderProtected'),
68121
+ });
68122
+ return;
68123
+ }
68060
68124
  this.game.update(game => {
68061
68125
  const next = structuredClone(game);
68062
68126
  const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
@@ -68111,6 +68175,7 @@ class ChristianityGameComponent {
68111
68175
  this.game.set(structuredClone(STARTING_GAME));
68112
68176
  this.selectedHandCard.set(null);
68113
68177
  this.selectedAttacker.set(null);
68178
+ this.selectedPreview.set(null);
68114
68179
  }
68115
68180
  historyNames() {
68116
68181
  return this.game()
@@ -68124,6 +68189,40 @@ class ChristianityGameComponent {
68124
68189
  game.historyZone.push(...destroyed.map(card => card.cardId));
68125
68190
  player.battleZone = player.battleZone.filter(card => card.currentHp > 0);
68126
68191
  }
68192
+ inspectLeader(seat) {
68193
+ const player = this.game().players[seat];
68194
+ this.selectedPreview.set({
68195
+ title: player.leaderName,
68196
+ eyebrow: this.t('christianityLeaderCard'),
68197
+ meta: `${player.leaderHp}/${player.leaderMaxHp}`,
68198
+ body: seat === 'P2' && this.hasOpponentGuards() ? this.t('christianityLeaderProtected') : this.t('christianityLeaderBody'),
68199
+ });
68200
+ }
68201
+ inspectOffering(offering) {
68202
+ this.selectedPreview.set({
68203
+ title: offering.name,
68204
+ eyebrow: this.t('christianityOfferingCard'),
68205
+ meta: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
68206
+ body: this.t('christianityOfferingBody'),
68207
+ });
68208
+ }
68209
+ inspectHandCard(cardId) {
68210
+ const card = this.cardDefinition(cardId);
68211
+ this.selectedPreview.set({
68212
+ title: card.name,
68213
+ eyebrow: card.type === 'offering' ? this.t('christianityOfferingCard') : this.t('christianityCharacterCard'),
68214
+ meta: card.type === 'offering' ? `+${card.life}` : `${this.t('christianityCost')} ${card.cost} · ${card.attack}/${card.life}`,
68215
+ body: card.type === 'offering' ? this.t('christianityOfferingBody') : this.t('christianityCharacterBody'),
68216
+ });
68217
+ }
68218
+ inspectCharacter(card) {
68219
+ this.selectedPreview.set({
68220
+ title: card.name,
68221
+ eyebrow: this.t('christianityCharacterCard'),
68222
+ meta: `${card.attack}/${card.currentHp}`,
68223
+ body: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
68224
+ });
68225
+ }
68127
68226
  spendOfferings(player, cost) {
68128
68227
  let remaining = cost;
68129
68228
  player.offerings = player.offerings.map(offering => {
@@ -68147,109 +68246,123 @@ class ChristianityGameComponent {
68147
68246
  </div>
68148
68247
  </section>
68149
68248
 
68249
+ <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
68250
+ @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
68251
+ <button
68252
+ type="button"
68253
+ class="christianity-card-preview-card christianity-card-preview-card--back"
68254
+ [style.transform]="fanTransform($index, opponentHandCount(), true)"
68255
+ [attr.aria-label]="t('christianityHiddenCard')"
68256
+ ></button>
68257
+ }
68258
+ </section>
68259
+
68150
68260
  <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
68151
- <section class="christianity-player christianity-player--opponent">
68152
- <div class="christianity-player__summary">
68153
- <div class="christianity-leader">
68154
- <span>{{ opponent().leaderName }}</span>
68155
- <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
68156
- </div>
68157
- <div class="christianity-offerings">
68158
- <span>{{ t('christianityOfferings') }}</span>
68159
- <strong>{{ readyOfferings(opponent()) }}/{{ opponent().offerings.length }}</strong>
68160
- <div class="christianity-offering-cards" aria-hidden="true">
68161
- @for (offering of opponent().offerings; track offering.instanceId) {
68162
- <i [class.is-used]="!offering.ready"></i>
68163
- }
68164
- </div>
68165
- </div>
68166
- <div class="christianity-hidden-hand">
68167
- <span>{{ t('christianityHand') }}</span>
68168
- <strong>{{ opponentHandCount() }}</strong>
68169
- </div>
68170
- </div>
68171
- <div class="christianity-battle-zone" [attr.aria-label]="t('christianityOpponentBattle')">
68172
- @for (slot of battleSlots('P2'); track slot.trackId) {
68173
- @if (slot.card) {
68174
- <button
68175
- type="button"
68176
- class="christianity-card christianity-card--battle"
68177
- [class.is-target]="selectedAttacker()"
68178
- (click)="attackCharacter(slot.card)"
68179
- >
68180
- <span>{{ slot.card.name }}</span>
68181
- <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68182
- </button>
68183
- } @else {
68184
- <span class="christianity-slot"></span>
68185
- }
68261
+ <section class="christianity-player-rack christianity-player-rack--opponent">
68262
+ <div class="christianity-offerings-zone">
68263
+ @for (offering of opponent().offerings; track offering.instanceId) {
68264
+ <button
68265
+ type="button"
68266
+ class="christianity-card-mini christianity-card-mini--offering"
68267
+ [class.is-exhausted]="!offering.ready"
68268
+ (click)="inspectOffering(offering)"
68269
+ >
68270
+ <span>{{ t('christianityOfferingCard') }}</span>
68271
+ <strong>+{{ offering.value }}</strong>
68272
+ </button>
68186
68273
  }
68187
68274
  </div>
68275
+ <button type="button" class="christianity-leader-card" [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
68276
+ <span>{{ opponent().leaderName }}</span>
68277
+ <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
68278
+ </button>
68279
+ </section>
68280
+
68281
+ <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
68282
+ @for (slot of battleSlots('P2'); track slot.trackId) {
68283
+ @if (slot.card) {
68284
+ <button
68285
+ type="button"
68286
+ class="christianity-card-preview-card christianity-card-preview-card--battle"
68287
+ [class.is-target]="selectedAttacker()"
68288
+ (click)="handleOpponentCharacter(slot.card)"
68289
+ >
68290
+ <span>{{ slot.card.name }}</span>
68291
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68292
+ </button>
68293
+ } @else {
68294
+ <span class="christianity-slot"></span>
68295
+ }
68296
+ }
68188
68297
  </section>
68189
68298
 
68190
68299
  <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
68191
- <button type="button" class="christianity-pile" (click)="showHistory.set(!showHistory())">
68300
+ <button type="button" class="christianity-zone-card" (click)="showHistory.set(!showHistory())">
68192
68301
  <span>{{ t('christianityHistory') }}</span>
68193
68302
  <strong>{{ game().historyZone.length }}</strong>
68194
68303
  </button>
68195
- <div class="christianity-deck" aria-live="polite">
68304
+ <div class="christianity-zone-card" aria-live="polite">
68196
68305
  <span>{{ t('christianityDeck') }}</span>
68197
68306
  <strong>{{ game().sharedDeckCount }}</strong>
68198
68307
  </div>
68199
- <div class="christianity-place">
68308
+ <div class="christianity-zone-card">
68200
68309
  <span>{{ t('christianityPlace') }}</span>
68201
68310
  <strong>{{ t('christianityEmpty') }}</strong>
68202
68311
  </div>
68203
68312
  </section>
68204
68313
 
68205
- <section class="christianity-player">
68206
- <div class="christianity-battle-zone" [attr.aria-label]="t('christianityYourBattle')">
68207
- @for (slot of battleSlots('P1'); track slot.trackId) {
68208
- @if (slot.card) {
68209
- <button
68210
- type="button"
68211
- class="christianity-card christianity-card--battle"
68212
- [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
68213
- [class.is-exhausted]="!slot.card.canAttack"
68214
- (click)="selectAttacker(slot.card)"
68215
- >
68216
- <span>{{ slot.card.name }}</span>
68217
- <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68218
- </button>
68219
- } @else {
68220
- <span class="christianity-slot"></span>
68221
- }
68314
+ <section class="christianity-battle-zone" [attr.aria-label]="t('christianityYourBattle')">
68315
+ @for (slot of battleSlots('P1'); track slot.trackId) {
68316
+ @if (slot.card) {
68317
+ <button
68318
+ type="button"
68319
+ class="christianity-card-preview-card christianity-card-preview-card--battle"
68320
+ [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
68321
+ [class.is-exhausted]="!slot.card.canAttack"
68322
+ (click)="selectAttacker(slot.card)"
68323
+ >
68324
+ <span>{{ slot.card.name }}</span>
68325
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68326
+ </button>
68327
+ } @else {
68328
+ <span class="christianity-slot"></span>
68329
+ }
68330
+ }
68331
+ </section>
68332
+
68333
+ <section class="christianity-player-rack">
68334
+ <div class="christianity-offerings-zone">
68335
+ @for (offering of player().offerings; track offering.instanceId) {
68336
+ <button
68337
+ type="button"
68338
+ class="christianity-card-mini christianity-card-mini--offering"
68339
+ [class.is-exhausted]="!offering.ready"
68340
+ (click)="inspectOffering(offering)"
68341
+ >
68342
+ <span>{{ t('christianityOfferingCard') }}</span>
68343
+ <strong>+{{ offering.value }}</strong>
68344
+ </button>
68222
68345
  }
68223
68346
  </div>
68224
- <div class="christianity-player__summary">
68225
- <div class="christianity-offerings">
68226
- <span>{{ t('christianityOfferings') }}</span>
68227
- <strong>{{ readyOfferings(player()) }}/{{ player().offerings.length }}</strong>
68228
- <div class="christianity-offering-cards" aria-hidden="true">
68229
- @for (offering of player().offerings; track offering.instanceId) {
68230
- <i [class.is-used]="!offering.ready"></i>
68231
- }
68232
- </div>
68233
- </div>
68234
- <button type="button" class="christianity-leader christianity-leader--target" (click)="attackLeader()">
68235
- <span>{{ player().leaderName }}</span>
68236
- <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
68237
- </button>
68238
- <button type="button" class="christianity-end-turn" (click)="endTurn()">
68239
- {{ t('christianityEndTurn') }}
68240
- </button>
68241
- </div>
68347
+ <button type="button" class="christianity-leader-card" (click)="inspectLeader('P1')">
68348
+ <span>{{ player().leaderName }}</span>
68349
+ <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
68350
+ </button>
68351
+ <button type="button" class="christianity-end-turn" (click)="endTurn()">
68352
+ {{ t('christianityEndTurn') }}
68353
+ </button>
68242
68354
  </section>
68243
68355
  </section>
68244
68356
 
68245
- <section class="christianity-hand" [attr.aria-label]="t('christianityYourHand')">
68357
+ <section class="christianity-hand-fan" [attr.aria-label]="t('christianityYourHand')">
68246
68358
  @for (cardId of player().hand ?? []; track cardId + $index) {
68247
68359
  @let card = cardDefinition(cardId);
68248
68360
  <button
68249
68361
  type="button"
68250
- class="christianity-card christianity-card--hand"
68362
+ class="christianity-card-preview-card christianity-card-preview-card--hand"
68251
68363
  [class.is-selected]="selectedHandCard() === cardId"
68252
68364
  [class.is-disabled]="!canPlay(card)"
68365
+ [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
68253
68366
  (click)="selectHandCard(cardId)"
68254
68367
  >
68255
68368
  <small>
@@ -68271,6 +68384,15 @@ class ChristianityGameComponent {
68271
68384
  }
68272
68385
  </section>
68273
68386
 
68387
+ @if (selectedPreview()) {
68388
+ <aside class="christianity-floating-card" aria-live="polite">
68389
+ <small>{{ selectedPreview()?.eyebrow }}</small>
68390
+ <strong>{{ selectedPreview()?.title }}</strong>
68391
+ <span>{{ selectedPreview()?.meta }}</span>
68392
+ <p>{{ selectedPreview()?.body }}</p>
68393
+ </aside>
68394
+ }
68395
+
68274
68396
  <section class="christianity-actions" aria-live="polite">
68275
68397
  <p>{{ statusText() }}</p>
68276
68398
  <div>
@@ -68294,7 +68416,7 @@ class ChristianityGameComponent {
68294
68416
  </section>
68295
68417
  }
68296
68418
  </main>
68297
- `, 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-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-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-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.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}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-battle-zone{grid-template-columns:repeat(5,minmax(3.8rem,1fr));overflow-x:auto}}\n"] }); }
68419
+ `, 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-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-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-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.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-fan--opponent{min-height:4.7rem;margin-bottom:-1.1rem}.christianity-card-preview-card,.christianity-card-mini,.christianity-leader-card,.christianity-zone-card,.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{min-height:4.8rem;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-leader-card span,.christianity-zone-card span{font-weight:700}.christianity-card-preview-card strong,.christianity-card-mini strong,.christianity-leader-card strong,.christianity-zone-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{display:grid;grid-template-columns:minmax(4.2rem,1fr) minmax(5rem,6.5rem) minmax(4.2rem,1fr);gap:.55rem;align-items:end;justify-items:center}.christianity-player-rack--opponent{align-items:start}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-end;width:100%}.christianity-card-mini,.christianity-leader-card,.christianity-zone-card{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-mini{width:3.5rem}.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-floating-card{position:fixed;right:max(.75rem,env(safe-area-inset-right));bottom:max(5.8rem,env(safe-area-inset-bottom));z-index:10;display:grid;gap:.28rem;width:min(14rem,calc(100vw - 1.5rem));min-height:10rem;padding:.8rem;border:1px solid rgba(36,48,68,.18);border-radius:.6rem;background:#fffffff5;box-shadow:0 1.25rem 2.5rem #102a432e}.christianity-floating-card small,.christianity-floating-card span{color:#1f2933a3}.christianity-floating-card strong{font-size:1.05rem}.christianity-floating-card p{margin:0;font-size:.86rem;line-height:1.35}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-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-player-rack{grid-template-columns:minmax(3.6rem,1fr) minmax(4.8rem,5.6rem) minmax(3.6rem,1fr)}.christianity-shared-zone{grid-template-columns:repeat(3,minmax(3.7rem,1fr))}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);min-height:clamp(5.8rem,26vw,7.4rem)}.christianity-floating-card{right:.5rem;bottom:4.8rem}}\n"] }); }
68298
68420
  }
68299
68421
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, decorators: [{
68300
68422
  type: Component,
@@ -68311,109 +68433,123 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68311
68433
  </div>
68312
68434
  </section>
68313
68435
 
68436
+ <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
68437
+ @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
68438
+ <button
68439
+ type="button"
68440
+ class="christianity-card-preview-card christianity-card-preview-card--back"
68441
+ [style.transform]="fanTransform($index, opponentHandCount(), true)"
68442
+ [attr.aria-label]="t('christianityHiddenCard')"
68443
+ ></button>
68444
+ }
68445
+ </section>
68446
+
68314
68447
  <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
68315
- <section class="christianity-player christianity-player--opponent">
68316
- <div class="christianity-player__summary">
68317
- <div class="christianity-leader">
68318
- <span>{{ opponent().leaderName }}</span>
68319
- <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
68320
- </div>
68321
- <div class="christianity-offerings">
68322
- <span>{{ t('christianityOfferings') }}</span>
68323
- <strong>{{ readyOfferings(opponent()) }}/{{ opponent().offerings.length }}</strong>
68324
- <div class="christianity-offering-cards" aria-hidden="true">
68325
- @for (offering of opponent().offerings; track offering.instanceId) {
68326
- <i [class.is-used]="!offering.ready"></i>
68327
- }
68328
- </div>
68329
- </div>
68330
- <div class="christianity-hidden-hand">
68331
- <span>{{ t('christianityHand') }}</span>
68332
- <strong>{{ opponentHandCount() }}</strong>
68333
- </div>
68334
- </div>
68335
- <div class="christianity-battle-zone" [attr.aria-label]="t('christianityOpponentBattle')">
68336
- @for (slot of battleSlots('P2'); track slot.trackId) {
68337
- @if (slot.card) {
68338
- <button
68339
- type="button"
68340
- class="christianity-card christianity-card--battle"
68341
- [class.is-target]="selectedAttacker()"
68342
- (click)="attackCharacter(slot.card)"
68343
- >
68344
- <span>{{ slot.card.name }}</span>
68345
- <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68346
- </button>
68347
- } @else {
68348
- <span class="christianity-slot"></span>
68349
- }
68448
+ <section class="christianity-player-rack christianity-player-rack--opponent">
68449
+ <div class="christianity-offerings-zone">
68450
+ @for (offering of opponent().offerings; track offering.instanceId) {
68451
+ <button
68452
+ type="button"
68453
+ class="christianity-card-mini christianity-card-mini--offering"
68454
+ [class.is-exhausted]="!offering.ready"
68455
+ (click)="inspectOffering(offering)"
68456
+ >
68457
+ <span>{{ t('christianityOfferingCard') }}</span>
68458
+ <strong>+{{ offering.value }}</strong>
68459
+ </button>
68350
68460
  }
68351
68461
  </div>
68462
+ <button type="button" class="christianity-leader-card" [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
68463
+ <span>{{ opponent().leaderName }}</span>
68464
+ <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
68465
+ </button>
68466
+ </section>
68467
+
68468
+ <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
68469
+ @for (slot of battleSlots('P2'); track slot.trackId) {
68470
+ @if (slot.card) {
68471
+ <button
68472
+ type="button"
68473
+ class="christianity-card-preview-card christianity-card-preview-card--battle"
68474
+ [class.is-target]="selectedAttacker()"
68475
+ (click)="handleOpponentCharacter(slot.card)"
68476
+ >
68477
+ <span>{{ slot.card.name }}</span>
68478
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68479
+ </button>
68480
+ } @else {
68481
+ <span class="christianity-slot"></span>
68482
+ }
68483
+ }
68352
68484
  </section>
68353
68485
 
68354
68486
  <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
68355
- <button type="button" class="christianity-pile" (click)="showHistory.set(!showHistory())">
68487
+ <button type="button" class="christianity-zone-card" (click)="showHistory.set(!showHistory())">
68356
68488
  <span>{{ t('christianityHistory') }}</span>
68357
68489
  <strong>{{ game().historyZone.length }}</strong>
68358
68490
  </button>
68359
- <div class="christianity-deck" aria-live="polite">
68491
+ <div class="christianity-zone-card" aria-live="polite">
68360
68492
  <span>{{ t('christianityDeck') }}</span>
68361
68493
  <strong>{{ game().sharedDeckCount }}</strong>
68362
68494
  </div>
68363
- <div class="christianity-place">
68495
+ <div class="christianity-zone-card">
68364
68496
  <span>{{ t('christianityPlace') }}</span>
68365
68497
  <strong>{{ t('christianityEmpty') }}</strong>
68366
68498
  </div>
68367
68499
  </section>
68368
68500
 
68369
- <section class="christianity-player">
68370
- <div class="christianity-battle-zone" [attr.aria-label]="t('christianityYourBattle')">
68371
- @for (slot of battleSlots('P1'); track slot.trackId) {
68372
- @if (slot.card) {
68373
- <button
68374
- type="button"
68375
- class="christianity-card christianity-card--battle"
68376
- [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
68377
- [class.is-exhausted]="!slot.card.canAttack"
68378
- (click)="selectAttacker(slot.card)"
68379
- >
68380
- <span>{{ slot.card.name }}</span>
68381
- <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68382
- </button>
68383
- } @else {
68384
- <span class="christianity-slot"></span>
68385
- }
68501
+ <section class="christianity-battle-zone" [attr.aria-label]="t('christianityYourBattle')">
68502
+ @for (slot of battleSlots('P1'); track slot.trackId) {
68503
+ @if (slot.card) {
68504
+ <button
68505
+ type="button"
68506
+ class="christianity-card-preview-card christianity-card-preview-card--battle"
68507
+ [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
68508
+ [class.is-exhausted]="!slot.card.canAttack"
68509
+ (click)="selectAttacker(slot.card)"
68510
+ >
68511
+ <span>{{ slot.card.name }}</span>
68512
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68513
+ </button>
68514
+ } @else {
68515
+ <span class="christianity-slot"></span>
68516
+ }
68517
+ }
68518
+ </section>
68519
+
68520
+ <section class="christianity-player-rack">
68521
+ <div class="christianity-offerings-zone">
68522
+ @for (offering of player().offerings; track offering.instanceId) {
68523
+ <button
68524
+ type="button"
68525
+ class="christianity-card-mini christianity-card-mini--offering"
68526
+ [class.is-exhausted]="!offering.ready"
68527
+ (click)="inspectOffering(offering)"
68528
+ >
68529
+ <span>{{ t('christianityOfferingCard') }}</span>
68530
+ <strong>+{{ offering.value }}</strong>
68531
+ </button>
68386
68532
  }
68387
68533
  </div>
68388
- <div class="christianity-player__summary">
68389
- <div class="christianity-offerings">
68390
- <span>{{ t('christianityOfferings') }}</span>
68391
- <strong>{{ readyOfferings(player()) }}/{{ player().offerings.length }}</strong>
68392
- <div class="christianity-offering-cards" aria-hidden="true">
68393
- @for (offering of player().offerings; track offering.instanceId) {
68394
- <i [class.is-used]="!offering.ready"></i>
68395
- }
68396
- </div>
68397
- </div>
68398
- <button type="button" class="christianity-leader christianity-leader--target" (click)="attackLeader()">
68399
- <span>{{ player().leaderName }}</span>
68400
- <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
68401
- </button>
68402
- <button type="button" class="christianity-end-turn" (click)="endTurn()">
68403
- {{ t('christianityEndTurn') }}
68404
- </button>
68405
- </div>
68534
+ <button type="button" class="christianity-leader-card" (click)="inspectLeader('P1')">
68535
+ <span>{{ player().leaderName }}</span>
68536
+ <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
68537
+ </button>
68538
+ <button type="button" class="christianity-end-turn" (click)="endTurn()">
68539
+ {{ t('christianityEndTurn') }}
68540
+ </button>
68406
68541
  </section>
68407
68542
  </section>
68408
68543
 
68409
- <section class="christianity-hand" [attr.aria-label]="t('christianityYourHand')">
68544
+ <section class="christianity-hand-fan" [attr.aria-label]="t('christianityYourHand')">
68410
68545
  @for (cardId of player().hand ?? []; track cardId + $index) {
68411
68546
  @let card = cardDefinition(cardId);
68412
68547
  <button
68413
68548
  type="button"
68414
- class="christianity-card christianity-card--hand"
68549
+ class="christianity-card-preview-card christianity-card-preview-card--hand"
68415
68550
  [class.is-selected]="selectedHandCard() === cardId"
68416
68551
  [class.is-disabled]="!canPlay(card)"
68552
+ [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
68417
68553
  (click)="selectHandCard(cardId)"
68418
68554
  >
68419
68555
  <small>
@@ -68435,6 +68571,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68435
68571
  }
68436
68572
  </section>
68437
68573
 
68574
+ @if (selectedPreview()) {
68575
+ <aside class="christianity-floating-card" aria-live="polite">
68576
+ <small>{{ selectedPreview()?.eyebrow }}</small>
68577
+ <strong>{{ selectedPreview()?.title }}</strong>
68578
+ <span>{{ selectedPreview()?.meta }}</span>
68579
+ <p>{{ selectedPreview()?.body }}</p>
68580
+ </aside>
68581
+ }
68582
+
68438
68583
  <section class="christianity-actions" aria-live="polite">
68439
68584
  <p>{{ statusText() }}</p>
68440
68585
  <div>
@@ -68458,7 +68603,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68458
68603
  </section>
68459
68604
  }
68460
68605
  </main>
68461
- `, 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-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-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-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.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}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-battle-zone{grid-template-columns:repeat(5,minmax(3.8rem,1fr));overflow-x:auto}}\n"] }]
68606
+ `, 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-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-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-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.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-fan--opponent{min-height:4.7rem;margin-bottom:-1.1rem}.christianity-card-preview-card,.christianity-card-mini,.christianity-leader-card,.christianity-zone-card,.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{min-height:4.8rem;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-leader-card span,.christianity-zone-card span{font-weight:700}.christianity-card-preview-card strong,.christianity-card-mini strong,.christianity-leader-card strong,.christianity-zone-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{display:grid;grid-template-columns:minmax(4.2rem,1fr) minmax(5rem,6.5rem) minmax(4.2rem,1fr);gap:.55rem;align-items:end;justify-items:center}.christianity-player-rack--opponent{align-items:start}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-end;width:100%}.christianity-card-mini,.christianity-leader-card,.christianity-zone-card{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-mini{width:3.5rem}.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-floating-card{position:fixed;right:max(.75rem,env(safe-area-inset-right));bottom:max(5.8rem,env(safe-area-inset-bottom));z-index:10;display:grid;gap:.28rem;width:min(14rem,calc(100vw - 1.5rem));min-height:10rem;padding:.8rem;border:1px solid rgba(36,48,68,.18);border-radius:.6rem;background:#fffffff5;box-shadow:0 1.25rem 2.5rem #102a432e}.christianity-floating-card small,.christianity-floating-card span{color:#1f2933a3}.christianity-floating-card strong{font-size:1.05rem}.christianity-floating-card p{margin:0;font-size:.86rem;line-height:1.35}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-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-player-rack{grid-template-columns:minmax(3.6rem,1fr) minmax(4.8rem,5.6rem) minmax(3.6rem,1fr)}.christianity-shared-zone{grid-template-columns:repeat(3,minmax(3.7rem,1fr))}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);min-height:clamp(5.8rem,26vw,7.4rem)}.christianity-floating-card{right:.5rem;bottom:4.8rem}}\n"] }]
68462
68607
  }], ctorParameters: () => [] });
68463
68608
 
68464
68609
  addIcons({ refreshOutline, sparklesOutline, trophyOutline });