@use '../../styles/variables' as *; @use '../../styles/mixins' as *; .schedule { padding: $spacing-3xl 0; background: var(--color-white); } .schedule-header { text-align: center; margin-bottom: $spacing-2xl; .schedule-flower { width: 50px; height: 50px; margin: 0 auto $spacing-md; opacity: 0.5; } } .schedule-loading, .schedule-empty { text-align: center; padding: $spacing-3xl $spacing-md; color: var(--color-medium); font-size: 1.1rem; } // ── Show list (vertical stack) ───────────────────────────── .show-list { display: flex; flex-direction: column; gap: $spacing-lg; } // ── Horizontal show card ─────────────────────────────────── .show-card { display: flex; flex-direction: row; align-items: stretch; border-radius: $radius-lg; overflow: hidden; box-shadow: $shadow-md; transition: transform $transition-normal, box-shadow $transition-normal, border-color $transition-normal; min-height: 180px; cursor: pointer; border-left: 4px solid transparent; &:hover { transform: translateY(-2px); box-shadow: $shadow-lg; } &.expanded { border-left-color: var(--color-accent); box-shadow: 0 8px 30px rgba(232, 122, 46, 0.2), 0 4px 12px rgba(0, 0, 0, 0.15); transform: translateY(-3px); } } // ── Left: Show art badge (square) ────────────────────────── .show-card-art { flex-shrink: 0; width: 256px; height: 256px; display: flex; align-items: center; justify-content: center; background: var(--color-primary-dark); padding: $spacing-md; .show-art-img { width: 100%; height: 100%; object-fit: cover; border-radius: $radius-md; display: block; } .show-art-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: rgba(255, 255, 255, 0.12); border-radius: $radius-md; font-size: 3rem; color: var(--color-accent); } } // ── Right: Hero-backed info panel ────────────────────────── .show-card-right { flex: 1; min-width: 0; position: relative; display: flex; flex-direction: column; justify-content: center; background-color: var(--color-light); &.has-hero { background-size: cover; background-position: center; } } .show-card-overlay { position: absolute; inset: 0; background: linear-gradient( to right, rgba(26, 36, 50, 0.95) 0%, rgba(26, 36, 50, 0.85) 60%, rgba(26, 36, 50, 0.7) 100% ); z-index: 1; } .show-card-info { position: relative; z-index: 2; padding: $spacing-lg $spacing-xl; min-width: 0; } // ── Show title ───────────────────────────────────────────── .show-title { font-family: var(--font-heading); font-size: 1.4rem; color: var(--color-white); margin: 0 0 $spacing-sm; line-height: 1.25; } // ── Chevron indicator ────────────────────────────────────── .show-card-chevron { position: absolute; top: $spacing-lg; right: $spacing-xl; z-index: 3; font-size: 0.7rem; color: rgba(255, 255, 255, 0.45); transition: transform $transition-normal, color $transition-normal; pointer-events: none; } .show-card.expanded .show-card-chevron { transform: rotate(90deg); color: var(--color-accent); } // ── Show description (line-clamped) ──────────────────────── .show-description { font-size: 0.95rem; color: rgba(255, 255, 255, 0.82); margin: 0 0 $spacing-md; line-height: 1.5; // WebKit line-clamp (Chrome, Safari) display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; transition: max-height $transition-slow ease, opacity $transition-normal; &.expanded { -webkit-line-clamp: unset; overflow: visible; } } // Standard line-clamp (Firefox 122+) — overrides WebKit for supporting browsers @supports (line-clamp: 3) { .show-description { display: block; -webkit-line-clamp: unset; -webkit-box-orient: unset; line-clamp: 3; &.expanded { line-clamp: unset; } } } // ── Meta row (host + genre) ──────────────────────────────── .show-meta { display: flex; flex-wrap: wrap; gap: $spacing-md; font-size: 0.85rem; margin-bottom: $spacing-md; .show-host { color: var(--color-accent); display: flex; align-items: center; gap: 4px; font-weight: 500; } .show-genre { background: rgba(255, 255, 255, 0.15); padding: 3px 12px; border-radius: 10px; color: rgba(255, 255, 255, 0.88); font-style: italic; } } // ── Schedule slot tags ───────────────────────────────────── .show-schedule-slots { display: flex; flex-wrap: wrap; gap: 8px; } .slot-tag { display: inline-block; background: rgba(255, 255, 255, 0.16); color: var(--color-white); font-size: 0.78rem; font-family: var(--font-mono); padding: 4px 12px; border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.12); white-space: nowrap; letter-spacing: 0.02em; } // ── Responsive ───────────────────────────────────────────── @include responsive(md) { .show-card-art { padding: $spacing-sm; } .show-card-info { padding: $spacing-md $spacing-lg; } .show-title { font-size: 1.2rem; } .show-description { -webkit-line-clamp: 2; line-clamp: 2; font-size: 0.88rem; } } @include responsive(sm) { .show-card { flex-direction: column; min-height: auto; } .show-card-art { width: 100%; aspect-ratio: 16 / 9; padding: $spacing-md; } .show-card-info { padding: $spacing-md $spacing-lg $spacing-lg; } .show-description { -webkit-line-clamp: 2; line-clamp: 2; } }