*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg: #0f1114;--panel: #1a1d22;--panel-2: #21252b;--panel-light: #282d34;--inset: #0a0c0f;--hair: rgba(255,255,255,.05);--hair-strong: rgba(255,255,255,.1);--surface: #1a1d22;--surface-2: #21252b;--surface-3: #282d34;--border: rgba(0,0,0,.5);--border-light: rgba(255,255,255,.08);--text: #e4e8ed;--text-dim: #8893a0;--text-muted: #4c5561;--accent: #4dd6c3;--accent-bright: #6ae3d0;--accent-dim: rgba(77,214,195,.2);--right-hand: #4dd6c3;--left-hand: #c89dff;--success: #7ae58a;--green: #7ae58a;--red: #ff6b7a;--lcd-bg: #081a1c;--lcd-border: rgba(0,0,0,.55);--lcd-text: #4dd6c3;--lcd-dim: #2b6b61;--plate: linear-gradient(180deg, #282d34 0%, #1a1d22 50%, #21252b 100%);--safe-bottom: env(safe-area-inset-bottom, 0px)}html,body{height:100%;overflow:hidden;background:var(--bg);color:var(--text);color-scheme:dark;font-family:IBM Plex Sans,system-ui,sans-serif;-webkit-tap-highlight-color:transparent;touch-action:manipulation}select,option{color-scheme:dark}select option{background:var(--panel-2);color:var(--text)}#app{display:flex;flex-direction:column;height:100%;position:relative}.hidden{display:none!important}.mode-nav{display:flex;align-items:center;gap:12px;height:56px;padding:0 14px;background:var(--plate);border-bottom:1px solid rgba(0,0,0,.5);box-shadow:0 1px #ffffff0a;flex-shrink:0;z-index:10}.mode-brand{display:flex;align-items:center;gap:8px;font-family:IBM Plex Sans,system-ui,sans-serif;font-size:15px;font-weight:700;color:var(--text);letter-spacing:-.01em}.mode-brand:before{content:"K";display:flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:5px;background:linear-gradient(135deg,var(--accent),var(--accent-bright));box-shadow:0 0 10px #4dd6c354,inset 0 1px #ffffff4d;font-family:IBM Plex Mono,monospace;font-weight:800;font-size:12px;color:#041513}.mode-brand span{font-family:IBM Plex Mono,monospace;font-weight:400;color:var(--text-muted);font-size:10px;letter-spacing:.1em;margin-left:4px}.mode-tabs{display:flex;gap:0;padding:3px;background:var(--inset);border-radius:5px;box-shadow:inset 0 1px 3px #0009;margin-left:14px}.mode-tab{padding:7px 16px;border:none;border-radius:3px;background:transparent;color:var(--text-dim);font-family:IBM Plex Mono,monospace;font-size:11px;font-weight:700;letter-spacing:.08em;cursor:pointer;transition:color .12s}.mode-tab:active{background:#ffffff08}.mode-tab.active{background:var(--plate);color:var(--accent);box-shadow:0 1px #ffffff14,0 1px 3px #00000080}.mode-midi{display:flex;align-items:center;gap:7px;padding:5px 10px;font-family:IBM Plex Mono,monospace;font-size:10px;letter-spacing:.08em;color:var(--lcd-text);background:var(--lcd-bg);border:1px solid var(--lcd-border);border-radius:4px;box-shadow:inset 0 2px 5px #000000bf,0 1px #ffffff0a;cursor:pointer;max-width:220px}.mode-remote{padding:7px 14px;background:var(--plate);border:1px solid rgba(0,0,0,.5);border-radius:4px;color:var(--accent);font-family:IBM Plex Mono,monospace;font-size:10px;font-weight:700;letter-spacing:.12em;cursor:pointer;box-shadow:inset 0 1px #ffffff0f,0 1px 3px #0006}.mode-remote:before{content:"◇ "}.mode-remote:hover{color:var(--accent-bright)}.remote-modal{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:20px}.remote-modal-backdrop{position:absolute;inset:0;background:radial-gradient(ellipse at center,#14161acc,#000 70%);backdrop-filter:blur(4px)}.remote-modal-card{position:relative;background:var(--panel);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:26px 28px;width:100%;max-width:460px;display:flex;flex-direction:column;gap:16px;box-shadow:0 20px 60px #000c}.remote-modal-title{font-family:IBM Plex Sans,system-ui,sans-serif;font-size:20px;font-weight:700;letter-spacing:-.01em;color:var(--text)}.remote-modal-help{font-family:IBM Plex Sans,system-ui,sans-serif;font-size:13px;color:var(--text-dim);line-height:1.5}.remote-modal-help b{color:var(--text);font-weight:600}.remote-modal-input{width:100%;padding:14px 18px;font-family:IBM Plex Mono,monospace;font-size:28px;font-weight:700;letter-spacing:.2em;text-align:center;background:var(--inset);border:1.5px solid var(--accent);border-radius:8px;color:var(--text);outline:none;box-shadow:0 0 16px #4dd6c333,inset 0 1px 3px #0009}.remote-modal-input:focus{box-shadow:0 0 20px #4dd6c359,inset 0 1px 3px #0009}.remote-modal-error{font-family:IBM Plex Mono,monospace;font-size:11px;letter-spacing:.1em;color:var(--red);text-align:center}.remote-modal-actions{display:flex;gap:10px;justify-content:flex-end}.remote-modal-btn{padding:10px 20px;background:var(--panel-2);border:1px solid rgba(255,255,255,.1);border-radius:6px;color:var(--text);font-family:IBM Plex Sans,system-ui,sans-serif;font-size:13px;font-weight:500;cursor:pointer}.remote-modal-btn:active{filter:brightness(.9)}.remote-modal-btn.primary{background:transparent;border:1.5px solid var(--accent);color:var(--accent);font-weight:600;box-shadow:0 0 12px #4dd6c333}.mode-midi:active{background:var(--surface-2)}.midi-dot{width:7px;height:7px;border-radius:50%;background:var(--text-muted);transition:all .3s}.midi-dot.on{background:var(--success);box-shadow:0 0 6px var(--success)}.mode-view{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column}.trainer-root{display:flex;flex-direction:column;flex:1;min-height:0}.controls{display:flex;align-items:center;padding:10px 14px;gap:10px;background:var(--plate);border-bottom:1px solid rgba(0,0,0,.5);box-shadow:inset 0 -1px #ffffff08;flex-shrink:0;flex-wrap:wrap}.ctrl-btn{padding:9px 16px;background:var(--plate);border:1px solid rgba(0,0,0,.5);border-radius:5px;color:var(--text);font-family:IBM Plex Mono,monospace;font-size:11px;font-weight:700;letter-spacing:.1em;cursor:pointer;transition:color .12s;user-select:none;box-shadow:inset 0 1px #ffffff0f,0 2px 4px #0006}.ctrl-btn:active{filter:brightness(.95)}.ctrl-btn.active{color:var(--accent);border-color:#4dd6c366;box-shadow:inset 0 1px #ffffff0f,0 2px 4px #0006,0 0 10px #4dd6c340}.ctrl-btn.play{background:linear-gradient(180deg,var(--accent),rgba(77,214,195,.67));color:#041513;border-color:#00000080;box-shadow:inset 0 1px #ffffff40,0 2px 4px #00000073,0 0 14px #4dd6c345}.ctrl-btn.play.active{background:linear-gradient(180deg,var(--accent-bright),var(--accent))}.ctrl-group{display:flex;align-items:center;gap:6px}.ctrl-label{font-family:IBM Plex Mono,monospace;font-size:9px;color:var(--text-muted);letter-spacing:.1em}.song-info{font-size:10px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text-dim);flex:1 1 120px;min-width:0}.ctrl-select{padding:7px 10px;background:var(--plate);border:1px solid rgba(0,0,0,.5);border-radius:4px;color:var(--text);font-family:IBM Plex Mono,monospace;font-size:11px;font-weight:700;letter-spacing:.05em;cursor:pointer;outline:none;box-shadow:inset 0 1px #ffffff0f,0 1px 3px #0006}.ctrl-select option{background:var(--panel-2)}.file-input{display:none}.spacer{flex:1}.track-toggle{display:flex;align-items:center;gap:5px;padding:5px 10px;border-radius:4px;cursor:pointer;font-family:IBM Plex Mono,monospace;font-size:10px;border:1px solid var(--border);background:var(--surface-2);user-select:none;transition:all .12s}.track-toggle .dot{width:8px;height:8px;border-radius:50%}.track-toggle.muted{opacity:.35}.progress-bar{height:3px;background:var(--surface-2);flex-shrink:0;position:relative;cursor:pointer}.progress-fill{height:100%;background:var(--accent);width:0%;transition:width .1s linear}.canvas-wrap{flex:1;position:relative;overflow:hidden;min-height:0}canvas{display:block;width:100%;height:100%}.drop-overlay{position:absolute;inset:0;background:#0c0c0feb;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:20;transition:opacity .3s}.drop-overlay.hidden{opacity:0;pointer-events:none}.drop-icon{font-size:48px;margin-bottom:16px;opacity:.5}.drop-title{font-size:22px;font-weight:600;margin-bottom:8px}.drop-subtitle{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--text-dim);margin-bottom:24px}.drop-actions{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}.drop-btn{padding:12px 24px;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:14px;font-weight:500;cursor:pointer}.drop-btn:active{background:var(--border)}.drop-btn.primary{border-color:var(--accent);color:var(--accent)}.demo-list{margin-top:20px;display:flex;flex-direction:column;gap:6px;width:280px}.demo-item{padding:10px 14px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:13px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;text-align:left}.demo-item:active{background:var(--border)}.demo-item .difficulty{font-family:IBM Plex Mono,monospace;font-size:9px;color:var(--text-muted);letter-spacing:1px}.library-columns{margin-top:20px;display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap;justify-content:center;max-height:50vh}.library-col{display:flex;flex-direction:column;width:280px;min-width:0}.library-col-title{font-family:IBM Plex Mono,monospace;font-size:10px;letter-spacing:1.5px;color:var(--text-muted);margin-bottom:8px;text-transform:uppercase}.library-list{display:flex;flex-direction:column;gap:6px;overflow-y:auto;max-height:40vh}.library-empty{padding:10px 14px;font-size:12px;color:var(--text-muted);font-style:italic}.library-item{display:flex;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;overflow:hidden}.library-item-load{flex:1;min-width:0;padding:10px 14px;background:none;border:none;color:var(--text);font-size:13px;cursor:pointer;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.library-item-load:active{background:var(--border)}.library-item-del{padding:0 12px;background:none;border:none;border-left:1px solid var(--border);color:var(--text-muted);font-size:18px;line-height:1;cursor:pointer}.library-item-del:hover{color:var(--red)}.drop-close{position:absolute;top:12px;right:12px;width:32px;height:32px;background:var(--surface-2);border:1px solid var(--border);border-radius:50%;color:var(--text-dim);font-size:18px;line-height:1;cursor:pointer}.drop-close:hover{color:var(--text)}.settings-root{flex:1;min-height:0;overflow-y:auto;padding:28px 32px;background:var(--bg)}.settings-inner{max-width:1100px;margin:0 auto;display:flex;flex-direction:column;gap:18px}.settings-card{background:var(--plate);border:1px solid rgba(0,0,0,.5);border-radius:6px;box-shadow:0 2px 4px #0006,inset 0 1px #ffffff0d;padding:18px 22px}.settings-card-head{display:flex;align-items:baseline;gap:14px;padding-bottom:14px;margin-bottom:6px;border-bottom:1px solid rgba(0,0,0,.45)}.settings-card-title{font-family:IBM Plex Mono,monospace;font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}.settings-card-sub{font-family:IBM Plex Sans,system-ui,sans-serif;font-size:12px;color:var(--text-dim)}.settings-card-body{padding-top:8px}.settings-row{display:flex;align-items:center;gap:20px;padding:10px 0}.settings-row-label{width:160px;flex-shrink:0;font-family:IBM Plex Mono,monospace;font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim)}.settings-row-value{flex:1;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.settings-row-hint{font-family:IBM Plex Mono,monospace;font-size:9px;letter-spacing:.1em;color:var(--text-muted)}.settings-chip{padding:8px 14px;background:transparent;border:1px solid rgba(0,0,0,.4);border-radius:5px;color:var(--text-dim);font-family:IBM Plex Mono,monospace;font-size:11px;font-weight:700;letter-spacing:.06em;cursor:pointer}.settings-chip.active{background:var(--plate);border-color:#4dd6c373;color:var(--accent);box-shadow:0 1px #ffffff14 inset,0 1px 3px #0006}.settings-swatch{width:32px;height:32px;border-radius:6px;border:1px solid rgba(0,0,0,.5);cursor:pointer;box-shadow:inset 0 1px #ffffff1a;padding:0}.settings-swatch.active{outline:2px solid #fff;outline-offset:2px;box-shadow:0 0 12px currentColor}.settings-swatch-code{font-family:IBM Plex Mono,monospace;font-size:10px;letter-spacing:.1em;color:var(--text-muted);margin-left:auto}.settings-select{padding:8px 12px;min-width:200px;background:var(--plate);color:var(--text);border:1px solid rgba(0,0,0,.5);border-radius:4px;font-family:IBM Plex Sans,system-ui,sans-serif;font-size:13px;cursor:pointer;box-shadow:inset 0 1px #ffffff0f,0 1px 3px #0006}.settings-select option{background:var(--panel-2)}.settings-btn{padding:10px 16px;background:#00000040;border:1px solid rgba(0,0,0,.4);border-radius:5px;color:var(--text);font-family:IBM Plex Mono,monospace;font-size:11px;font-weight:700;letter-spacing:.1em;cursor:pointer}.settings-btn.primary{background:linear-gradient(180deg,var(--accent),rgba(77,214,195,.67));color:#041513;border-color:#00000080;box-shadow:inset 0 1px #ffffff40,0 2px 4px #00000073,0 0 14px #4dd6c345}.settings-btn.danger{color:var(--red);border-color:#ff6b7a66}.settings-device-list{flex-direction:column;align-items:stretch;gap:6px}.settings-device{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;background:var(--inset);border:1px solid rgba(0,0,0,.4);border-radius:4px;color:var(--text);font-family:IBM Plex Sans,system-ui,sans-serif;font-size:12px;cursor:pointer;text-align:left;box-shadow:inset 0 1px 3px #0006}.settings-device.active{border-color:#4dd6c380;color:var(--accent);box-shadow:inset 0 1px 3px #0006,0 0 10px #4dd6c326}.settings-device-meta{font-family:IBM Plex Mono,monospace;font-size:9px;letter-spacing:.1em;color:var(--text-muted)}.settings-empty{padding:12px 16px;font-size:12px;font-style:italic;color:var(--text-muted)}.settings-mirror{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.settings-mirror-code{background:var(--lcd-bg);color:var(--lcd-text);border:1px solid var(--lcd-border);border-radius:4px;padding:14px 20px;font-family:IBM Plex Mono,monospace;font-size:24px;font-weight:700;letter-spacing:.2em;min-width:220px;text-align:center;box-shadow:inset 0 2px 5px #000000bf,0 1px #ffffff0a}.settings-mirror-help{flex:1;min-width:220px;font-size:12px;color:var(--text-dim);line-height:1.5}.settings-identity-result{font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--lcd-text);background:var(--lcd-bg);border:1px solid var(--lcd-border);border-radius:4px;padding:10px 12px;margin:0;white-space:pre-wrap;box-shadow:inset 0 2px 5px #000000bf}.settings-profile-notes{font-family:IBM Plex Sans,system-ui,sans-serif;font-size:12px;color:var(--text-dim);line-height:1.55}.songs-root{display:flex;flex-direction:column;flex:1;min-height:0;max-width:900px;width:100%;margin:0 auto;padding:20px 16px;gap:16px}.songs-header{display:flex;justify-content:space-between;align-items:flex-end;gap:12px}.songs-title{font-size:22px;font-weight:600}.songs-subtitle{font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--text-muted);letter-spacing:1.5px;text-transform:uppercase;margin-top:4px}.songs-actions{display:flex;gap:8px}.songs-btn{padding:10px 18px;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:14px;font-weight:500;cursor:pointer}.songs-btn.primary{border-color:var(--accent);color:var(--accent)}.songs-btn:active{background:var(--border)}.songs-body{flex:1;min-height:0;overflow-y:auto;border:1px dashed transparent;border-radius:8px;padding:4px;transition:border-color .15s,background .15s}.songs-body.dragging{border-color:var(--accent);background:var(--accent-dim)}.songs-empty{padding:40px 20px;text-align:center;color:var(--text-muted);font-size:14px;font-style:italic}.songs-error{padding:10px 14px;margin-bottom:8px;background:#7a232330;border:1px solid rgba(255,107,122,.4);color:var(--red);border-radius:6px;font-size:13px}.songs-list{display:flex;flex-direction:column;gap:6px}.songs-item{display:flex;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;overflow:hidden}.songs-item-info{flex:1;min-width:0;padding:12px 16px;background:none;border:none;color:var(--text);cursor:pointer;text-align:left}.songs-item-info:active{background:var(--border)}.songs-item-name{font-size:15px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.songs-item-meta{font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--text-muted);margin-top:3px}.songs-item-del{padding:0 16px;background:none;border:none;border-left:1px solid var(--border);color:var(--text-muted);font-size:20px;line-height:1;cursor:pointer}.songs-item-del:hover{color:var(--red)}.mirror-panel{display:flex;flex-direction:column;gap:10px}.mirror-status{display:flex;flex-direction:column;gap:6px;padding:10px 12px;background:var(--surface-2);border:1px solid var(--border);border-radius:6px}.mirror-code{font-family:IBM Plex Mono,monospace;font-size:28px;font-weight:600;letter-spacing:6px;color:var(--accent);text-align:center;padding:6px 0}.mirror-help{font-size:12px;color:var(--text-dim);line-height:1.4}.mirror-help code{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--text);background:var(--surface-3);padding:1px 6px;border-radius:3px}.mirror-peers{font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--text-muted);letter-spacing:1px;text-transform:uppercase}.mirror-client-root{display:flex;flex-direction:column;flex:1;min-height:0;max-width:960px;width:100%;margin:0 auto;border-left:1px solid var(--border);border-right:1px solid var(--border)}.mirror-client-waiting{padding:40px 24px;text-align:center;color:var(--text-dim)}.mirror-client-waiting-title{font-size:18px;font-weight:600;color:var(--text);margin-bottom:8px}.mirror-client-waiting-help{font-size:13px;line-height:1.5;max-width:420px;margin:0 auto}.mirror-client-waiting-help b{color:var(--accent);font-weight:600}.mirror-client-body{display:flex;flex-direction:column;flex:1;min-height:0}.mirror-client-tabs{display:flex;gap:4px;padding:0 16px 8px}.mc-tab{flex:1;padding:11px 8px;background:var(--plate);border:1px solid rgba(0,0,0,.45);border-radius:4px;color:var(--text-dim);font-family:IBM Plex Mono,monospace;font-size:10px;font-weight:700;letter-spacing:.1em;cursor:pointer;box-shadow:0 1px #ffffff0d inset,0 1px 3px #0000004d}.mc-tab.active{color:var(--accent);border-color:#4dd6c366;background:linear-gradient(180deg,#4dd6c333,#4dd6c31a);box-shadow:0 1px #ffffff0d inset,0 0 8px #4dd6c321}.mc-panel{flex:1;min-height:0;display:flex;flex-direction:column;padding:0 8px}.mc-effects{display:flex;flex-direction:column;gap:10px;padding:12px;overflow-y:auto}.mc-effect{padding:12px 14px;background:var(--surface-2);border:1px solid var(--border);border-radius:6px}.mc-effect-label{display:flex;justify-content:space-between;font-size:13px;margin-bottom:8px;color:var(--text)}.mc-effect-value{font-family:IBM Plex Mono,monospace;color:var(--accent)}.mc-effect-range{width:100%;accent-color:var(--accent)}.mc-controls{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;padding:12px;overflow-y:auto}.mc-control{padding:18px 10px;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:14px;font-weight:500;cursor:pointer}.mc-control.active{color:var(--accent);border-color:var(--accent);background:var(--accent-dim)}.mc-channel{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:12px}.mc-channel-btn{aspect-ratio:1;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;color:var(--text-dim);font-family:IBM Plex Mono,monospace;font-size:16px;font-weight:600;cursor:pointer}.mc-channel-btn.active{color:var(--accent);border-color:var(--accent);background:var(--accent-dim)}.mc-trainer{display:flex;flex-direction:column;gap:12px;padding:14px;overflow-y:auto}.mc-trainer-song{font-size:16px;font-weight:600;color:var(--text);padding:12px 14px;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;text-align:center}.mc-trainer-canvas-wrap{position:relative;width:100%;min-height:280px;height:min(50vh,480px);background:var(--bg);border:1px solid var(--border);border-radius:6px;overflow:hidden}.mc-trainer-canvas-wrap canvas{display:block;width:100%;height:100%}.mc-trainer-canvas-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:14px;font-style:italic;background:#0c0c0fcc}.mc-trainer-progress{height:10px;background:var(--surface-2);border:1px solid var(--border);border-radius:5px;cursor:pointer;overflow:hidden}.mc-trainer-progress-fill{height:100%;background:var(--accent);width:0%;transition:width .1s linear}.mc-trainer-time{display:flex;justify-content:space-between;font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--text-dim)}.mc-trainer-transport{display:flex;gap:6px}.mc-trainer-btn{flex:1;padding:14px;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:14px;font-weight:600;letter-spacing:1px;cursor:pointer}.mc-trainer-btn.primary{border-color:var(--accent);color:var(--accent)}.mc-trainer-btn.primary.active{background:var(--accent-dim)}.mc-trainer-row{display:flex;align-items:center;gap:8px}.mc-trainer-row label{font-size:12px;color:var(--text-dim);min-width:60px}.mc-trainer-select{flex:1;padding:10px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:13px}.mc-trainer-toggle{flex:1;padding:10px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text-dim);font-size:12px;font-weight:600;letter-spacing:1px;cursor:pointer}.mc-trainer-toggle.active{color:var(--accent);border-color:var(--accent);background:var(--accent-dim)}.mc-trainer-toggle.muted{opacity:.4}.mc-trainer-library{margin-top:8px}.mc-trainer-library-title{font-family:IBM Plex Mono,monospace;font-size:10px;letter-spacing:1.5px;color:var(--text-muted);text-transform:uppercase;margin-bottom:6px}.mc-trainer-library-list{display:flex;flex-direction:column;gap:4px;max-height:240px;overflow-y:auto}.mc-trainer-library-empty{padding:10px;color:var(--text-muted);font-size:12px;font-style:italic}.mc-trainer-library-item{padding:10px 12px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:13px;text-align:left;cursor:pointer}.mc-trainer-library-item.active{color:var(--accent);border-color:var(--accent);background:var(--accent-dim)}.mc-songs{flex:1;display:flex;flex-direction:column;gap:10px;overflow:hidden;padding-top:4px}.mc-songs-controls{display:flex;gap:8px}.mc-songs-search{flex:1;padding:10px 14px;background:var(--inset);border:1px solid rgba(0,0,0,.4);border-radius:4px;color:var(--text);font-family:IBM Plex Sans,system-ui,sans-serif;font-size:13px;outline:none;box-shadow:inset 0 1px 3px #0009}.mc-songs-list{flex:1;background:var(--inset);border-radius:5px;overflow:auto;box-shadow:inset 0 2px 6px #000000b3}.mc-songs-empty{padding:24px;text-align:center;font-size:13px;font-style:italic;color:var(--text-muted)}.mc-songs-item{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:11px 14px;background:transparent;border:none;border-left:3px solid transparent;border-bottom:1px solid rgba(255,255,255,.03);color:var(--text);text-align:left;cursor:pointer}.mc-songs-item.active{background:linear-gradient(90deg,rgba(77,214,195,.13),transparent);border-left-color:var(--accent)}.mc-songs-item-name{flex:1;min-width:0;font-family:IBM Plex Sans,system-ui,sans-serif;font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mc-songs-item-meta{font-family:IBM Plex Mono,monospace;font-size:10px;color:var(--text-muted);letter-spacing:.05em}.mc-songs-load{height:44px;border-radius:5px;background:linear-gradient(180deg,var(--accent),rgba(77,214,195,.67));color:#041513;border:1px solid rgba(0,0,0,.5);font-family:IBM Plex Mono,monospace;font-size:12px;font-weight:700;letter-spacing:.12em;cursor:pointer;box-shadow:inset 0 1px #ffffff40,0 2px 4px #00000073,0 0 14px #4dd6c345}.mc-settings{flex:1;display:flex;flex-direction:column;gap:10px;overflow:auto;padding-top:4px}.mc-set-section-label{font-family:IBM Plex Mono,monospace;font-size:9px;font-weight:700;color:var(--accent);letter-spacing:.14em;padding:6px 2px 0}.mc-set-card{background:var(--inset);border:1px solid rgba(0,0,0,.4);border-radius:5px;box-shadow:inset 0 2px 4px #0009}.mc-set-row{display:flex;align-items:center;gap:12px;padding:12px 14px;border-bottom:1px solid rgba(255,255,255,.04)}.mc-set-row:last-child{border-bottom:none}.mc-set-row.disabled{opacity:.45;pointer-events:none}.mc-set-row-main{flex:1;min-width:0}.mc-set-row-label{font-family:IBM Plex Sans,system-ui,sans-serif;font-size:13px;font-weight:600;color:var(--text)}.mc-set-row-hint{font-family:IBM Plex Mono,monospace;font-size:9px;letter-spacing:.08em;color:var(--text-muted);margin-top:2px}.mc-set-select{padding:7px 10px;min-width:130px;background:#0006;color:var(--accent);border:1px solid rgba(77,214,195,.33);border-radius:4px;font-family:IBM Plex Mono,monospace;font-size:11px;font-weight:700;letter-spacing:.05em;cursor:pointer}.mc-set-toggle{width:40px;height:22px;border-radius:11px;background:#00000080;box-shadow:inset 0 1px 3px #0009;border:none;cursor:pointer;position:relative;transition:background .15s}.mc-set-toggle:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:linear-gradient(180deg,#e8ebef,#b8bdc4);box-shadow:0 1px 2px #00000080,inset 0 1px #fff9;transition:left .15s}.mc-set-toggle.on{background:var(--accent);box-shadow:inset 0 1px 3px #00000059,0 0 10px #4dd6c354}.mc-set-toggle.on:after{left:20px}.mc-set-footer{padding:8px 2px 2px;font-family:IBM Plex Mono,monospace;font-size:9px;color:var(--text-muted);letter-spacing:.08em;line-height:1.6}.mirror-client-header{display:flex;justify-content:space-between;align-items:center;padding:14px 22px;background:var(--panel);border-bottom:1px solid rgba(0,0,0,.5)}.mirror-client-brand-col{display:flex;flex-direction:column;gap:4px}.mirror-client-brand{display:flex;align-items:center;gap:8px;font-family:IBM Plex Sans,system-ui,sans-serif;font-size:16px;font-weight:700;letter-spacing:-.01em;color:var(--text)}.mirror-client-brand-badge{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:5px;background:linear-gradient(135deg,var(--accent),var(--accent-bright));box-shadow:0 0 10px #4dd6c354,inset 0 1px #ffffff4d;font-family:IBM Plex Mono,monospace;font-weight:800;font-size:12px;color:#041513}.mirror-client-version{font-family:IBM Plex Mono,monospace;font-size:10px;font-weight:400;color:var(--text-muted);letter-spacing:.1em}.mirror-client-status{font-family:IBM Plex Mono,monospace;font-size:9px;font-weight:700;letter-spacing:.16em;color:var(--text-muted);text-transform:uppercase}.mirror-client-status.connected{color:var(--success)}.mirror-client-code{font-family:IBM Plex Mono,monospace;font-size:13px;color:var(--text-dim);letter-spacing:.08em}.mirror-client-header-right{display:flex;align-items:center;gap:12px}.mirror-client-keys{padding:6px 8px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-family:IBM Plex Mono,monospace;font-size:12px}.mirror-client-lcd{margin:12px 16px;padding:14px 16px;background:var(--lcd-bg);border:1px solid var(--lcd-border);border-radius:6px;color:var(--lcd-text);font-family:IBM Plex Mono,monospace}.mirror-client-footer{margin-top:auto;padding:10px 16px;border-top:1px solid var(--border);font-family:IBM Plex Mono,monospace;font-size:10px;color:var(--text-muted);letter-spacing:1.5px;text-transform:uppercase;text-align:center}.controller-root{display:flex;flex-direction:column;flex:1;min-height:0;max-width:1100px;width:100%;margin:0 auto;padding:0 16px}.header{padding:14px 16px 10px;border-bottom:1px solid var(--border);background:linear-gradient(180deg,#141414,var(--surface));flex-shrink:0}.header-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.brand-label{font-family:IBM Plex Mono,monospace;font-size:10px;letter-spacing:5px;color:var(--text-muted);font-weight:300}.brand-name{font-family:IBM Plex Sans,system-ui,sans-serif;font-size:24px;font-weight:700;color:var(--accent);letter-spacing:-.01em;line-height:1.1}.profile-select{padding:8px 12px;background:var(--plate);color:var(--text);border:1px solid rgba(0,0,0,.5);border-radius:4px;font-family:IBM Plex Sans,system-ui,sans-serif;font-size:12px;cursor:pointer;box-shadow:inset 0 1px #ffffff0f,0 1px 3px #0006}.lcd{margin-top:12px;background:var(--lcd-bg);border:1px solid var(--lcd-border);border-radius:4px;padding:12px 16px;box-shadow:inset 0 2px 5px #000000bf,0 1px #ffffff0a;position:relative;overflow:hidden;font-family:IBM Plex Mono,monospace;color:var(--lcd-text)}.lcd:before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,0,0,.06) 2px,rgba(0,0,0,.06) 4px);pointer-events:none}.lcd-row{display:flex;justify-content:space-between;align-items:baseline}.lcd-label{font-family:IBM Plex Mono,monospace;font-size:10px;color:var(--lcd-text);opacity:.6;letter-spacing:.18em;font-weight:600}.lcd-patch{font-family:IBM Plex Mono,monospace;font-size:22px;font-weight:600;color:var(--lcd-text);margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lcd-midi-info{margin-top:6px;font-family:IBM Plex Mono,monospace;font-size:9px;color:var(--lcd-text);opacity:.55;letter-spacing:.14em;display:flex;gap:14px}.bank-bar{display:flex;border-bottom:1px solid var(--border);flex-shrink:0;overflow-x:auto;scrollbar-width:none}.bank-bar::-webkit-scrollbar{display:none}.bank-btn{flex:1 0 auto;min-width:44px;padding:11px 4px;background:transparent;color:var(--text-dim);border:none;border-bottom:2px solid transparent;font-family:IBM Plex Mono,monospace;font-size:10px;font-weight:400;letter-spacing:1px;cursor:pointer}.bank-btn:active{background:var(--surface-2)}.bank-btn.active{color:var(--accent);font-weight:700;border-bottom-color:var(--accent);background:var(--accent-dim)}.tab-bar{display:flex;border-bottom:1px solid var(--border);flex-shrink:0}.tab-btn{flex:1;padding:10px;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--text-muted);font-family:IBM Plex Mono,monospace;font-size:10px;font-weight:600;letter-spacing:2px;cursor:pointer}.tab-btn.active{color:var(--accent);border-bottom-color:var(--accent);background:var(--surface-2)}.patch-list{flex:1;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:6px 2px;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:6px;align-content:start}.patch-item{display:flex;align-items:center;width:100%;padding:10px 12px;background:#0003;border:1px solid rgba(0,0,0,.35);border-radius:4px;border-left:3px solid transparent;color:var(--text-dim);cursor:pointer;font-family:IBM Plex Sans,system-ui,sans-serif;font-size:13px;font-weight:400;text-align:left;gap:10px}.patch-item:active{background:var(--surface-2)}.patch-item.active{background:linear-gradient(90deg,var(--accent-dim),transparent);border-left-color:var(--accent);color:#fff;font-weight:600}.patch-num{font-family:IBM Plex Mono,monospace;font-size:10px;color:var(--text-muted);font-weight:500;min-width:32px;font-variant-numeric:tabular-nums}.patch-item.active .patch-num{color:var(--accent)}.patch-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.effects-panel,.controls-panel,.settings-panel{flex:1;overflow-y:auto;padding:20px 16px}.fx-sliders{display:flex;gap:14px;flex-wrap:wrap;justify-content:center;padding:0 4px}.fx-slider{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;width:60px}.fx-label{font-family:IBM Plex Mono,monospace;font-size:9px;letter-spacing:2px;margin-bottom:6px;text-transform:uppercase}.fx-track{position:relative;width:36px;height:140px;background:var(--bg);border-radius:5px;border:1px solid var(--border-light);overflow:hidden;cursor:pointer;touch-action:none}.fx-fill{position:absolute;bottom:0;left:0;right:0;transition:height .05s;border-radius:0 0 4px 4px}.fx-thumb{position:absolute;left:0;right:0;height:3px;transition:bottom .05s}.fx-value{font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:600;margin-top:8px;color:#fff}.fx-cc{font-family:IBM Plex Mono,monospace;font-size:9px;color:var(--text-muted);margin-top:3px}.controls-list{display:flex;flex-direction:column;gap:8px}.control-toggle{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text-dim);font-family:IBM Plex Mono,monospace;font-size:12px;letter-spacing:1px;cursor:pointer}.control-toggle.active{color:var(--accent);border-color:var(--accent);background:var(--accent-dim)}.control-cc{color:var(--text-muted);font-size:10px}.control-state{font-weight:700}.no-controls{text-align:center;color:var(--text-muted);padding:20px;font-size:13px}.setting-group{margin-bottom:24px}.setting-label{font-family:IBM Plex Mono,monospace;font-size:9px;letter-spacing:2px;color:var(--text-muted);text-transform:uppercase;margin-bottom:10px}.setting-options{display:flex;flex-wrap:wrap;gap:6px}.setting-opt{padding:8px 14px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text-dim);font-family:IBM Plex Mono,monospace;font-size:12px;cursor:pointer}.setting-opt:active{background:var(--surface-3)}.setting-opt.active{color:var(--accent);border-color:var(--accent);background:var(--accent-dim)}.identity-btn{display:block;width:100%;padding:12px 16px;background:#00000040;border:1px solid rgba(0,0,0,.4);border-radius:4px;color:var(--text);font-family:IBM Plex Mono,monospace;font-size:11px;font-weight:700;letter-spacing:.1em;cursor:pointer}.identity-btn:active{background:var(--surface-3)}.identity-result{margin-top:10px;padding:12px;background:var(--lcd-bg);border:1px solid var(--lcd-border);border-radius:4px;font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--lcd-text);white-space:pre-wrap}.profile-notes{padding:10px 12px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;font-size:12px;color:var(--text-dim);line-height:1.5}.device-list{display:flex;flex-direction:column;gap:6px}.device-item{display:flex;justify-content:space-between;align-items:center;padding:12px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;text-align:left;color:var(--text);cursor:pointer;font-family:IBM Plex Sans,system-ui,sans-serif}.device-item:active{background:var(--surface-3)}.device-item.active{border-color:var(--green);background:#81c78414}.device-name{font-size:13px;color:var(--text)}.device-id{font-family:IBM Plex Mono,monospace;font-size:9px;color:var(--text-muted);margin-top:2px}.device-check{color:var(--green);font-size:16px;font-weight:700}.no-devices{padding:12px;text-align:center;color:var(--text-muted);font-size:12px}.footer{padding:8px 16px;padding-bottom:calc(8px + var(--safe-bottom));border-top:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;flex-shrink:0;font-family:IBM Plex Mono,monospace;font-size:9px;color:var(--text-muted);letter-spacing:1px}.midi-activity{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--text-muted);margin-right:6px;transition:all .1s}.midi-activity.flash{background:var(--accent);box-shadow:0 0 6px var(--accent)}
