diff --git a/index.html b/index.html index 35b5cc9..15e7af9 100644 --- a/index.html +++ b/index.html @@ -47,6 +47,15 @@ position: relative; } + @media (min-width: 900px) { + body { justify-content: center; } + .device-case { + max-width: none; + width: calc(100% - 40px); + margin: 0 20px; + } + } + /* --- HEADER --- */ .transport-bar { background: var(--win-gray); @@ -88,6 +97,10 @@ .btn-play { flex: 2; color: #006400; border-width: 3px; font-size: 14px; } .btn-stop { flex: 1; color: #8b0000; } .btn-init { flex: 3; background: #e0e080; border-color: #999; } + .btn-rec { flex: 2; color: #8b0000; background: #ffdede; border-color: #aa7777; position: relative; } + .btn-rec.recording { background: #ffb3b3; border-color: #c00; color: #600; } + .rec-dot { width: 10px; height: 10px; border-radius: 50%; background: #c00; display: inline-block; margin-right: 4px; box-shadow: 0 0 6px rgba(255,0,0,0.6); } + .rec-dot.idle { background: #700; box-shadow: none; } /* --- GLOBAL --- */ .global-strip { @@ -116,13 +129,13 @@ .workspace { flex: 1; padding: 10px; - display: flex; - flex-direction: column; + display: grid; + grid-template-columns: 1fr; gap: 15px; overflow-y: auto; -webkit-overflow-scrolling: touch; background: #888; - padding-bottom: 120px; + padding-bottom: 20px; } .track-section { @@ -134,6 +147,9 @@ animation: slideIn 0.3s ease-out; transition: all 0.2s ease; } + .track-section.active-track { + box-shadow: 0 0 0 2px #fff, 0 0 10px #ff0; + } @keyframes slideIn { from { opacity:0; transform:translateY(20px); } to { opacity:1; transform:translateY(0); } } .track-header { @@ -181,7 +197,7 @@ /* --- SLIDERS --- */ input[type=range] { -webkit-appearance: none; background: transparent; - touch-action: none; + touch-action: none; } input[type=range]:focus { outline: none; } @@ -191,7 +207,7 @@ } .fader-group { display: flex; flex-direction: column; align-items: center; flex: 1; } .fader-label { font-size: 8px; font-weight: bold; color: #222; margin-top: 2px; } - + input[type=range].vertical { -webkit-appearance: slider-vertical; width: 30px; height: 100%; cursor: pointer; } @@ -203,12 +219,12 @@ height: 8px; background: #222; border: 1px inset; border-radius: 4px; } input[type=range].horiz::-webkit-slider-thumb { - -webkit-appearance: none; width: 22px; height: 22px; - background: #ccc; border: 2px outset #eee; + -webkit-appearance: none; width: 22px; height: 22px; + background: #ccc; border: 2px outset #eee; margin-top: -8px; border-radius: 2px; box-shadow: 1px 1px 3px rgba(0,0,0,0.5); } - + input[type=range].mini-vol { width: 60px; height: 20px; } @@ -245,9 +261,9 @@ } .tiny-btn.active { background: #999; border: 1px inset; color: white; } - .add-track-area { - padding: 20px; - text-align: center; + .add-track-area { + padding: 20px; + text-align: center; margin-top: 10px; } .btn-add { @@ -256,10 +272,95 @@ } .btn-add:active { background: #ccc; } + /* --- MIDI PANEL --- */ + .midi-panel { + display: none; + background: #a0a0a0; + border-bottom: 2px solid var(--win-darker); + padding: 8px; + z-index: 45; + } + .fx-rack { + background: #9b9b9b; + border-top: 2px solid var(--win-darker); + padding: 8px; + display: grid; + gap: 8px; + flex-shrink: 0; + } + .fx-row { display: grid; gap: 8px; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); } + .fx-module { background: rgba(255,255,255,0.35); border: 2px inset #666; padding: 8px; box-shadow: inset 0 1px 2px rgba(0,0,0,0.2); } + .fx-title { font-size: 12px; font-weight: bold; color: #000; margin-bottom: 6px; text-shadow: 1px 1px 0 #ddd; } + .fx-controls { display: grid; gap: 6px; } + .fx-control-row { display: flex; align-items: center; gap: 8px; } + .fx-control-row span { font-size: 10px; font-weight: bold; width: 70px; } + .send-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 6px; margin-top: 6px; } + .send-row span { font-size: 10px; font-weight: bold; } + .midi-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + } + .midi-label { + font-size: 11px; + font-weight: bold; + color: #111; + } + .midi-notes { + font-family: monospace; + font-size: 12px; + background: #fff; + padding: 2px 6px; + border: 1px inset #777; + border-radius: 2px; + min-height: 20px; + flex: 1; + text-align: right; + color: #000; + } + .piano { + margin-top: 6px; + background: #777; + padding: 6px; + border: 1px inset #555; + display: grid; + gap: 3px; + height: 90px; + } + .piano-key { + border-radius: 2px; + border: 1px solid #111; + display: flex; + align-items: flex-end; + justify-content: center; + padding-bottom: 4px; + font-size: 9px; + font-weight: bold; + color: #000; + background: linear-gradient(180deg, #fdfdfd, #ddd); + } + .piano-key.black { + background: linear-gradient(180deg, #333, #111); + color: #fff; + } + .piano-key.active { + outline: 2px solid #39ff14; + box-shadow: 0 0 8px #39ff14; + } + select { font-size: 11px; padding: 2px; height: 24px; border: 1px inset; } .track-body.collapsed { display: none; } + @media (min-width: 900px) { + .workspace { + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + align-items: start; + } + .add-track-area { grid-column: 1 / -1; } + } + @@ -273,6 +374,7 @@ @@ -310,6 +412,16 @@ + +
+
+ MIDI +
No device detected
+
---
+
+
+
+
@@ -319,6 +431,52 @@
+ +
+
+
+
REVERB SEND / TAL-STYLE PLATE
+
+
+ PRE-DELAY + + 35ms +
+
+ DECAY + + 3.2s +
+
+ TONE + + 6.5k +
+
+
+
+
PING-PONG DELAY SEND
+
+
+ TIME + + 320ms +
+
+ FEEDBACK + + 38% +
+
+ TONE + + 9.0k +
+
+
+
+
+