From 9e6bcc22b64e3779db279bc16e788285035c728c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Mon, 1 Jun 2026 08:38:21 +0300 Subject: [PATCH] feat: replace CD mockup with animated vinyl player component in music productions list and detail views --- .../front/music-productions/index.blade.php | 281 ++++++++- .../front/music-productions/show.blade.php | 586 +++++++++++++----- 2 files changed, 701 insertions(+), 166 deletions(-) diff --git a/resources/views/front/music-productions/index.blade.php b/resources/views/front/music-productions/index.blade.php index dc3bd6a..93a97f5 100644 --- a/resources/views/front/music-productions/index.blade.php +++ b/resources/views/front/music-productions/index.blade.php @@ -107,35 +107,36 @@ $detailUrl = route('music-productions.show', $production->slug); @endphp
-
-
'> - - @if($production->cover_image_url) - {{ $production->translate('title') }} - @else - {{ $production->translate('title') }} - @endif - -
-
-
-
+
+
+
+
{{ $production->translate('client_name') ?: __('music_productions.card_category_default') }}
+
@if($production->production_date) - {{ $production->production_date->format('d.m.Y') }} + {{ $production->production_date->format('Y') }} @else - {{ __('music_productions.production_date_unknown') }} +   @endif
- -

{{ $production->translate('title') }}

+
{{ $production->translate('title') }}
+ + + @if($production->cover_image_url) +
+ @else +
+ @endif +
+
+
+
+
+
+
-
-
-
- @endforeach
@@ -308,5 +309,243 @@ opacity: 0.5; cursor: not-allowed; } + +/* --- Vinyl Player Styles --- */ +:root { + --color-black: #000; + --color-gray: #5e6062; + --color-white: #fff; + --color-yellow: #f0f39c; + --color-yellow-light: #fff99e; + --transition-time: 250ms; + --transition-method: ease-in-out; + --album-size: 260px; + --vinyl-offset: 15px; + --vinyl-size: calc(var(--album-size) - var(--vinyl-offset)); + --vinyl-center-size: 110px; +} + +.player-container { + display: flex; + justify-content: center; + align-items: center; + padding: 15px 0; + perspective: 1000px; +} + +.player { + color: var(--color-gray); + font-family: 'Raleway', 'Outfit', sans-serif; + height: var(--album-size); + line-height: 1.2; + position: relative; + width: var(--album-size); + transition: all var(--transition-time) var(--transition-method); + margin: 0 auto; +} + +.player::after { + transform: rotate(-2deg); + transition: all var(--transition-time) var(--transition-method); + background: #777; + bottom: 12px; + box-shadow: 0 15px 23px rgba(0, 0, 0, 0.3); + content: ''; + height: 10px; + left: 2%; + opacity: 0; + padding-left: 5%; + position: absolute; + width: 96%; + z-index: 5; +} + +.player:hover::after { + opacity: 0.6; +} + +.player .player__content { + background-color: var(--color-white); + height: 100%; + padding: 50px 15px 0 15px; + position: relative; + text-align: left; + width: 100%; + z-index: 10; + border-radius: 8px; + box-shadow: 0 10px 30px rgba(0,0,0,0.05); + display: flex; + flex-direction: column; + justify-content: flex-start; + border: 1px solid rgba(8, 60, 130, 0.05); +} + +.player .player__artist { + font-size: 16px; + font-weight: 600; + margin-bottom: 3px; + max-width: 140px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #343f52; +} + +.player .player__album { + font-size: 13px; + font-weight: 300; + margin-bottom: 15px; + max-width: 140px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #a4aec6; +} + +.player .player__track { + font-size: 12px; + font-weight: 400; + margin-bottom: 15px; + max-width: 140px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #60697b; +} + +.player .player__track::before, +.player .player__track::after { + content: '"'; + font-size: 14px; + vertical-align: middle; +} + +.album { + transform: translateY(-50%); + transition: all var(--transition-time) var(--transition-method); + box-shadow: 0px 8px 20px rgba(0, 0, 0, 0.15); + cursor: pointer; + height: var(--album-size); + position: absolute; + right: 0; + top: 50%; + width: var(--album-size); + z-index: 100; + border-radius: 8px; +} + +.player:hover { + transform: scale(1.08) translateY(-5px); + z-index: 999; +} + +.player:hover .player__content { + box-shadow: 0 15px 35px rgba(0,0,0,0.1); +} + +.player:hover .album { + right: -140px; +} + +.album__cover { + background-color: var(--color-black); + background-size: cover; + background-position: center; + height: 100%; + position: relative; + width: 100%; + z-index: 20; + border-radius: 8px; + box-shadow: 0 5px 15px rgba(0,0,0,0.1); +} + +.vinyl { + transition: all var(--transition-time) var(--transition-method); + left: calc(var(--vinyl-offset) / 2); + position: absolute; + top: calc(var(--vinyl-offset) / 2); + height: var(--vinyl-size); + width: var(--vinyl-size); + z-index: 10; +} + +.vinyl__shadow, +.vinyl__circle { + border-radius: 100%; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} + +.vinyl__shadow { + box-shadow: 2px 8px 15px rgba(0, 0, 0, 0.2); + z-index: 5; +} + +.vinyl__circle { + animation: rotate-vinyl 3s linear infinite both paused; + background-color: #1e1b1b; + background-image: radial-gradient(circle, #2c2727 10%, transparent 10%), + repeating-radial-gradient(circle, #2c2727, #1e1b1b 2px, #2c2727 4px); + z-index: 10; +} + +.player:hover .vinyl { + left: 45%; +} + +.player:hover .vinyl__circle { + animation-play-state: running; +} + +.vinyl__center { + transform: translate(-50%, -50%); + background-color: #292424; + border-radius: 100%; + height: var(--vinyl-center-size); + left: 50%; + position: absolute; + top: 50%; + width: var(--vinyl-center-size); +} + +.vinyl__center::before, +.vinyl__center::after { + transform: translate(-50%, -50%); + border-radius: 100%; + content: ''; + left: 50%; + position: absolute; + top: 50%; +} + +.vinyl__center::before { + background-color: #e31e24; + background-image: var(--center-bg); + background-size: cover; + background-position: center; + height: calc(var(--vinyl-center-size) - 20px); + width: calc(var(--vinyl-center-size) - 20px); + z-index: 5; +} + +.vinyl__center::after { + background-color: #fff; + height: 20px; + width: 20px; + z-index: 10; + box-shadow: inset 0 0 5px rgba(0,0,0,0.2); +} + +@keyframes rotate-vinyl { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} @endpush diff --git a/resources/views/front/music-productions/show.blade.php b/resources/views/front/music-productions/show.blade.php index eb49c53..33263bc 100644 --- a/resources/views/front/music-productions/show.blade.php +++ b/resources/views/front/music-productions/show.blade.php @@ -40,28 +40,51 @@ } @endphp - {{-- CD Jewel Case 3D Mockup --}} + {{-- Vinyl Player Mockup --}} @if($production->cover_image_url) -
-
-
- {{-- Left Spine (Plastic Hinge) --}} -
- {{-- Cover Graphic --}} -
- {{-- Glass shine reflection --}} -
- {{-- Play Button Overlay --}} - @if($videoId) -
-
- +
+
+
+
{{ $production->translate('client_name') ?: __('music_productions.card_category_default') }}
+
+ @if($production->production_date) + {{ $production->production_date->format('Y') }} + @else +   + @endif +
+
{{ $production->translate('title') }}
+ +
+
+
+
+
+
+
- @endif + +
+ @if($prev) + + @else +
+ @endif + +
+
+
+
+ + @if($next) + + @else +
+ @endif +
-
@endif @@ -188,151 +211,413 @@ @push('styles') @@ -385,6 +668,7 @@ body.lightbox-open .cd-case {