:root{--max: 1180px;--radius: 4px;--gap: 11px;--tab: 108px;--sans: "IBM Plex Sans", system-ui, -apple-system, sans-serif;--display: "Michroma", var(--sans);--ch1: #3bbdae;--ch2: #d96e96;--ch3: #d9a445;--led-relay: #ff3f33}html[data-theme=slate]{--face: #374a54;--face-hi: #435760;--face-lo: #2c3e48;--engrave: #203039;--recess: #283a44;--slot: #7e8476;--work: #22333c;--work-2: #1a2830;--line: #324751;--silk: #e7ebed;--silk-dim: #b3bcc0;--silk-low: #99a2a6;--ink: #e7ebed;--muted: #a6afb3;--accent: #4cc6bc;--led-on: #57d98a;--led-warn: #e8b24a;--danger: #ec6a5c}html[data-theme=black]{--face: #1c1c1c;--face-hi: #2c2e31;--face-lo: #16181a;--engrave: #101213;--recess: #0d0e0f;--slot: #383d31;--work: #17191b;--work-2: #0f1113;--line: #2b2e31;--silk: #d6d9db;--silk-dim: #939799;--silk-low: #6b7073;--ink: #dcdfe1;--muted: #8b9092;--accent: #46b8af;--led-on: #4fce82;--led-warn: #d9a64a;--danger: #e06151}*{box-sizing:border-box}html,body{height:100%}body{margin:0;font-family:var(--sans);font-size:15px;color:var(--ink);background:#0f1113;-webkit-font-smoothing:antialiased}.app{max-width:var(--max);margin:0 auto;padding:18px 16px 40px}.alert-banner{display:flex;align-items:center;gap:11px;background:color-mix(in srgb,var(--danger) 14%,var(--face));border:1px solid var(--danger);border-radius:6px;padding:12px 15px;margin-bottom:var(--gap);color:var(--silk);font-size:14px;line-height:1.45;animation:alert-pop .18s ease-out}.alert-banner strong{color:var(--danger)}.alert-icon{flex:0 0 auto;width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:var(--danger);color:#1a0c0a;font-weight:700;font-size:14px}.alert-banner.warn{background:color-mix(in srgb,var(--led-warn) 14%,var(--face));border-color:var(--led-warn)}.alert-banner.warn strong{color:var(--led-warn)}.alert-banner.warn .alert-icon{background:var(--led-warn)}@keyframes alert-pop{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.brand{display:flex;align-items:center;flex-wrap:wrap;gap:10px 16px;background:var(--face);border:1px solid var(--face-lo);border-radius:6px;padding:13px 16px;margin-bottom:var(--gap)}.brand-controls{display:flex;align-items:center;flex-wrap:wrap;gap:10px 12px;margin-left:auto}.app-name{--cut: 3px;--gap: 2px;--edge: .12em;--gap-keep: .42;font-family:var(--display);font-size:24px;letter-spacing:.03em;color:var(--silk);line-height:1;margin:0;-webkit-mask-image:repeating-linear-gradient(180deg,#000 0 var(--cut),rgba(0,0,0,var(--gap-keep)) var(--cut) calc(var(--cut) + var(--gap))),linear-gradient(180deg,#000 0 var(--edge),transparent var(--edge) calc(100% - var(--edge)),#000 calc(100% - var(--edge)));mask-image:repeating-linear-gradient(180deg,#000 0 var(--cut),rgba(0,0,0,var(--gap-keep)) var(--cut) calc(var(--cut) + var(--gap))),linear-gradient(180deg,#000 0 var(--edge),transparent var(--edge) calc(100% - var(--edge)),#000 calc(100% - var(--edge)));-webkit-mask-composite:source-over;mask-composite:add}.tagline{font:400 13px/1 var(--sans);color:var(--silk-dim);letter-spacing:.01em;padding-left:16px;border-left:1px solid var(--face-lo)}.brand .spacer{flex:1}.finish{display:inline-flex;border:1px solid var(--engrave);border-radius:var(--radius);overflow:hidden;background:var(--recess)}.finish button{font:500 12px/1 var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--silk-dim);background:transparent;border:0;padding:7px 11px;cursor:pointer}.finish button+button{border-left:1px solid var(--engrave)}.finish button:not([aria-pressed=true]):hover{color:var(--silk);background:var(--face-lo)}.finish button[aria-pressed=true]{background:var(--face-hi);color:var(--silk);box-shadow:inset 0 0 0 1px var(--line)}.lang{display:inline-flex;border:1px solid var(--engrave);border-radius:var(--radius);overflow:hidden;background:var(--recess)}.lang button{font:500 12px/1 var(--sans);letter-spacing:.06em;color:var(--silk-dim);background:transparent;border:0;padding:7px 11px;cursor:pointer}.lang button+button{border-left:1px solid var(--engrave)}.lang button:not([aria-pressed=true]):hover{color:var(--silk);background:var(--face-lo)}.lang button[aria-pressed=true]{background:var(--face-hi);color:var(--silk);box-shadow:inset 0 0 0 1px var(--line)}.btn{font:500 14px/1 var(--sans);letter-spacing:.01em;color:var(--silk);background:var(--face-hi);border:1px solid var(--engrave);border-radius:var(--radius);padding:9px 13px;cursor:pointer;display:inline-flex;align-items:center;gap:7px}.btn:hover:not(:disabled){background:var(--face);border-color:var(--silk-low)}.btn:active:not(:disabled){background:var(--face-lo)}.btn.primary{color:#07211e;background:var(--accent);border-color:#2f8a82;font-weight:600}.btn.primary:hover:not(:disabled){background:#57d2c8}.btn:disabled{opacity:.45;cursor:default}.module{display:flex;background:var(--face);border:1px solid var(--face-lo);border-radius:6px;margin-bottom:var(--gap)}.tab{flex:0 0 var(--tab);width:var(--tab);background:var(--recess);border-right:1px solid var(--engrave);border-radius:5px 0 0 5px;display:flex;flex-direction:column;gap:8px;padding:13px}.tab .tab-num{font-weight:600;font-size:15px;color:var(--accent);border:1px solid var(--line);border-radius:var(--radius);padding:2px 8px;background:var(--work-2);align-self:flex-start}.tab .tab-name{font-size:15px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--silk);white-space:nowrap}:lang(ja) .tab .tab-name{letter-spacing:0;text-transform:none}.module-main{flex:1 1 auto;min-width:0}.module-head{display:flex;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--engrave)}.module-hint{font-size:15px;color:var(--silk-dim)}.module-summary{font-size:15px;color:var(--silk-dim);margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.module-summary b{color:var(--ink);font-weight:500}.module-body{padding:12px}.module-body.inactive{opacity:.55}.capacity{display:inline-flex;align-items:center;gap:9px;overflow:visible}.cap-label{font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--silk-dim)}.cap-bar{width:130px;height:8px;border-radius:999px;background:var(--work-2);border:1px solid var(--line);overflow:hidden}.cap-fill{display:block;height:100%;border-radius:999px;background:var(--accent);transition:width .2s}.cap-fill.warn{background:var(--led-warn)}.cap-fill.full{background:var(--led-relay)}.cap-pct{font-size:13px;color:var(--silk-dim);font-variant-numeric:tabular-nums;min-width:36px;text-align:right}.panel{background:var(--work);border:1px solid var(--line);border-radius:5px;padding:12px}.panel-label{font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--silk-dim);margin:0 0 10px}.field{display:flex;flex-direction:column;gap:5px}.field>span{font-size:13px;letter-spacing:.08em;text-transform:uppercase;color:var(--silk-dim)}select,input[type=number],input[type=text]{font:400 15px var(--sans);color:var(--ink);background:var(--work-2);border:1px solid var(--line);border-radius:var(--radius);padding:8px 9px;width:100%}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 15px) 53%,calc(100% - 10px) 53%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:26px}select:disabled,input:disabled{opacity:.5}.patch-row{display:flex;align-items:stretch;gap:6px}.patch-row select{flex:1;min-width:0}.preview-btn{flex:0 0 auto;width:38px;padding:0;display:inline-flex;align-items:center;justify-content:center;background:var(--face-hi);border:1px solid var(--engrave);border-radius:var(--radius);color:var(--silk);cursor:pointer}.preview-btn:hover:not(:disabled){background:var(--face)}.preview-btn:disabled{opacity:.45;cursor:default}.preview-btn.active{background:var(--accent);color:#07211e;border-color:#2f8a82}.preview-btn svg{width:18px;height:18px;display:block;fill:currentColor}.preview-spinner{width:16px;height:16px;border-radius:50%;border:2px solid #2c3140;border-top-color:#3bbdae;animation:render-spin .8s linear infinite}.infotip{position:relative;display:inline-flex;vertical-align:middle}.infotip-btn{width:15px;height:15px;border-radius:50%;padding:0;display:inline-flex;align-items:center;justify-content:center;font:600 10px/1 var(--sans);text-transform:none;letter-spacing:0;color:var(--silk-dim);background:var(--work-2);border:1px solid var(--line);cursor:help}.infotip-btn:hover{color:var(--silk);border-color:var(--accent)}.infotip-bubble{position:absolute;bottom:calc(100% + 7px);left:50%;transform:translate(-50%);width:max-content;max-width:240px;background:var(--recess);color:var(--ink);border:1px solid var(--line);border-radius:5px;padding:8px 10px;font:400 13px/1.45 var(--sans);text-transform:none;letter-spacing:0;text-align:left;box-shadow:0 6px 18px -6px #0009;opacity:0;visibility:hidden;transition:opacity .12s;pointer-events:none;z-index:5}.infotip:hover .infotip-bubble,.infotip:focus-within .infotip-bubble{opacity:1;visibility:visible}.source-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}.source-head .panel-label{margin:0}.source-head .row{display:flex;gap:8px;flex-wrap:wrap}.source-grid{max-width:460px}.source-grid dd{overflow-wrap:anywhere}.bank-list{display:flex;flex-direction:column;gap:7px}.bank{display:flex;align-items:center;gap:11px;background:var(--work-2);border:1px solid var(--line);border-radius:var(--radius);padding:9px 11px}.bank .kind{font-size:12px;color:var(--accent);border:1px solid var(--line);border-radius:3px;padding:2px 5px;min-width:48px;text-align:center}.bank .name{font-size:15px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bank .count{margin-left:auto;font-size:13px;color:var(--muted);white-space:nowrap}.bank-remove{font-size:12px;color:var(--muted);cursor:pointer;background:none;border:1px solid var(--line);border-radius:3px;padding:2px 7px}.bank-remove:hover{color:var(--ink);border-color:var(--accent)}.bank-locked{font-size:12px;color:var(--muted);font-style:italic}.strips{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap)}.strip{background:var(--work);border:1px solid var(--line);border-radius:5px;border-top:2px solid var(--strip-color);padding:12px;display:flex;flex-direction:column;gap:11px}.strip-head{display:flex;align-items:center;gap:9px}.strip-dot{width:11px;height:11px;border-radius:50%;background:var(--strip-color);box-shadow:0 0 0 3px color-mix(in srgb,var(--strip-color) 18%,transparent)}.strip-name{font-weight:600;font-size:15px;letter-spacing:.1em;color:var(--silk)}.strip-range{font-size:13px;color:var(--muted);border-top:1px dashed var(--line);padding-top:9px}.strip-range b{color:var(--strip-color);font-weight:500}.strip-static{font:400 15px var(--sans);color:var(--muted);background:var(--work-2);border:1px solid var(--line);border-radius:var(--radius);padding:8px 9px}.param-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:11px}.param-grid .field.wide{grid-column:1 / -1}@media (max-width: 760px){.param-grid{grid-template-columns:repeat(2,1fr)}}.inline-auto{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.inline-auto label{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--muted)}.inline-auto input[type=number]{width:82px}.inline-auto .unit-note{font-size:13px;color:var(--silk-dim)}.card-options{margin-top:14px;display:flex;flex-direction:column;gap:9px}.opt-label{font-size:13px;letter-spacing:.08em;text-transform:uppercase;color:var(--silk-dim)}.opt-toggle{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--ink)}.opt-toggle input[type=checkbox]{flex:none;margin:0}.alert-banner.build-warn{margin:14px 0 0}.build-row{margin-top:14px;display:flex;align-items:center;gap:11px;flex-wrap:wrap}.player-row{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:var(--gap);align-items:stretch}@media (max-width: 900px){.player-row{grid-template-columns:1fr}}.player-main{display:flex;flex-direction:column;gap:var(--gap)}.transport{display:flex;align-items:center;flex-wrap:wrap;gap:10px 12px;background:var(--work);border:1px solid var(--line);border-radius:5px;padding:10px 12px}.transport .spacer{min-width:0}.tbtn{width:42px;height:42px;border-radius:var(--radius);display:inline-flex;align-items:center;justify-content:center;background:var(--face-hi);border:1px solid var(--engrave);color:var(--silk);cursor:pointer}.tbtn svg{width:22px;height:22px;display:block;fill:currentColor}.tbtn:disabled{opacity:.45;cursor:default}.tbtn.play{background:var(--accent);color:#07211e;border-color:#2f8a82}.tbtn.small{width:28px;height:28px;border-radius:4px;font-size:18px;line-height:1}.tempo{display:inline-flex;align-items:center;gap:8px}.tempo-label{font-size:13px;color:var(--silk-dim);letter-spacing:.08em;text-transform:uppercase}.tempo-readout{display:inline-flex;flex-direction:column;align-items:center;line-height:1.1;min-width:56px}.tempo-pos{font-size:14px;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}.tempo-hz{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.time{font-size:16px;color:var(--ink);font-variant-numeric:tabular-nums}.time .total{color:var(--muted)}.transport .spacer{flex:1}.status-led{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--silk-dim);letter-spacing:.08em}.status-led.muted{opacity:.4}.led{width:8px;height:8px;border-radius:50%;background:var(--led-on)}.led.relay{background:#3a3d42;opacity:1}.led.relay.on{background:var(--led-relay);box-shadow:0 0 7px var(--led-relay)}.status{font-size:13px;color:var(--muted)}.status.error{color:var(--danger)}.scope{background:#12151a;border:1px solid #000;border-radius:5px;padding:5px;overflow:hidden;position:relative;flex:1;display:flex}.render-overlay{position:absolute;top:5px;right:5px;bottom:5px;left:5px;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;border-radius:3px;background:#12151ac7;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}.render-spinner{width:26px;height:26px;border-radius:50%;border:3px solid #2c3140;border-top-color:#3bbdae;animation:render-spin .8s linear infinite}.render-label{font-size:12px;color:#cdd2da;letter-spacing:.04em}.render-bar{width:160px;max-width:60%;height:4px;border-radius:2px;background:#2c3140;overflow:hidden}.render-fill{display:block;height:100%;background:#3bbdae;transition:width .1s linear}@keyframes render-spin{to{transform:rotate(360deg)}}.piano-roll{position:relative;width:100%;flex:1;min-height:220px;border-radius:3px;overflow:hidden}.piano-roll canvas{position:absolute;top:0;left:0}.card-info{background:var(--work);border:1px solid var(--line);border-radius:5px;padding:12px}.info-grid{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;margin:0;font-size:14px}.info-grid dt{color:var(--silk-dim)}.info-grid dd{margin:0;color:var(--ink);font-variant-numeric:tabular-nums}.chan-list{display:flex;flex-direction:column;gap:7px}.chan-row{display:flex;align-items:center;gap:9px;font-size:14px}.chan-dot{width:11px;height:11px;border-radius:50%;flex:0 0 auto}.chan-name{font-weight:600;color:var(--silk)}.chan-detail{color:var(--muted)}.chan-detail.muted{opacity:.6}.warnings{margin:12px 0 0;padding:10px 12px 10px 26px;background:color-mix(in srgb,var(--led-warn) 9%,transparent);border:1px solid color-mix(in srgb,var(--led-warn) 30%,transparent);border-radius:5px;color:var(--led-warn);font-size:13px}.warnings li{margin:2px 0}.rack-foot{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding:8px 4px 0}.rack-foot .foot-mt-note{flex-basis:100%;margin-top:8px;font-size:12px;opacity:.7;line-height:1.5;letter-spacing:.04em}.rack-foot span{font-size:13px;color:var(--silk-low);letter-spacing:.08em}.foot-ver{font-size:12px;font-family:var(--mono, monospace);opacity:.7}.foot-links{display:flex;gap:18px}.foot-links a{font-size:13px;color:var(--silk-low);letter-spacing:.08em;text-decoration:none}.foot-links a:hover{color:var(--silk)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (max-width: 900px){.strips{grid-template-columns:1fr}.module{flex-direction:column}.tab{flex-basis:auto;width:100%;flex-direction:row;align-items:center;gap:10px;border-right:0;border-bottom:1px solid var(--engrave);border-radius:5px 5px 0 0;padding:10px 14px}}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}
