@if (isLoading()) {
Caricamento degli spettacoli in corso...
} @else if (errorMessage()) {
error
Non siamo riusciti a caricare gli spettacoli
{{ errorMessage() }}
} @else if (shows().length === 0) {
theaters
Nessuno spettacolo pubblicato per ora
Le produzioni disponibili compariranno qui non appena saranno online.
} @else {
@for (show of shows(); track show.slug) {
@if (show.image_url) {
}
Spettacolo in evidenza
{{ show.title }}
{{ show.summary }}
Apri scheda
}
}
`,
styles: [`
.page-header {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(260px, 410px);
gap: 24px;
align-items: end;
margin-bottom: 28px;
}
.supporting {
margin: 0;
max-width: 34ch;
}
.show-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 22px;
}
.status-panel,
.status-copy {
display: flex;
align-items: center;
gap: 16px;
}
.status-panel {
min-height: 220px;
justify-content: center;
color: var(--azionelab-muted);
}
.status-card {
max-width: 680px;
border-radius: var(--azionelab-radius-md);
border: 1px solid var(--azionelab-border);
background: var(--azionelab-surface-strong);
box-shadow: var(--azionelab-shadow);
}
.status-copy {
align-items: flex-start;
}
.status-copy h2 {
margin: 0 0 8px;
font-size: 1.2rem;
}
.status-copy p {
margin: 0;
color: var(--azionelab-muted);
line-height: 1.6;
}
.show-card {
display: flex;
flex-direction: column;
min-height: 360px;
overflow: hidden;
border-radius: var(--azionelab-radius-md);
border: 1px solid var(--azionelab-border);
background: linear-gradient(180deg, rgba(255, 253, 249, 0.98), rgba(250, 243, 233, 0.94));
box-shadow: var(--azionelab-shadow);
}
.show-image-wrap {
aspect-ratio: 15 / 10;
overflow: hidden;
border-bottom: 1px solid var(--azionelab-border);
background:
linear-gradient(135deg, rgba(207, 71, 51, 0.14), rgba(15, 22, 36, 0.06)),
#f8f1ea;
}
.show-image {
width: 100%;
height: 100%;
display: block;
object-fit: cover;
transition: transform 180ms ease;
}
.show-card:hover .show-image {
transform: scale(1.03);
}
.card-topline {
padding: 18px 18px 0;
}
.card-label {
display: inline-flex;
align-items: center;
min-height: 28px;
padding: 0 12px;
border-radius: 999px;
background: rgba(143, 51, 45, 0.08);
color: var(--azionelab-accent-strong);
font-size: 0.78rem;
font-weight: 700;
}
.show-card mat-card-content {
flex: 1;
}
.show-card mat-card-title,
.show-card mat-card-content,
.show-card mat-card-actions {
padding-left: 18px;
padding-right: 18px;
}
.show-card mat-card-title {
margin-top: 10px;
font-family: var(--azionelab-serif);
font-size: 1.45rem;
font-weight: 700;
line-height: 1.12;
}
.show-card p {
color: var(--azionelab-muted);
line-height: 1.6;
margin: 0;
}
@media (max-width: 860px) {
.page-header {
grid-template-columns: 1fr;
}
}
`],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ShowListPageComponent {
private readonly destroyRef = inject(DestroyRef);
private readonly showsApi = inject(ShowsApiService);
protected readonly shows = signal