Merge pull request 'shelby' (#18) from shelby into feature/all

Reviewed-on: #18
This commit is contained in:
ExostFlash 2025-06-03 12:30:07 +00:00
commit e94e98753a
3 changed files with 737 additions and 531 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,137 +1,221 @@
<div class="match-card" *ngIf="latestMatch"> <div class="match-card" *ngIf="latestMatch">
<div class="match-background"> <div class="match-background">
<img src="./assets/duel.webp" alt="Escrime" class="background-image" /> <img src="./assets/duel.webp" alt="Escrime" class="background-image" />
<div class="image-overlay"></div> <div class="image-overlay"></div>
</div>
<div class="match-header">
<div class="match-weapon">
<i class="sword-icon">⚔️</i>
<span class="weapon-type">{{ latestMatch.weapon }}</span>
</div>
<div
class="match-status"
[ngClass]="'status-' + getMatchStateColor(latestMatch.state)"
>
<span class="status-dot"></span>
{{ getMatchStateLabel(latestMatch.state) }}
</div>
</div>
<div class="match-versus">
<div class="fencer fencer-left">
<div class="fencer-name">
{{ player1?.name }} {{ player1?.firstName }}
</div>
<div class="fencer-club">{{ player1?.club }}</div>
<div class="score">{{ latestMatch.score1 }}</div>
</div> </div>
<div class="vs-divider"> <div class="match-header">
<span class="vs-text">VS</span> <div class="match-weapon">
<div class="crossed-swords">⚔️</div> <i class="sword-icon">⚔️</i>
<span class="weapon-type">{{ latestMatch.weapon }}</span>
</div>
<div class="match-status" [ngClass]="'status-' + getMatchStateColor(latestMatch.state)">
<span class="status-dot"></span>
{{ getMatchStateLabel(latestMatch.state) }}
</div>
</div> </div>
<div class="fencer fencer-right"> <div class="match-versus">
<div class="fencer-name"> <div class="fencer fencer-left">
{{ player2?.name }} {{ player2?.firstName }} <div class="fencer-name">
</div> {{ player1?.name }} {{ player1?.firstName }}
<div class="fencer-club">{{ player2?.club }}</div> </div>
<div class="score">{{ latestMatch.score2 }}</div> <div class="fencer-club">{{ player1?.club }}</div>
</div> <div class="score">{{ latestMatch.score1 }}</div>
</div> </div>
<div class="combat-arena"> <div class="vs-divider">
<div class="arena-header"> <span class="vs-text">VS</span>
<span class="arena-title">ARENA COMBAT</span> <div class="crossed-swords">⚔️</div>
<div class="arena-pulse"></div> </div>
<div class="fencer fencer-right">
<div class="fencer-name">
{{ player2?.name }} {{ player2?.firstName }}
</div>
<div class="fencer-club">{{ player2?.club }}</div>
<div class="score">{{ latestMatch.score2 }}</div>
</div>
</div> </div>
<div class="combat-grid"> <div class="combat-arena">
<div class="combat-stat venue"> <div class="arena-header">
<div class="stat-icon"> <span class="arena-title">ARENA COMBAT</span>
<div class="location-radar"></div> <div class="arena-pulse"></div>
<span>🏛️</span>
</div> </div>
<div class="stat-content">
<span class="stat-label">BATTLEFIELD</span>
<span class="stat-value">{{ latestMatch.city }}</span>
<span class="stat-sub">{{ latestMatch.country }}</span>
</div>
<div class="stat-glow venue-glow"></div>
</div>
<div class="combat-stat referee"> <div class="combat-grid">
<div class="stat-icon"> <div class="combat-stat venue">
<div class="referee-badge"></div> <div class="stat-icon">
<span>⚖️</span> <div class="location-radar"></div>
</div> <span>🏛️</span>
<div class="stat-content"> </div>
<span class="stat-label">COMBAT JUDGE</span> <div class="stat-content">
<span class="stat-value" <span class="stat-label">BATTLEFIELD</span>
>{{ referee?.name }} {{ referee?.firstName }}</span <span class="stat-value">{{ latestMatch.city }}</span>
> <span class="stat-sub">{{ latestMatch.country }}</span>
<span class="stat-sub">OFFICIAL REFEREE</span> </div>
</div> <div class="stat-glow venue-glow"></div>
<div class="stat-glow referee-glow"></div> </div>
</div>
<div <div class="combat-stat referee">
class="combat-stat timing" <div class="stat-icon">
*ngIf="latestMatch?.state === MatchState.NOT_STARTED" <div class="referee-badge"></div>
> <span>⚖️</span>
<div class="stat-icon"> </div>
<div class="time-ring"></div> <div class="stat-content">
<span></span> <span class="stat-label">COMBAT JUDGE</span>
<span class="stat-value">{{ referee?.name }} {{ referee?.firstName }}</span>
<span class="stat-sub">OFFICIAL REFEREE</span>
</div>
<div class="stat-glow referee-glow"></div>
</div>
<div class="combat-stat timing" *ngIf="latestMatch?.state === MatchState.NOT_STARTED">
<div class="stat-icon">
<div class="time-ring"></div>
<span></span>
</div>
<div class="stat-content">
<span class="stat-label">COMBAT START</span>
<span class="stat-value">{{ getTimeUntilMatch() }}</span>
<span class="stat-sub">LIVE BATTLE</span>
</div>
<div class="stat-glow timing-glow"></div>
</div>
<div class="combat-stat funfact" *ngIf="latestMatch?.state !== MatchState.NOT_STARTED">
<div class="stat-icon">
<span>🎯</span>
</div>
<div class="stat-content">
<span class="stat-label">FUN FACT</span>
<span class="stat-value">
Saviez-vous que l'escrime est l'un des sports les plus anciens aux
Jeux Olympiques ?
</span>
<span class="stat-sub">Inspiration et tradition au rendez-vous</span>
</div>
</div>
</div> </div>
<div class="stat-content">
<span class="stat-label">COMBAT START</span>
<span class="stat-value">{{ getTimeUntilMatch() }}</span>
<span class="stat-sub">LIVE BATTLE</span>
</div>
<div class="stat-glow timing-glow"></div>
</div>
<div
class="combat-stat funfact"
*ngIf="latestMatch?.state !== MatchState.NOT_STARTED"
>
<div class="stat-icon">
<span>🎯</span>
</div>
<div class="stat-content">
<span class="stat-label">FUN FACT</span>
<span class="stat-value">
Saviez-vous que l'escrime est l'un des sports les plus anciens aux
Jeux Olympiques ?
</span>
<span class="stat-sub">Inspiration et tradition au rendez-vous</span>
</div>
</div>
</div> </div>
</div>
</div>
<div class="weapons-container">
<div class="weapon-card" style="background-image: url('./assets/epee_escrime.jpg');">
<h2>Épée</h2>
<p>Tout le corps est cible valable. Pas de priorité.</p>
</div>
<div class="weapon-card" style="background-image: url('./assets/fleuret_escrime.jpg');">
<h2>Fleuret</h2>
<p>Cible : torse. La priorité s'applique.</p>
</div>
<div class="weapon-card" style="background-image: url('./assets/sabre_escrime.jpg');">
<h2>Sabre</h2>
<p>Cible : haut du corps. Priorité en cas de touche simultanée.</p>
</div>
<div class="weapon-card" style="background-image: url('./assets/sabre_laser_escrime.jpg');">
<h2>Sabre Laser</h2>
<p>Arme moderne descrime sportive, inspirée de la science-fiction. Lame lumineuse, règles proches du sabre classique. Discipline visuelle et dynamique.</p>
</div> </div>
</div> <section class="weapons-section">
<div class="section-header">
<h2 class="section-title">Les Armes</h2>
</div>
<div class="weapons-container">
<div class="weapon-card" style="background-image: url('./assets/epee_escrime.jpg');">
<h2>Épée</h2>
<p>Tout le corps est cible valable. Pas de priorité.</p>
</div>
<div class="weapon-card" style="background-image: url('./assets/fleuret_escrime.jpg');">
<h2>Fleuret</h2>
<p>Cible : torse. La priorité s'applique.</p>
</div>
<div class="weapon-card" style="background-image: url('./assets/sabre_escrime.jpg');">
<h2>Sabre</h2>
<p>Cible : haut du corps. Priorité en cas de touche simultanée.</p>
</div>
<div class="weapon-card" style="background-image: url('./assets/sabre_laser_escrime.jpg');">
<h2>Sabre Laser</h2>
<p>Arme moderne descrime sportive, inspirée de la science-fiction. Lame lumineuse, règles proches du sabre
classique. Discipline visuelle et dynamique.</p>
</div>
</div>
</section>
<section class="diplomes-section">
<div class="section-header">
<h2 class="section-title">Les diplômes d'arbitrage</h2>
</div>
<div class="diplomes-container">
<div class="diplomes-card" style="background-image: url('./assets/epee_escrime.jpg');">
<h2>départemental</h2>
<p>Ce diplôme est décemé par la CAI ou la CRA dont
dépend l'arbitre :</p>
<ul>
<li>
Âge minimum : 14 ans.
</li>
<li>
Ouvre droit à arbitrer toutes les compétitions
organisées dans le cadre du comité interdépartemental
et/ou du comité régional dont dépend l'arbitre (sous
réserve de l'avis de la CRA dont dépend l'arbitre).
</li>
<li>
Titulaire d'un carton BLANC qui permet d'arrêter un
match à n'importe quel moment pour demander une
assistance du DT et/ou de l'organisateur de la
compétition. Le rôle pédagogique du DT et/ou de
l'organisateur est primordial dans l'accompagnement
des jeunes arbitres.
</li>
</ul>
</div>
<div class="diplomes-card" style="background-image: url('./assets/fleuret_escrime.jpg');">
<h2>régional</h2>
<p>Ce diplôme est décerné par la CRA dont dépend
l'arbitre :</p>
<ul>
<li>
Âge minimum : 16 ans
</li>
<li>
Il ouvre droit à arbitrer toutes les compétitions
organisées dans le cadre du Comité régional,
</li>
<li>
Les circuits nationaux,
</li>
<li>
La Fête des Jeunes,
</li>
<li>
Des dérogations ponctuelles peuvent faire l'objet d'une
circulaire.
</li>
</ul>
</div>
<div class="diplomes-card" style="background-image: url('./assets/sabre_escrime.jpg');">
<h2>national</h2>
<p>Ce diplôme est décerné par la CNA (Commission
Nationale Arbitrage) :</p>
<ul>
<li>• Âge minimum : 18 ans</li>
<li>Il ouvre droit à arbitrer toutes les compétitions
organisées dans le cadre du Comité régional,</li>
<li>Les circuits nationaux,</li>
<li>La Fête des Jeunes, les championnats de France M17,
M20, Séniors et Vétérans sur convocation de la CNN</li>
<li>Les circuits européens M17 et U23 organisés sur le
territoire français et à l'étranger.</li>
</ul>
</div>
<div class="diplomes-card" style="background-image: url('./assets/sabre_laser_escrime.jpg');">
<h2>international</h2>
<p>Ce diplôme est décerné par la Fédération
Internationale d'Escrime (FIE).</p>
<ul>
<li>Âge minimum : 20 ans</li>
<li>Il ouvre droit à arbitrer toutes les compétitions. Les
arbitres qui figurent sur la liste restreinte de la FIE
doivent arbitrer des compétitions nationales séniors et
être la référence de notre corps arbitral.</li>
</ul>
</div>
</div>
</section>
<app-sponsort></app-sponsort> <app-sponsort></app-sponsort>

View file

@ -2,3 +2,14 @@
.bg-primary-custom { .bg-primary-custom {
background-color: #414141; background-color: #414141;
} }
/* Colors */
:root {
--primary-color: rgba(212, 175, 55, 0.6);
--gradient-color: linear-gradient(90deg, #d4af37, var(--primary-color));
--card-gradient: linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.1) 50%, transparent 70%),
linear-gradient(135deg,
rgba(64, 64, 64, 0.95) 0%,
rgba(32, 32, 32, 0.98) 50%,
rgba(16, 16, 16, 0.95) 100%);
}