jeongsoo's picture
init
6575706
/* ์žฅ์น˜ ์ œ์–ด ๊ด€๋ จ ์Šคํƒ€์ผ */
/* ์žฅ์น˜ ์ œ์–ด ์„น์…˜ */
#deviceSection {
display: flex;
flex-direction: column;
gap: 20px;
max-width: 1000px;
margin: 0 auto;
padding: 20px;
}
/* ์žฅ์น˜ ์—ฐ๊ฒฐ ์ปจํ…Œ์ด๋„ˆ */
.device-connection {
background-color: var(--bg-color-secondary);
border-radius: 8px;
padding: 15px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.device-connection h3 {
margin-top: 0;
margin-bottom: 15px;
color: var(--text-color-primary);
font-size: 1.2rem;
}
.device-connection-form {
display: flex;
gap: 10px;
margin-bottom: 15px;
}
.device-connection-form input {
flex: 1;
padding: 10px;
border: 1px solid var(--border-color);
border-radius: 4px;
font-size: 0.95rem;
}
.device-connection-form button {
background-color: var(--primary-color);
color: white;
border: none;
border-radius: 4px;
padding: 10px 15px;
cursor: pointer;
font-weight: 500;
transition: background-color 0.2s;
}
.device-connection-form button:hover {
background-color: var(--primary-color-dark);
}
.device-connection-form button:disabled {
background-color: var(--disabled-color);
cursor: not-allowed;
}
.connection-status {
padding: 10px;
border-radius: 4px;
font-size: 0.9rem;
}
.connection-status.connected {
background-color: rgba(25, 135, 84, 0.1);
color: #198754;
border: 1px solid rgba(25, 135, 84, 0.2);
}
.connection-status.disconnected {
background-color: rgba(108, 117, 125, 0.1);
color: #6c757d;
border: 1px solid rgba(108, 117, 125, 0.2);
}
.connection-status.error {
background-color: rgba(220, 53, 69, 0.1);
color: #dc3545;
border: 1px solid rgba(220, 53, 69, 0.2);
}
/* ์žฅ์น˜ ๊ธฐ๋Šฅ ์ปจํ…Œ์ด๋„ˆ */
.device-functions {
background-color: var(--bg-color-secondary);
border-radius: 8px;
padding: 15px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
display: none; /* ์ดˆ๊ธฐ์—๋Š” ์ˆจ๊น€ */
}
.device-functions.active {
display: block;
}
.device-functions h3 {
margin-top: 0;
margin-bottom: 15px;
color: var(--text-color-primary);
font-size: 1.2rem;
}
.function-buttons {
display: flex;
gap: 10px;
margin-bottom: 15px;
flex-wrap: wrap;
}
.function-buttons button {
background-color: var(--secondary-color);
color: white;
border: none;
border-radius: 4px;
padding: 8px 12px;
cursor: pointer;
font-size: 0.9rem;
transition: background-color 0.2s;
}
.function-buttons button:hover {
background-color: var(--secondary-color-dark);
}
.function-buttons button:disabled {
background-color: var(--disabled-color);
cursor: not-allowed;
}
.device-status-result {
width: 100%;
min-height: 100px;
max-height: 200px;
padding: 10px;
border: 1px solid var(--border-color);
border-radius: 4px;
font-family: monospace;
font-size: 0.9rem;
overflow-y: auto;
background-color: var(--bg-color-tertiary);
margin-bottom: 15px;
resize: vertical;
}
/* ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ปจํ…Œ์ด๋„ˆ */
.program-control {
background-color: var(--bg-color-secondary);
border-radius: 8px;
padding: 15px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
display: none; /* ์ดˆ๊ธฐ์—๋Š” ์ˆจ๊น€ */
}
.program-control.active {
display: block;
}
.program-control h3 {
margin-top: 0;
margin-bottom: 15px;
color: var(--text-color-primary);
font-size: 1.2rem;
}
.program-list-container {
margin-bottom: 20px;
}
.program-list {
width: 100%;
border-collapse: collapse;
margin-bottom: 15px;
}
.program-list th, .program-list td {
padding: 10px;
text-align: left;
border-bottom: 1px solid var(--border-color);
}
.program-list th {
background-color: var(--bg-color-tertiary);
font-weight: 500;
}
.program-list tr:hover {
background-color: var(--bg-color-tertiary);
}
.program-select-container {
margin-bottom: 15px;
}
.program-select-container select {
width: 100%;
padding: 10px;
border: 1px solid var(--border-color);
border-radius: 4px;
font-size: 0.95rem;
background-color: var(--bg-color-tertiary);
}
.execute-btn {
background-color: var(--primary-color);
color: white;
border: none;
border-radius: 4px;
padding: 10px 15px;
cursor: pointer;
font-weight: 500;
transition: background-color 0.2s;
width: 100%;
margin-bottom: 15px;
}
.execute-btn:hover {
background-color: var(--primary-color-dark);
}
.execute-btn:disabled {
background-color: var(--disabled-color);
cursor: not-allowed;
}
.execute-result {
padding: 10px;
border-radius: 4px;
margin-top: 10px;
font-size: 0.9rem;
}
.execute-result.success {
background-color: rgba(25, 135, 84, 0.1);
color: #198754;
border: 1px solid rgba(25, 135, 84, 0.2);
}
.execute-result.error {
background-color: rgba(220, 53, 69, 0.1);
color: #dc3545;
border: 1px solid rgba(220, 53, 69, 0.2);
}
.execute-result.warning {
background-color: rgba(255, 193, 7, 0.1);
color: #ffc107;
border: 1px solid rgba(255, 193, 7, 0.2);
}
/* ๋กœ๋”ฉ ํ‘œ์‹œ */
.loading-spinner {
display: inline-block;
width: 16px;
height: 16px;
border: 2px solid rgba(0, 0, 0, 0.1);
border-radius: 50%;
border-top-color: var(--primary-color);
animation: spin 1s ease-in-out infinite;
margin-right: 8px;
vertical-align: middle;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.loading-message {
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
font-size: 0.95rem;
color: var(--text-color-secondary);
}
/* ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ */
.error-message {
background-color: rgba(220, 53, 69, 0.1);
color: #dc3545;
border: 1px solid rgba(220, 53, 69, 0.2);
padding: 10px;
border-radius: 4px;
margin-top: 10px;
font-size: 0.9rem;
}
/* ์—†์Œ ๋ฉ”์‹œ์ง€ */
.no-programs-message {
text-align: center;
padding: 20px;
font-size: 0.95rem;
color: var(--text-color-secondary);
border: 1px dashed var(--border-color);
border-radius: 4px;
margin-top: 10px;
}
/* ์žฌ์‹œ๋„ ๋ฒ„ํŠผ */
.retry-button {
background-color: var(--secondary-color);
color: white;
border: none;
border-radius: 4px;
padding: 8px 12px;
cursor: pointer;
font-size: 0.9rem;
margin-top: 10px;
transition: background-color 0.2s;
}
.retry-button:hover {
background-color: var(--secondary-color-dark);
}