feat(controller): add inline remap modal with descriptor-based bindings (#21)

This commit is contained in:
2026-03-15 15:55:45 -07:00
committed by GitHub
parent 9eed37420e
commit 478869ff28
38 changed files with 3136 additions and 1431 deletions

View File

@@ -1105,6 +1105,197 @@ iframe[id^='yomitan-popup'] {
color: #ff8f8f;
}
.controller-select-field {
display: flex;
flex-direction: column;
gap: 6px;
margin-bottom: 12px;
font-size: 13px;
color: rgba(255, 255, 255, 0.88);
}
.controller-select-field select {
min-height: 38px;
padding: 8px 10px;
border: 1px solid rgba(255, 255, 255, 0.14);
border-radius: 8px;
background: rgba(10, 14, 20, 0.9);
color: rgba(255, 255, 255, 0.94);
}
.controller-select-summary {
margin-bottom: 12px;
font-size: 12px;
color: rgba(255, 255, 255, 0.7);
}
.controller-config-list {
display: flex;
flex-direction: column;
max-height: 400px;
overflow-y: auto;
margin-bottom: 12px;
scrollbar-width: thin;
scrollbar-color: rgba(255, 255, 255, 0.15) transparent;
}
.controller-config-group {
margin-top: 14px;
padding-bottom: 6px;
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
font-size: 11px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: rgba(120, 190, 255, 0.9);
}
.controller-config-group:first-child {
margin-top: 0;
}
.controller-config-row {
display: flex;
align-items: center;
padding: 8px 10px;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
background: transparent;
cursor: pointer;
transition: background 120ms ease;
}
.controller-config-row:last-child {
border-bottom: none;
}
.controller-config-row:hover {
background: rgba(255, 255, 255, 0.04);
}
.controller-config-row.expanded {
background: rgba(100, 180, 255, 0.06);
border-color: rgba(100, 180, 255, 0.15);
}
.controller-config-label {
flex: 1;
min-width: 0;
font-size: 13px;
color: rgba(255, 255, 255, 0.95);
}
.controller-config-right {
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
}
.controller-config-badge {
display: inline-block;
padding: 2px 8px;
border-radius: 4px;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.02em;
background: rgba(100, 180, 255, 0.12);
color: rgba(100, 180, 255, 0.95);
white-space: nowrap;
}
.controller-config-badge.disabled {
background: rgba(255, 255, 255, 0.06);
color: rgba(255, 255, 255, 0.4);
}
.controller-config-edit-icon {
font-size: 14px;
color: rgba(255, 255, 255, 0.3);
transition: color 120ms ease;
}
.controller-config-row:hover .controller-config-edit-icon {
color: rgba(255, 255, 255, 0.6);
}
.controller-config-edit-panel {
overflow: hidden;
animation: configEditSlideIn 180ms ease-out;
border-bottom: 1px solid rgba(100, 180, 255, 0.12);
background: rgba(100, 180, 255, 0.04);
}
@keyframes configEditSlideIn {
from { max-height: 0; opacity: 0; }
to { max-height: 120px; opacity: 1; }
}
.controller-config-edit-inner {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 8px 12px;
}
.controller-config-edit-hint {
font-size: 12px;
color: rgba(255, 255, 255, 0.6);
}
.controller-config-edit-hint.learning {
color: rgba(100, 180, 255, 0.95);
animation: configLearnPulse 1.2s ease-in-out infinite;
}
@keyframes configLearnPulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.6; }
}
.controller-config-edit-actions {
display: flex;
gap: 6px;
flex-shrink: 0;
}
.btn-learn {
padding: 5px 14px;
border-radius: 5px;
border: 1px solid rgba(100, 180, 255, 0.4);
background: rgba(100, 180, 255, 0.15);
color: rgba(100, 180, 255, 0.95);
font-size: 12px;
font-weight: 600;
cursor: pointer;
transition: background 120ms ease;
}
.btn-learn:hover {
background: rgba(100, 180, 255, 0.25);
}
.btn-learn.active {
border-color: rgba(100, 180, 255, 0.7);
background: rgba(100, 180, 255, 0.25);
}
.btn-secondary {
padding: 5px 12px;
border-radius: 5px;
border: 1px solid rgba(255, 255, 255, 0.12);
background: transparent;
color: rgba(255, 255, 255, 0.55);
font-size: 12px;
cursor: pointer;
transition: background 120ms ease, color 120ms ease;
}
.btn-secondary:hover {
background: rgba(255, 255, 255, 0.08);
color: rgba(255, 255, 255, 0.85);
}
.controller-debug-content {
position: relative;
width: min(760px, 94%);