Files
2025-04-06 12:54:48 -04:00

657 lines
16 KiB
CSS

/* Panel styles for Control Freak UI */
#controller-mapping-panel {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: var(--cf-bg-primary, #2c2c2c);
border: 1px solid var(--cf-border-color, #555);
border-radius: 8px;
width: 85%;
max-width: 950px;
max-height: 85vh;
z-index: 10000;
display: flex;
flex-direction: column;
color: var(--cf-text-primary, #eee);
font-family: var(--cf-brand-font, sans-serif);
box-shadow: 0 5px 25px var(--cf-bg-overlay, rgba(0,0,0,0.5));
overflow: hidden;
}
#controller-mapping-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px 20px;
background: linear-gradient(90deg, var(--cf-bg-tertiary, #222), var(--cf-brand-primary, #4c8eda) 250%);
border-bottom: 1px solid var(--cf-border-color, #555);
}
#controller-mapping-header h2 {
margin: 0;
font-size: 20px;
font-weight: 600;
display: flex;
align-items: center;
}
#controller-mapping-close {
background: none;
border: none;
color: var(--cf-text-primary, #eee);
font-size: 22px;
cursor: pointer;
padding: 0;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: all 0.2s;
}
#controller-mapping-close:hover {
background-color: var(--cf-bg-overlay-light, rgba(255,255,255,0.1));
transform: rotate(90deg);
}
#controller-mapping-tabs {
display: flex;
background-color: var(--cf-bg-secondary, #333);
border-bottom: 1px solid var(--cf-border-color, #555);
padding: 0 15px;
}
.controller-mapping-tab {
padding: 12px 20px;
cursor: pointer;
border-bottom: 3px solid transparent;
transition: all 0.2s;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.5px;
font-size: 14px;
color: var(--cf-text-secondary, #bbb); /* Added default color */
}
.controller-mapping-tab:hover {
background-color: var(--cf-bg-overlay-light, rgba(255,255,255,0.1));
color: var(--cf-brand-primary, #4c8eda);
}
.controller-mapping-tab.active {
border-bottom-color: var(--cf-brand-primary, #4c8eda);
color: var(--cf-brand-primary, #4c8eda);
font-weight: 600;
}
#controller-mapping-content {
flex: 1;
overflow-y: auto;
padding: 20px;
background-color: var(--cf-bg-primary, #2c2c2c); /* Ensure content bg */
}
.tab-panel {
display: none;
}
.tab-panel.active {
display: block;
}
/* Controller sections styling */
.controller-section {
margin-bottom: 30px;
}
.cf-section-header {
font-size: 18px;
margin: 0 0 15px 0;
padding-bottom: 8px;
border-bottom: 1px solid var(--cf-border-light, #666);
color: var(--cf-brand-primary, #4c8eda);
font-weight: 600;
display: flex;
align-items: center;
gap: 8px;
}
.cf-section-icon {
font-size: 20px;
}
.cf-loading {
text-align: center;
padding: 30px;
color: var(--cf-text-secondary, #bbb);
font-style: italic;
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.cf-loading-icon {
font-size: 32px;
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { opacity: 0.6; transform: scale(0.95); }
50% { opacity: 1; transform: scale(1.05); }
100% { opacity: 0.6; transform: scale(0.95); }
}
.cf-cards-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 15px;
margin-top: 10px;
}
.controller-card {
background-color: var(--cf-bg-secondary, #333);
border-radius: 6px;
padding: 15px;
box-shadow: 0 2px 8px var(--cf-bg-overlay-dark, rgba(0,0,0,0.4));
transition: all 0.2s;
border: 1px solid var(--cf-border-color, #555);
display: flex; /* Added for flex layout */
flex-direction: column; /* Added for flex layout */
}
.controller-card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px var(--cf-bg-overlay, rgba(0,0,0,0.5));
border-color: var(--cf-brand-primary, #4c8eda);
}
.controller-card-header {
margin-bottom: 12px;
display: flex;
justify-content: space-between;
align-items: center;
}
.controller-card-title {
margin: 0;
font-size: 16px;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 70%; /* Adjust as needed */
}
.controller-status {
font-size: 12px;
padding: 4px 8px;
border-radius: 4px;
font-weight: 500;
}
.controller-status.connected {
background-color: rgba(0, 128, 0, 0.15);
color: var(--cf-status-success, #5cb85c);
border: 1px solid rgba(0, 128, 0, 0.2);
}
.controller-status.disconnected {
background-color: rgba(128, 0, 0, 0.15);
color: var(--cf-status-error, #e54d4d);
border: 1px solid rgba(128, 0, 0, 0.2);
}
.controller-status.detected {
background-color: rgba(230, 180, 80, 0.15);
color: var(--cf-status-warning, #f0ad4e);
border: 1px solid rgba(230, 180, 80, 0.2);
}
.device-info {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
padding: 8px;
background-color: var(--cf-bg-overlay-light, rgba(255,255,255,0.1));
border-radius: 4px;
border: 1px solid var(--cf-border-light, #666);
font-size: 14px;
}
.device-type {
display: flex;
align-items: center;
gap: 6px;
}
.device-type-icon {
font-size: 16px;
}
.device-specs {
display: flex;
gap: 10px;
font-size: 12px;
color: var(--cf-text-secondary, #bbb);
}
.controller-controls {
margin-top: 15px;
padding-top: 15px;
border-top: 1px solid var(--cf-border-light, #666);
max-height: 150px; /* Limit height */
overflow-y: auto; /* Add scroll */
}
.controller-controls h4 {
margin: 0 0 10px 0;
font-size: 14px;
font-weight: 600;
color: var(--cf-text-secondary, #bbb);
}
.controller-controls ul {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.controller-controls li {
background-color: var(--cf-bg-tertiary, #222);
padding: 3px 8px;
border-radius: 4px;
font-size: 12px;
display: flex;
align-items: center;
gap: 4px;
border: 1px solid var(--cf-border-color, #555);
}
.controller-controls li .control-icon {
font-size: 14px;
opacity: 0.8;
}
.profile-selector {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 20px;
padding: 10px;
background-color: var(--cf-bg-secondary, #333);
border-radius: 6px;
border: 1px solid var(--cf-border-color, #555);
}
.profile-selector label {
font-weight: 500;
font-size: 14px;
}
.profile-selector select {
padding: 6px 10px;
border-radius: 4px;
background-color: var(--cf-bg-primary, #2c2c2c);
color: var(--cf-text-primary, #eee);
border: 1px solid var(--cf-border-light, #666);
flex-grow: 1; /* Allow select to grow */
font-size: 14px;
}
.profile-actions button {
padding: 6px 12px;
font-size: 13px;
margin-left: 5px;
background-color: var(--cf-bg-tertiary, #222);
border: 1px solid var(--cf-border-color, #555);
color: var(--cf-text-primary, #eee);
border-radius: 4px;
cursor: pointer;
transition: background-color 0.2s;
}
.profile-actions button:hover {
background-color: var(--cf-bg-hover, #4a4a4a);
border-color: var(--cf-brand-primary, #4c8eda);
}
.profile-actions button.cf-danger:hover {
background-color: var(--cf-accent-red-dark, #b03c3c);
border-color: var(--cf-accent-red, #e54d4d);
}
.mappings-list {
margin-top: 15px;
/* Styles for the list itself if needed */
}
/* Generic Button Styles (if not covered elsewhere) */
.cf-button {
padding: 8px 15px;
border: none;
border-radius: 4px;
cursor: pointer;
font-weight: 500;
transition: background-color 0.2s, box-shadow 0.2s;
font-family: var(--cf-brand-font, sans-serif);
font-size: 14px;
}
.cf-button-primary {
background-color: var(--cf-brand-primary, #4c8eda);
color: white;
}
.cf-button-primary:hover {
background-color: var(--cf-brand-primary-dark, #3a70b2);
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
.cf-button-secondary {
background-color: var(--cf-bg-secondary, #333);
color: var(--cf-text-primary, #eee);
border: 1px solid var(--cf-border-color, #555);
}
.cf-button-secondary:hover {
background-color: var(--cf-bg-hover, #4a4a4a);
border-color: var(--cf-text-secondary, #bbb);
}
.cf-button-danger {
background-color: var(--cf-accent-red, #e54d4d);
color: white;
}
.cf-button-danger:hover {
background-color: var(--cf-accent-red-dark, #b03c3c);
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
.cf-input {
padding: 8px 12px;
border-radius: 4px;
background-color: var(--cf-bg-input, #222);
color: var(--cf-text-primary, #eee);
border: 1px solid var(--cf-border-light, #666);
font-size: 14px;
font-family: var(--cf-brand-font, sans-serif);
}
.cf-input:focus {
outline: none;
border-color: var(--cf-brand-primary, #4c8eda);
box-shadow: 0 0 0 2px var(--cf-brand-primary-light, rgba(76, 142, 218, 0.3));
}
/* Add scrollbar styling for webkit browsers */
#controller-mapping-content::-webkit-scrollbar,
.controller-controls::-webkit-scrollbar {
width: 8px;
}
#controller-mapping-content::-webkit-scrollbar-track,
.controller-controls::-webkit-scrollbar-track {
background: var(--cf-bg-primary, #2c2c2c);
border-radius: 4px;
}
#controller-mapping-content::-webkit-scrollbar-thumb,
.controller-controls::-webkit-scrollbar-thumb {
background-color: var(--cf-bg-tertiary, #222);
border-radius: 4px;
border: 2px solid var(--cf-bg-primary, #2c2c2c);
}
#controller-mapping-content::-webkit-scrollbar-thumb:hover,
.controller-controls::-webkit-scrollbar-thumb:hover {
background-color: var(--cf-border-color, #555);
}
/* Firefox scrollbar styling */
#controller-mapping-content,
.controller-controls {
scrollbar-width: thin;
scrollbar-color: var(--cf-bg-tertiary, #222) var(--cf-bg-primary, #2c2c2c);
}
/* --- UI Commands Tab Styles (Refined) --- */
.commands-container {
/* Match overall content padding */
}
.commands-panel-header {
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid var(--cf-border-light);
}
.commands-panel-header h3 {
margin: 0 0 5px 0;
color: var(--cf-brand-primary);
font-weight: 600;
font-size: 18px; /* Consistent section header */
}
.commands-panel-header p {
margin: 0;
color: var(--cf-text-secondary);
font-size: 14px;
}
.command-category-section {
margin-bottom: 25px;
}
.command-category-section .category-header {
font-size: 16px;
font-weight: 600;
color: var(--cf-text-primary);
margin: 0 0 12px 0; /* Increased margin */
padding-bottom: 8px; /* Increased padding */
border-bottom: 1px solid var(--cf-border-color); /* Solid, darker border */
}
.command-list {
display: flex;
flex-direction: column;
gap: 8px;
}
.command-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 15px; /* Increased padding */
background-color: var(--cf-bg-secondary);
border: 1px solid var(--cf-border-color);
border-radius: 4px;
transition: border-color 0.2s, background-color 0.2s;
}
.command-item:hover {
border-color: var(--cf-brand-primary);
background-color: var(--cf-bg-tertiary); /* Add subtle background hover */
}
.command-info {
flex-grow: 1;
margin-right: 15px;
overflow: hidden;
}
.command-label {
font-weight: 500;
color: var(--cf-text-primary);
font-size: 14px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.command-id {
font-size: 11px;
color: var(--cf-text-muted);
margin-top: 3px; /* Slightly more space */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.command-map-btn {
padding: 5px 10px; /* Slightly smaller padding */
background-color: var(--cf-bg-secondary); /* Match item bg */
border: 1px solid var(--cf-border-light);
color: var(--cf-text-secondary);
border-radius: 3px;
cursor: pointer;
font-size: 12px;
font-weight: 600; /* Bolder */
transition: all 0.2s;
flex-shrink: 0;
}
.command-map-btn:hover {
background-color: var(--cf-brand-primary); /* Orange brand color */
border-color: var(--cf-brand-primary);
color: white;
}
.no-commands {
color: var(--cf-text-muted);
font-style: italic;
text-align: center;
padding: 20px;
background-color: var(--cf-bg-secondary); /* Add background */
border-radius: 4px; /* Add radius */
}
/* --- mappingComponent.css --- */
/* Mapping Component Style (main style used in panel) */
.controller-mapping-component {
display: flex;
align-items: center;
/* padding: 10px; */
padding: 10px 15px; /* Match command item padding */
/* margin: 5px 0; */
margin: 0; /* Remove margin, rely on parent gap */
/* background-color: var(--cf-bg-tertiary); */
background-color: var(--cf-bg-secondary); /* Match command item bg */
border-radius: 4px;
/* border: 1px solid var(--cf-border-color); */
border: 1px solid var(--cf-border-color); /* Match command item border */
position: relative;
gap: 10px;
transition: border-color 0.2s, background-color 0.2s; /* Add transition */
}
/* Add hover effect like command item */
.controller-mapping-component:hover {
border-color: var(--cf-brand-primary);
background-color: var(--cf-bg-tertiary);
}
.mapping-control-source {
flex: 1;
/* margin-right: 10px; */ /* Handled by parent gap */
display: flex;
align-items: center;
gap: 8px; /* Increase gap slightly */
overflow: hidden;
white-space: nowrap;
}
.mapping-target {
flex: 1;
display: flex;
align-items: center;
gap: 8px; /* Increase gap slightly */
overflow: hidden;
white-space: nowrap;
}
.mapping-icon {
/* margin-right: 5px; */ /* Handled by parent gap */
flex-shrink: 0;
font-size: 16px; /* Larger icon */
opacity: 0.9;
color: var(--cf-text-secondary); /* Muted icon color */
}
.mapping-name {
font-weight: 500; /* Match command label weight */
font-size: 14px; /* Match command label size */
color: var(--cf-text-primary); /* Ensure color */
text-overflow: ellipsis;
overflow: hidden;
}
.mapping-arrow {
margin: 0 10px;
font-size: 16px;
color: var(--cf-text-muted);
flex-shrink: 0;
}
.mapping-type-badge {
padding: 3px 7px; /* Slightly larger padding */
background-color: var(--cf-bg-tertiary); /* Slightly darker badge */
border: 1px solid var(--cf-border-light); /* Add border */
border-radius: 3px;
font-size: 11px; /* Keep small */
margin-left: 10px;
flex-shrink: 0;
color: var(--cf-text-secondary); /* Muted text */
font-weight: 500;
}
.mapping-actions {
display: flex;
margin-left: auto;
padding-left: 15px;
gap: 6px; /* Slightly more gap */
flex-shrink: 0;
}
/* Make buttons look like command map button */
.mapping-edit,
.mapping-delete {
/* Base style similar to .command-map-btn */
padding: 5px 10px;
background-color: var(--cf-bg-secondary);
border: 1px solid var(--cf-border-light);
color: var(--cf-text-secondary);
border-radius: 3px;
cursor: pointer;
font-size: 12px;
font-weight: 600;
transition: all 0.2s;
}
/* Specific hover colors */
.mapping-edit:hover {
background-color: var(--cf-accent-blue);
border-color: var(--cf-accent-blue);
color: white;
}
.mapping-delete:hover {
background-color: var(--cf-accent-red);
border-color: var(--cf-accent-red);
color: white;
}
/* Style the list container in the Mappings tab */
#mappings-panel .mapping-list {
margin-top: 0; /* Remove top margin if header exists */
gap: 8px; /* Consistent gap from commands list */
padding-right: 0; /* Remove scroll padding if panel scrolls */
}