.midirouter-container { padding: 1rem; display: flex; flex-direction: column; gap: 1rem; } .midirouter-title { margin: 0 0 0.5rem 0; font-size: 1.25rem; font-weight: 600; } .port-selection { display: flex; flex-wrap: wrap; gap: 1rem; align-items: flex-end; } .port-group { display: flex; flex-direction: column; gap: 0.25rem; flex: 1; min-width: 200px; } .port-group label { font-weight: 500; font-size: 0.875rem; } .port-group select { padding: 0.5rem; padding-right: 2rem; border-radius: 4px; border: 1px solid var(--border-color-primary, #ccc); background: var(--background-fill-primary, white); font-size: 0.875rem; /* Draw our own chevron so the dropdown affordance is visible even when a host theme strips the native one. */ appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5' fill='none' stroke='%23888' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.65rem center; background-size: 0.7rem; cursor: pointer; } .speaker-toggle { display: flex; align-items: center; padding-bottom: 0.5rem; } .speaker-toggle label { display: flex; align-items: center; gap: 0.5rem; font-weight: 500; font-size: 0.875rem; cursor: pointer; white-space: nowrap; } .speaker-toggle input[type="checkbox"] { width: 1rem; height: 1rem; cursor: pointer; } .status-panel { padding: 1rem; border-radius: 8px; font-size: 0.875rem; } .status-pending { background: var(--color-yellow-100, #fef9c3); color: var(--color-yellow-800, #854d0e); } .status-error { background: var(--color-red-100, #fee2e2); color: var(--color-red-800, #991b1b); } .status-info { background: var(--background-fill-secondary, #f5f5f5); display: flex; flex-direction: column; gap: 0.5rem; } .status-row { display: flex; gap: 0.5rem; } .status-label { font-weight: 500; min-width: 100px; } .processing-progress { display: flex; align-items: center; gap: 0.5rem; flex: 1; } .processing-progress-track { flex: 1; height: 6px; border-radius: 3px; background: var(--border-color-primary, #ddd); overflow: hidden; } .processing-progress-fill { height: 100%; background: var(--color-accent, #2563eb); transition: width 0.1s linear; } .processing-progress-label { font-size: 0.75rem; font-family: monospace; color: var(--body-text-color-subdued, #666); white-space: nowrap; } .status-recording { color: var(--color-red-600, #dc2626); font-weight: 600; } .status-playing { color: var(--color-green-600, #16a34a); font-weight: 600; } .control-buttons { display: flex; flex-wrap: wrap; gap: 0.5rem; } .btn { padding: 0.5rem 1rem; border-radius: 6px; border: none; cursor: pointer; font-size: 0.875rem; font-weight: 500; transition: opacity 0.2s; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } .btn-primary { background: var(--color-accent, #2563eb); color: white; } .btn-primary:hover:not(:disabled) { background: var(--color-accent-soft, #1d4ed8); } .btn-secondary { background: var(--background-fill-secondary, #e5e5e5); color: var(--body-text-color, #333); } .btn-secondary:hover:not(:disabled) { background: var(--background-fill-primary, #d4d4d4); } .btn-warning { background: var(--color-yellow-500, #eab308); color: white; } .btn-warning:hover:not(:disabled) { background: var(--color-yellow-600, #ca8a04); } .btn-danger { background: var(--color-red-500, #ef4444); color: white; } .btn-danger:hover:not(:disabled) { background: var(--color-red-600, #dc2626); } .info-panel { padding: 1rem; background: var(--background-fill-secondary, #f5f5f5); border-radius: 8px; font-size: 0.8rem; color: var(--body-text-color-subdued, #666); } .info-panel p { margin: 0 0 0.5rem 0; } .info-panel p:last-child { margin-bottom: 0; } .bpm-info { font-family: monospace; }