Main/resources/[tools]/nordi_dj/html/style.css
2025-08-03 19:32:07 +02:00

1708 lines
39 KiB
CSS

/* DJ System Professional Styling */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Rajdhani', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a2e 50%, #16213e 100%);
color: #ffffff;
overflow: hidden;
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
.hidden {
display: none !important;
}
/* DJ Interface Container */
#dj-interface {
width: 800px; /* Standard-Breite */
height: 600px; /* Standard-Höhe */
position: absolute;
top: 100%; /* Statt 50% - weiter unten */
left: 100%; /* Statt 50% - weiter rechts */
transform: translate(-50%, -50%);
display: flex;
flex-direction: column;
background: linear-gradient(135deg, #0f0f23 0%, #1a1a2e 100%);
border-radius: 20px;
overflow: hidden;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
transition: opacity 0.3s ease;
min-width: 800px;
min-height: 600px;
max-width: 100vw;
max-height: 100vh;
}
/* Header */
.dj-header {
height: 60px;
background: linear-gradient(90deg, #ff6b6b, #4ecdc4, #45b7d1, #96ceb4, #feca57);
background: -webkit-linear-gradient(90deg, #ff6b6b, #4ecdc4, #45b7d1, #96ceb4, #feca57);
background: -moz-linear-gradient(90deg, #ff6b6b, #4ecdc4, #45b7d1, #96ceb4, #feca57);
background-size: 300% 300%;
animation: gradientShift 3s ease infinite;
-webkit-animation: gradientShift 3s ease infinite;
-moz-animation: gradientShift 3s ease infinite;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
cursor: move;
user-select: none;
}
@keyframes gradientShift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
@-webkit-keyframes gradientShift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
@-moz-keyframes gradientShift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.logo {
display: flex;
align-items: center;
gap: 10px;
font-family: 'Orbitron', 'Arial Black', Gadget, sans-serif;
font-weight: 900;
font-size: 24px;
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
}
.status-bar {
display: flex;
gap: 20px;
}
.status-item {
display: flex;
align-items: center;
gap: 5px;
font-weight: 600;
}
.close-btn {
width: 40px;
height: 40px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.2);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
}
.close-btn:hover {
background: rgba(255, 0, 0, 0.7);
transform: scale(1.1);
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
}
/* Main DJ Console */
.dj-console {
flex: 1;
display: flex;
padding: 20px;
gap: 20px;
min-height: 0;
overflow: auto;
}
/* Decks */
.deck {
flex: 1;
background: linear-gradient(145deg, #1e1e2e, #2a2a3e);
background: -webkit-linear-gradient(145deg, #1e1e2e, #2a2a3e);
background: -moz-linear-gradient(145deg, #1e1e2e, #2a2a3e);
border-radius: 20px;
padding: 20px;
box-shadow:
inset 5px 5px 15px rgba(0, 0, 0, 0.5),
inset -5px -5px 15px rgba(255, 255, 255, 0.1),
0 10px 30px rgba(0, 0, 0, 0.3);
border: 2px solid rgba(255, 255, 255, 0.1);
display: flex;
flex-direction: column;
}
.deck-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 2px solid rgba(255, 255, 255, 0.1);
}
.deck-header h3 {
font-family: 'Orbitron', 'Arial Black', Gadget, sans-serif;
font-size: 18px;
color: #4ecdc4;
text-shadow: 0 0 10px rgba(78, 205, 196, 0.5);
}
.deck-controls {
display: flex;
gap: 10px;
}
.btn-deck {
width: 40px;
height: 40px;
border: none;
border-radius: 10px;
background: linear-gradient(145deg, #3a3a4e, #2a2a3e);
background: -webkit-linear-gradient(145deg, #3a3a4e, #2a2a3e);
background: -moz-linear-gradient(145deg, #3a3a4e, #2a2a3e);
color: #ffffff;
cursor: pointer;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
box-shadow:
5px 5px 10px rgba(0, 0, 0, 0.3),
-5px -5px 10px rgba(255, 255, 255, 0.1);
}
.btn-deck:hover {
transform: translateY(-2px);
-webkit-transform: translateY(-2px);
-moz-transform: translateY(-2px);
box-shadow:
7px 7px 15px rgba(0, 0, 0, 0.4),
-7px -7px 15px rgba(255, 255, 255, 0.15);
}
.btn-deck:active {
transform: translateY(0);
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
box-shadow:
inset 3px 3px 8px rgba(0, 0, 0, 0.3),
inset -3px -3px 8px rgba(255, 255, 255, 0.1);
}
/* Vinyl Plattenspieler */
.turntable {
margin-bottom: 20px;
flex-shrink: 0;
}
.vinyl-container {
position: relative;
width: 200px;
height: 200px;
margin: 0 auto 20px;
}
.vinyl {
width: 200px;
height: 200px;
border-radius: 50%;
background: radial-gradient(circle, #1a1a1a 30%, #000000 70%);
background: -webkit-radial-gradient(circle, #1a1a1a 30%, #000000 70%);
background: -moz-radial-gradient(circle, #1a1a1a 30%, #000000 70%);
position: relative;
transition: transform 0.1s ease;
-webkit-transition: -webkit-transform 0.1s ease;
-moz-transition: -moz-transform 0.1s ease;
box-shadow:
0 0 30px rgba(0, 0, 0, 0.8),
inset 0 0 20px rgba(255, 255, 255, 0.1);
}
.vinyl.spinning {
animation: spin 2s linear infinite;
-webkit-animation: spin 2s linear infinite;
-moz-animation: spin 2s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@-webkit-keyframes spin {
from { -webkit-transform: rotate(0deg); }
to { -webkit-transform: rotate(360deg); }
}
@-moz-keyframes spin {
from { -moz-transform: rotate(0deg); }
to { -moz-transform: rotate(360deg); }
}
.vinyl-center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
width: 80px;
height: 80px;
border-radius: 50%;
background: linear-gradient(145deg, #ff6b6b, #4ecdc4);
background: -webkit-linear-gradient(145deg, #ff6b6b, #4ecdc4);
background: -moz-linear-gradient(145deg, #ff6b6b, #4ecdc4);
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 0 20px rgba(255, 107, 107, 0.5);
}
.vinyl-hole {
width: 20px;
height: 20px;
border-radius: 50%;
background: #000000;
position: absolute;
}
.vinyl-label {
position: absolute;
width: 70px;
height: 70px;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
font-size: 10px;
font-weight: 600;
color: #ffffff;
text-shadow: 0 0 5px rgba(0, 0, 0, 0.8);
}
.vinyl-grooves {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 50%;
}
.groove {
position: absolute;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 50%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
}
.groove:nth-child(1) { width: 90%; height: 90%; }
.groove:nth-child(2) { width: 75%; height: 75%; }
.groove:nth-child(3) { width: 60%; height: 60%; }
.groove:nth-child(4) { width: 45%; height: 45%; }
.groove:nth-child(5) { width: 30%; height: 30%; }
/* Tonearm */
.tonearm {
position: absolute;
top: 20px;
right: 20px;
width: 80px;
height: 80px;
}
.tonearm-base {
width: 20px;
height: 20px;
border-radius: 50%;
background: linear-gradient(145deg, #c0c0c0, #808080);
background: -webkit-linear-gradient(145deg, #c0c0c0, #808080);
background: -moz-linear-gradient(145deg, #c0c0c0, #808080);
position: absolute;
top: 0;
right: 0;
}
.tonearm-arm {
width: 60px;
height: 3px;
background: linear-gradient(90deg, #c0c0c0, #808080);
background: -webkit-linear-gradient(90deg, #c0c0c0, #808080);
background: -moz-linear-gradient(90deg, #c0c0c0, #808080);
position: absolute;
top: 8px;
right: 10px;
transform-origin: right center;
-webkit-transform-origin: right center;
-moz-transform-origin: right center;
transform: rotate(-30deg);
-webkit-transform: rotate(-30deg);
-moz-transform: rotate(-30deg);
border-radius: 2px;
}
.tonearm-needle {
width: 8px;
height: 8px;
background: #ffd700; /* Gold */
border-radius: 50%;
position: absolute;
top: 6px;
right: 65px;
box-shadow: 0 0 5px rgba(255, 215, 0, 0.8);
}
/* Turntable Controls */
.turntable-controls {
display: flex;
align-items: center;
justify-content: space-between;
gap: 15px;
}
.play-btn {
width: 60px;
height: 60px;
border: none;
border-radius: 50%;
background: linear-gradient(145deg, #4ecdc4, #45b7d1);
background: -webkit-linear-gradient(145deg, #4ecdc4, #45b7d1);
background: -moz-linear-gradient(145deg, #4ecdc4, #45b7d1);
color: #ffffff;
font-size: 24px;
cursor: pointer;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
box-shadow:
0 8px 20px rgba(78, 205, 196, 0.4),
inset 0 0 20px rgba(255, 255, 255, 0.2);
}
.play-btn:hover {
transform: scale(1.1);
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
box-shadow:
0 12px 30px rgba(78, 205, 196, 0.6),
inset 0 0 25px rgba(255, 255, 255, 0.3);
}
.play-btn.playing {
background: linear-gradient(145deg, #ff6b6b, #ff5722);
background: -webkit-linear-gradient(145deg, #ff6b6b, #ff5722);
background: -moz-linear-gradient(145deg, #ff6b6b, #ff5722);
box-shadow:
0 8px 20px rgba(255, 107, 107, 0.4),
inset 0 0 20px rgba(255, 255, 255, 0.2);
}
.cue-btn {
padding: 10px 20px;
border: none;
border-radius: 10px;
background: linear-gradient(145deg, #feca57, #ff9ff3);
background: -webkit-linear-gradient(145deg, #feca57, #ff9ff3);
background: -moz-linear-gradient(145deg, #feca57, #ff9ff3);
color: #000000;
font-weight: 700;
cursor: pointer;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
}
.cue-btn:hover {
transform: translateY(-2px);
-webkit-transform: translateY(-2px);
-moz-transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(254, 202, 87, 0.4);
}
.pitch-slider {
display: flex;
flex-direction: column;
align-items: center;
gap: 5px;
}
.pitch-slider label {
font-size: 12px;
font-weight: 600;
color: #4ecdc4;
}
.pitch-slider input[type="range"] {
width: 80px;
height: 5px;
background: linear-gradient(90deg, #ff6b6b, #4ecdc4);
background: -webkit-linear-gradient(90deg, #ff6b6b, #4ecdc4);
background: -moz-linear-gradient(90deg, #ff6b6b, #4ecdc4);
border-radius: 5px;
outline: none;
cursor: pointer;
-webkit-appearance: none;
appearance: none;
}
.pitch-slider input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 15px;
height: 15px;
border-radius: 50%;
background: #ffffff;
cursor: pointer;
box-shadow: 0 0 10px rgba(255, 255, 255, 0.8);
}
.pitch-slider input[type="range"]::-moz-range-thumb {
width: 15px;
height: 15px;
border-radius: 50%;
background: #ffffff;
cursor: pointer;
box-shadow: 0 0 10px rgba(255, 255, 255, 0.8);
border: none;
}
#pitch-value-a, #pitch-value-b {
font-size: 12px;
font-weight: 600;
color: #ffffff;
}
/* Waveform */
.waveform-container {
position: relative;
height: 80px;
background: rgba(0, 0, 0, 0.5);
border-radius: 10px;
margin-bottom: 15px;
overflow: hidden;
}
.waveform-container canvas {
width: 100%;
height: 100%;
}
.playhead {
position: absolute;
top: 0;
left: 0;
width: 2px;
height: 100%;
background: #ff6b6b;
box-shadow: 0 0 10px rgba(255, 107, 107, 0.8);
transition: left 0.1s ease;
-webkit-transition: left 0.1s ease;
-moz-transition: left 0.1s ease;
}
/* Track Info */
.track-info {
text-align: center;
margin-bottom: 10px;
}
.track-title {
font-size: 16px;
font-weight: 700;
color: #4ecdc4;
margin-bottom: 5px;
text-shadow: 0 0 10px rgba(78, 205, 196, 0.5);
}
.track-artist {
font-size: 14px;
color: #ffffff;
margin-bottom: 10px;
}
.track-time {
font-size: 12px;
color: #888888;
font-family: 'Orbitron', 'Courier New', Courier, monospace;
}
/* Mixer */
.mixer {
width: 400px;
min-width: 300px;
background: linear-gradient(145deg, #2a2a3e, #1e1e2e);
background: -webkit-linear-gradient(145deg, #2a2a3e, #1e1e2e);
background: -moz-linear-gradient(145deg, #2a2a3e, #1e1e2e);
border-radius: 20px;
padding: 20px;
box-shadow:
inset 5px 5px 15px rgba(0, 0, 0, 0.5),
inset -5px -5px 15px rgba(255, 255, 255, 0.1),
0 10px 30px rgba(0, 0, 0, 0.3);
border: 2px solid rgba(255, 255, 255, 0.1);
display: flex;
flex-direction: column;
}
.mixer-header {
text-align: center;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 2px solid rgba(255, 255, 255, 0.1);
}
.mixer-header h3 {
font-family: 'Orbitron', 'Arial Black', Gadget, sans-serif;
font-size: 18px;
color: #ff6b6b;
text-shadow: 0 0 10px rgba(255, 107, 107, 0.5);
}
/* Crossfader Section */
.crossfader-section {
margin-bottom: 30px;
}
.crossfader-container {
display: flex;
align-items: center;
gap: 15px;
margin-bottom: 10px;
}
.crossfader-container label {
font-weight: 700;
font-size: 18px;
color: #4ecdc4;
text-shadow: 0 0 5px rgba(78, 205, 196, 0.5);
}
#crossfader {
flex: 1;
height: 8px;
background: linear-gradient(90deg, #4ecdc4, #ff6b6b, #4ecdc4);
background: -webkit-linear-gradient(90deg, #4ecdc4, #ff6b6b, #4ecdc4);
background: -moz-linear-gradient(90deg, #4ecdc4, #ff6b6b, #4ecdc4);
border-radius: 10px;
outline: none;
cursor: pointer;
-webkit-appearance: none;
appearance: none;
}
#crossfader::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 25px;
height: 25px;
border-radius: 50%;
background: linear-gradient(145deg, #ffffff, #cccccc);
background: -webkit-linear-gradient(145deg, #ffffff, #cccccc);
background: -moz-linear-gradient(145deg, #ffffff, #cccccc);
cursor: pointer;
box-shadow:
0 0 15px rgba(255, 255, 255, 0.8),
inset 2px 2px 5px rgba(0, 0, 0, 0.2);
}
#crossfader::-moz-range-thumb {
width: 25px;
height: 25px;
border-radius: 50%;
background: linear-gradient(145deg, #ffffff, #cccccc);
background: -moz-linear-gradient(145deg, #ffffff, #cccccc);
cursor: pointer;
box-shadow:
0 0 15px rgba(255, 255, 255, 0.8),
inset 2px 2px 5px rgba(0, 0, 0, 0.2);
border: none;
}
.crossfader-curve {
display: flex;
gap: 5px;
justify-content: center;
}
.curve-btn {
width: 30px;
height: 30px;
border: none;
border-radius: 5px;
background: linear-gradient(145deg, #3a3a4e, #2a2a3e);
background: -webkit-linear-gradient(145deg, #3a3a4e, #2a2a3e);
background: -moz-linear-gradient(145deg, #3a3a4e, #2a2a3e);
color: #ffffff;
font-weight: 700;
cursor: pointer;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
}
.curve-btn.active {
background: linear-gradient(145deg, #4ecdc4, #45b7d1);
background: -webkit-linear-gradient(145deg, #4ecdc4, #45b7d1);
background: -moz-linear-gradient(145deg, #4ecdc4, #45b7d1);
box-shadow: 0 0 15px rgba(78, 205, 196, 0.5);
}
/* Channel Controls */
.channel-controls {
display: flex;
gap: 20px;
margin-bottom: 30px;
}
.channel {
flex: 1;
background: linear-gradient(145deg, #1a1a2e, #0f0f23);
background: -webkit-linear-gradient(145deg, #1a1a2e, #0f0f23);
background: -moz-linear-gradient(145deg, #1a1a2e, #0f0f23);
border-radius: 15px;
padding: 15px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.master-section {
width: 80px;
background: linear-gradient(145deg, #1a1a2e, #0f0f23);
background: -webkit-linear-gradient(145deg, #1a1a2e, #0f0f23);
background: -moz-linear-gradient(145deg, #1a1a2e, #0f0f23);
border-radius: 15px;
padding: 15px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.channel-header, .master-header {
text-align: center;
font-weight: 700;
color: #ffffff;
margin-bottom: 15px;
font-size: 14px;
}
/* EQ Section */
.eq-section {
display: flex;
flex-direction: column;
gap: 15px;
margin-bottom: 20px;
}
.eq-knob {
display: flex;
flex-direction: column;
align-items: center;
gap: 5px;
}
.eq-knob label {
font-size: 10px;
font-weight: 600;
color: #888888;
}
.knob {
width: 40px;
height: 40px;
border-radius: 50%;
background: linear-gradient(145deg, #3a3a4e, #2a2a3e);
background: -webkit-linear-gradient(145deg, #3a3a4e, #2a2a3e);
background: -moz-linear-gradient(145deg, #3a3a4e, #2a2a3e);
position: relative;
cursor: pointer;
box-shadow:
inset 3px 3px 8px rgba(0, 0, 0, 0.3),
inset -3px -3px 8px rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
}
.knob:hover {
box-shadow:
inset 4px 4px 10px rgba(0, 0, 0, 0.4),
inset -4px -4px 10px rgba(255, 255, 255, 0.15);
}
.knob-indicator {
position: absolute;
top: 3px;
left: 50%;
transform: translateX(-50%);
-webkit-transform: translateX(-50%);
-moz-transform: translateX(-50%);
width: 3px;
height: 15px;
background: #4ecdc4;
border-radius: 2px;
box-shadow: 0 0 8px rgba(78, 205, 196, 0.8);
transform-origin: center 17px;
-webkit-transform-origin: center 17px;
-moz-transform-origin: center 17px;
}
.eq-value {
font-size: 10px;
color: #ffffff;
font-family: 'Orbitron', 'Courier New', Courier, monospace;
}
/* Volume Faders */
.volume-fader, .master-volume {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
margin-bottom: 15px;
}
.volume-fader input[type="range"], .master-volume input[type="range"] {
writing-mode: bt-lr; /* IE */
-webkit-appearance: slider-vertical; /* WebKit */
appearance: slider-vertical;
width: 8px;
height: 150px;
background: linear-gradient(180deg, #ff6b6b, #feca57, #4ecdc4);
background: -webkit-linear-gradient(180deg, #ff6b6b, #feca57, #4ecdc4);
background: -moz-linear-gradient(180deg, #ff6b6b, #feca57, #4ecdc4);
border-radius: 5px;
outline: none;
cursor: pointer;
margin: 0;
padding: 0;
}
/* Firefox-spezifische Korrekturen für vertikale Slider */
@supports (-moz-appearance:none) {
.volume-fader input[type="range"], .master-volume input[type="range"] {
transform: rotate(270deg);
-moz-transform: rotate(270deg);
margin: 60px 0;
width: 150px;
}
}
.volume-fader input[type="range"]::-webkit-slider-thumb,
.master-volume input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 20px;
height: 15px;
border-radius: 3px;
background: linear-gradient(145deg, #ffffff, #cccccc);
background: -webkit-linear-gradient(145deg, #ffffff, #cccccc);
cursor: pointer;
box-shadow: 0 0 10px rgba(255, 255, 255, 0.8);
}
.volume-fader input[type="range"]::-moz-range-thumb,
.master-volume input[type="range"]::-moz-range-thumb {
width: 20px;
height: 15px;
border-radius: 3px;
background: linear-gradient(145deg, #ffffff, #cccccc);
background: -moz-linear-gradient(145deg, #ffffff, #cccccc);
cursor: pointer;
box-shadow: 0 0 10px rgba(255, 255, 255, 0.8);
border: none;
}
.volume-fader label, .master-volume label {
font-size: 10px;
font-weight: 600;
color: #888888;
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
-ms-writing-mode: tb-rl;
text-orientation: mixed;
-webkit-text-orientation: mixed;
}
/* VU Meters */
.vu-meter, .master-vu {
width: 20px;
height: 150px;
background: rgba(0, 0, 0, 0.5);
border-radius: 10px;
position: relative;
overflow: hidden;
}
.vu-bar {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 0%;
background: linear-gradient(180deg, #ff0000, #ff6b6b, #feca57, #4ecdc4);
background: -webkit-linear-gradient(180deg, #ff0000, #ff6b6b, #feca57, #4ecdc4);
background: -moz-linear-gradient(180deg, #ff0000, #ff6b6b, #feca57, #4ecdc4);
border-radius: 10px;
transition: height 0.1s ease;
-webkit-transition: height 0.1s ease;
-moz-transition: height 0.1s ease;
}
/* BPM Display */
.bpm-display {
text-align: center;
margin-top: 15px;
}
.bpm-value {
font-size: 24px;
font-weight: 700;
color: #4ecdc4;
font-family: 'Orbitron', 'Courier New', Courier, monospace;
text-shadow: 0 0 10px rgba(78, 205, 196, 0.5);
}
.bpm-display label {
font-size: 12px;
color: #888888;
}
/* Effects Section */
.effects-section {
background: linear-gradient(145deg, #1a1a2e, #0f0f23);
background: -webkit-linear-gradient(145deg, #1a1a2e, #0f0f23);
background: -moz-linear-gradient(145deg, #1a1a2e, #0f0f23);
border-radius: 15px;
padding: 15px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.effect-unit h4 {
text-align: center;
color: #ff6b6b;
margin-bottom: 15px;
font-size: 14px;
text-shadow: 0 0 5px rgba(255, 107, 107, 0.5);
}
.effect-buttons {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
margin-bottom: 15px;
}
.effect-btn {
padding: 8px 12px;
border: none;
border-radius: 8px;
background: linear-gradient(145deg, #3a3a4e, #2a2a3e);
background: -webkit-linear-gradient(145deg, #3a3a4e, #2a2a3e);
background: -moz-linear-gradient(145deg, #3a3a4e, #2a2a3e);
color: #ffffff;
font-size: 10px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
}
.effect-btn:hover {
transform: translateY(-1px);
-webkit-transform: translateY(-1px);
-moz-transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
.effect-btn.active {
background: linear-gradient(145deg, #ff6b6b, #ff5722);
background: -webkit-linear-gradient(145deg, #ff6b6b, #ff5722);
background: -moz-linear-gradient(145deg, #ff6b6b, #ff5722);
box-shadow: 0 0 15px rgba(255, 107, 107, 0.5);
}
.effect-knob {
display: flex;
flex-direction: column;
align-items: center;
gap: 5px;
}
/* Bottom Panel */
.bottom-panel {
height: 200px;
background: linear-gradient(145deg, #1e1e2e, #2a2a3e);
background: -webkit-linear-gradient(145deg, #1e1e2e, #2a2a3e);
background: -moz-linear-gradient(145deg, #1e1e2e, #2a2a3e);
border-top: 2px solid rgba(255, 255, 255, 0.1);
display: flex;
padding: 15px;
gap: 20px;
}
/* Playlist Browser */
.playlist-browser {
flex: 1;
background: linear-gradient(145deg, #0f0f23, #1a1a2e);
background: -webkit-linear-gradient(145deg, #0f0f23, #1a1a2e);
background: -moz-linear-gradient(145deg, #0f0f23, #1a1a2e);
border-radius: 15px;
padding: 15px;
border: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
flex-direction: column;
}
.browser-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.browser-header h4 {
color: #4ecdc4;
font-size: 14px;
text-shadow: 0 0 5px rgba(78, 205, 196, 0.5);
}
.search-box {
position: relative;
display: flex;
align-items: center;
}
.search-box i {
position: absolute;
left: 10px;
color: #888888;
}
.search-box input {
padding: 8px 15px 8px 35px;
border: none;
border-radius: 20px;
background: rgba(0, 0, 0, 0.3);
color: #ffffff;
font-size: 12px;
outline: none;
width: 200px;
}
.search-box input::placeholder {
color: #888888;
}
.track-list {
flex: 1;
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: #4ecdc4 transparent;
}
.track-list::-webkit-scrollbar {
width: 6px;
}
.track-list::-webkit-scrollbar-track {
background: transparent;
}
.track-list::-webkit-scrollbar-thumb {
background: #4ecdc4;
border-radius: 3px;
}
.track-item {
padding: 8px 12px;
border-radius: 8px;
margin-bottom: 5px;
cursor: pointer;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
border: 1px solid transparent;
}
.track-item:hover {
background: rgba(78, 205, 196, 0.1);
border-color: rgba(78, 205, 196, 0.3);
}
.track-item-title {
font-size: 12px;
font-weight: 600;
color: #ffffff;
margin-bottom: 2px;
}
.track-item-artist {
font-size: 10px;
color: #888888;
}
/* Recording Section */
.recording-section {
width: 150px;
background: linear-gradient(145deg, #0f0f23, #1a1a2e);
background: -webkit-linear-gradient(145deg, #0f0f23, #1a1a2e);
background: -moz-linear-gradient(145deg, #0f0f23, #1a1a2e);
border-radius: 15px;
padding: 15px;
border: 1px solid rgba(255, 255, 255, 0.1);
text-align: center;
}
.recording-section h4 {
color: #ff6b6b;
font-size: 14px;
margin-bottom: 15px;
text-shadow: 0 0 5px rgba(255, 107, 107, 0.5);
}
.record-btn {
width: 60px;
height: 60px;
border: none;
border-radius: 50%;
background: linear-gradient(145deg, #ff6b6b, #ff5722);
background: -webkit-linear-gradient(145deg, #ff6b6b, #ff5722);
background: -moz-linear-gradient(145deg, #ff6b6b, #ff5722);
color: #ffffff;
font-size: 12px;
cursor: pointer;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
margin-bottom: 15px;
box-shadow: 0 8px 20px rgba(255, 107, 107, 0.4);
}
.record-btn:hover {
transform: scale(1.1);
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
box-shadow: 0 12px 30px rgba(255, 107, 107, 0.6);
}
.record-btn.recording {
animation: recordPulse 1s ease-in-out infinite;
-webkit-animation: recordPulse 1s ease-in-out infinite;
-moz-animation: recordPulse 1s ease-in-out infinite;
}
@keyframes recordPulse {
0%, 100% { box-shadow: 0 8px 20px rgba(255, 107, 107, 0.4); }
50% { box-shadow: 0 8px 20px rgba(255, 107, 107, 0.8); }
}
@-webkit-keyframes recordPulse {
0%, 100% { box-shadow: 0 8px 20px rgba(255, 107, 107, 0.4); }
50% { box-shadow: 0 8px 20px rgba(255, 107, 107, 0.8); }
}
@-moz-keyframes recordPulse {
0%, 100% { box-shadow: 0 8px 20px rgba(255, 107, 107, 0.4); }
50% { box-shadow: 0 8px 20px rgba(255, 107, 107, 0.8); }
}
.recording-time {
font-family: 'Orbitron', 'Courier New', Courier, monospace;
font-size: 16px;
color: #4ecdc4;
text-shadow: 0 0 5px rgba(78, 205, 196, 0.5);
}
/* Modal */
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.8);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.modal-content {
background: linear-gradient(145deg, #1e1e2e, #2a2a3e);
background: -webkit-linear-gradient(145deg, #1e1e2e, #2a2a3e);
background: -moz-linear-gradient(145deg, #1e1e2e, #2a2a3e);
border-radius: 20px;
padding: 30px;
width: 500px;
max-width: 90vw;
border: 2px solid rgba(255, 255, 255, 0.1);
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 15px;
border-bottom: 2px solid rgba(255, 255, 255, 0.1);
}
.modal-header h3 {
color: #4ecdc4;
font-size: 20px;
text-shadow: 0 0 10px rgba(78, 205, 196, 0.5);
}
.close-modal {
width: 30px;
height: 30px;
border: none;
border-radius: 50%;
background: rgba(255, 0, 0, 0.7);
color: #ffffff;
cursor: pointer;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
}
.close-modal:hover {
transform: scale(1.1);
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
background: rgba(255, 0, 0, 0.9);
}
.input-group {
margin-bottom: 20px;
}
.input-group label {
display: block;
margin-bottom: 8px;
color: #ffffff;
font-weight: 600;
}
.input-group input {
width: 100%;
padding: 12px 15px;
border: none;
border-radius: 10px;
background: rgba(0, 0, 0, 0.3);
color: #ffffff;
font-size: 14px;
outline: none;
border: 2px solid transparent;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
}
.input-group input:focus {
border-color: #4ecdc4;
box-shadow: 0 0 15px rgba(78, 205, 196, 0.3);
}
.input-group input::placeholder {
color: #888888;
}
.modal-actions {
display: flex;
gap: 15px;
justify-content: flex-end;
margin-top: 30px;
}
.btn-cancel, .btn-load {
padding: 12px 25px;
border: none;
border-radius: 10px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
}
.btn-cancel {
background: linear-gradient(145deg, #666666, #555555);
background: -webkit-linear-gradient(145deg, #666666, #555555);
background: -moz-linear-gradient(145deg, #666666, #555555);
color: #ffffff;
}
.btn-cancel:hover {
transform: translateY(-2px);
-webkit-transform: translateY(-2px);
-moz-transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3);
}
.btn-load {
background: linear-gradient(145deg, #4ecdc4, #45b7d1);
background: -webkit-linear-gradient(145deg, #4ecdc4, #45b7d1);
background: -moz-linear-gradient(145deg, #4ecdc4, #45b7d1);
color: #ffffff;
}
.btn-load:hover {
transform: translateY(-2px);
-webkit-transform: translateY(-2px);
-moz-transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(78, 205, 196, 0.4);
}
/* Notification */
.notification {
position: fixed;
top: 80px;
right: 20px;
padding: 15px 20px;
border-radius: 10px;
color: white;
font-weight: 600;
z-index: 10000;
transform: translateX(100%);
transition: transform 0.3s ease;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3);
}
.notification-success {
background: #4ecdc4;
}
.notification-error {
background: #ff6b6b;
}
.notification-warning {
background: #feca57;
}
.notification-info {
background: #45b7d1;
}
/* Resize Handle */
.resize-handle {
position: absolute;
bottom: 0;
right: 0;
width: 20px;
height: 20px;
cursor: nwse-resize;
color: rgba(255, 255, 255, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
transition: color 0.3s ease;
}
.resize-handle:hover {
color: rgba(255, 255, 255, 0.8);
}
/* Animation für Ein- und Ausblenden */
#dj-interface.hidden {
opacity: 0;
pointer-events: none;
}
#dj-interface:not(.hidden) {
opacity: 1;
pointer-events: auto;
}
/* Responsive Design */
@media (max-width: 1200px) {
.dj-console {
flex-direction: column;
gap: 15px;
}
.mixer {
width: 100%;
}
.deck {
width: 100%;
}
.vinyl-container {
width: 150px;
height: 150px;
}
.vinyl {
width: 150px;
height: 150px;
}
.bottom-panel {
flex-direction: column;
height: auto;
}
.recording-section {
width: 100%;
}
}
@media (max-width: 768px) {
#dj-interface {
width: 100%;
height: 100%;
border-radius: 0;
}
.dj-header {
height: 50px;
}
.logo {
font-size: 18px;
}
.turntable-controls {
flex-direction: column;
align-items: center;
}
.channel-controls {
flex-direction: column;
}
.master-section {
width: 100%;
display: flex;
justify-content: space-around;
align-items: center;
}
.master-volume {
flex-direction: row;
}
.master-volume input[type="range"]::-moz-range-thumb {
width: 15px;
height: 15px;
border-radius: 50%;
background: #ffffff;
cursor: pointer;
box-shadow: 0 0 10px rgba(255, 255, 255, 0.8);
border: none;
}
}
/* Animations */
@keyframes glow {
0%, 100% { box-shadow: 0 0 5px rgba(78, 205, 196, 0.5); }
50% { box-shadow: 0 0 20px rgba(78, 205, 196, 0.8); }
}
@-webkit-keyframes glow {
0%, 100% { box-shadow: 0 0 5px rgba(78, 205, 196, 0.5); }
50% { box-shadow: 0 0 20px rgba(78, 205, 196, 0.8); }
}
@-moz-keyframes glow {
0%, 100% { box-shadow: 0 0 5px rgba(78, 205, 196, 0.5); }
50% { box-shadow: 0 0 20px rgba(78, 205, 196, 0.8); }
}
.glowing {
animation: glow 2s ease-in-out infinite;
-webkit-animation: glow 2s ease-in-out infinite;
-moz-animation: glow 2s ease-in-out infinite;
}
/* Utility Classes */
.text-center { text-align: center; }
.text-left { text-align: left; }
.text-right { text-align: right; }
.mb-10 { margin-bottom: 10px; }
.mb-15 { margin-bottom: 15px; }
.mb-20 { margin-bottom: 20px; }
.p-10 { padding: 10px; }
.p-15 { padding: 15px; }
.p-20 { padding: 20px; }
/* Playlist Styles */
.playlist-browser {
flex: 1;
display: flex;
flex-direction: column;
background: linear-gradient(145deg, #0f0f23, #1a1a2e);
border-radius: 15px;
padding: 15px;
border: 1px solid rgba(255, 255, 255, 0.1);
overflow: hidden;
}
.browser-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.create-playlist-btn {
padding: 8px 12px;
border: none;
border-radius: 8px;
background: linear-gradient(145deg, #4ecdc4, #45b7d1);
color: #ffffff;
font-size: 12px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
}
.create-playlist-btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(78, 205, 196, 0.4);
}
.playlist-container {
flex: 1;
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: #4ecdc4 transparent;
}
.playlist-container::-webkit-scrollbar {
width: 6px;
}
.playlist-container::-webkit-scrollbar-track {
background: transparent;
}
.playlist-container::-webkit-scrollbar-thumb {
background: #4ecdc4;
border-radius: 3px;
}
.playlist-item {
padding: 10px;
margin-bottom: 8px;
background: rgba(0, 0, 0, 0.3);
border-radius: 8px;
border: 1px solid rgba(255, 255, 255, 0.05);
transition: all 0.3s ease;
}
.playlist-item:hover {
background: rgba(78, 205, 196, 0.1);
border-color: rgba(78, 205, 196, 0.3);
}
.playlist-item.active {
background: rgba(78, 205, 196, 0.2);
border-color: rgba(78, 205, 196, 0.5);
}
.playlist-header {
display: flex;
justify-content: space-between;
margin-bottom: 8px;
}
.playlist-name {
font-weight: 600;
color: #ffffff;
}
.playlist-count {
font-size: 12px;
color: #888888;
}
.playlist-actions {
display: flex;
gap: 8px;
}
.playlist-actions button {
width: 30px;
height: 30px;
border: none;
border-radius: 50%;
background: rgba(0, 0, 0, 0.3);
color: #ffffff;
cursor: pointer;
transition: all 0.3s ease;
}
.playlist-play-btn {
background: linear-gradient(145deg, #4ecdc4, #45b7d1) !important;
}
.playlist-edit-btn {
background: linear-gradient(145deg, #feca57, #ff9ff3) !important;
}
.playlist-delete-btn {
background: linear-gradient(145deg, #ff6b6b, #ff5722) !important;
}
.playlist-actions button:hover {
transform: scale(1.1);
}
.no-playlists {
text-align: center;
color: #888888;
padding: 20px;
}
/* Playlist Editor Modal */
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.8);
display: flex;
align-items: center;
justify-content: center;
z-index: 2000;
}
.modal-content {
background: linear-gradient(145deg, #1e1e2e, #2a2a3e);
border-radius: 20px;
padding: 20px;
width: 500px;
max-width: 90%;
max-height: 90%;
overflow-y: auto;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.modal-header h3 {
color: #4ecdc4;
font-size: 18px;
}
.close-modal {
width: 30px;
height: 30px;
border: none;
border-radius: 50%;
background: rgba(255, 0, 0, 0.7);
color: #ffffff;
font-size: 18px;
cursor: pointer;
transition: all 0.3s ease;
}
.close-modal:hover {
background: rgba(255, 0, 0, 0.9);
transform: scale(1.1);
}
.playlist-songs {
margin-bottom: 20px;
max-height: 200px;
overflow-y: auto;
}
.playlist-song {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px;
margin-bottom: 5px;
background: rgba(0, 0, 0, 0.2);
border-radius: 5px;
}
.remove-song {
width: 24px;
height: 24px;
border: none;
border-radius: 50%;
background: rgba(255, 0, 0, 0.7);
color: #ffffff;
cursor: pointer;
}
.add-song-form {
padding: 15px;
background: rgba(0, 0, 0, 0.2);
border-radius: 10px;
}
.add-song-form h4 {
margin-bottom: 10px;
color: #4ecdc4;
}
.input-group {
margin-bottom: 10px;
}
.input-group input {
width: 100%;
padding: 8px 12px;
border: none;
border-radius: 5px;
background: rgba(0, 0, 0, 0.3);
color: #ffffff;
outline: none;
}
#add-song-btn {
padding: 8px 15px;
border: none;
border-radius: 5px;
background: linear-gradient(145deg, #4ecdc4, #45b7d1);
color: #ffffff;
cursor: pointer;
transition: all 0.3s ease;
}
#add-song-btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(78, 205, 196, 0.4);
}