body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.side-menu{background-color:var(--gray-100);border-right:1px solid var(--gray-300);display:flex;flex-direction:column;height:100vh;justify-content:flex-start;padding:var(--spacing-xl) 0;width:250px}.side-menu nav ul{list-style:none}.side-menu nav li,.side-menu nav ul{margin:0;padding:0}.side-menu button{background:none;border:none;color:var(--gray-800);cursor:pointer;font-size:1rem;padding:var(--spacing-lg) var(--spacing-xl);text-align:left;transition:background-color var(--transition);width:100%}.side-menu button:hover{background-color:var(--gray-200)}.side-menu button.active{background-color:var(--primary);color:var(--white)}.side-menu-bottom{align-items:flex-start;border-top:1px solid var(--gray-300);display:flex;flex-direction:column;margin-top:auto;padding:var(--spacing-xl)}.user-name{color:var(--gray-600);font-size:.9375rem;margin-bottom:var(--spacing-md)}.logout-button{background:var(--danger);border:none;border-radius:var(--radius);color:var(--white);cursor:pointer;font-size:.9375rem;padding:var(--spacing-sm) var(--spacing-md);transition:background var(--transition)}.logout-button:hover{background:var(--danger-hover)}.integrator-info{margin:0 auto;max-width:100%;overflow-x:auto;padding:var(--spacing-xl)}.info-grid{background-color:var(--white);border:1px solid var(--gray-300);border-radius:var(--radius);display:table;overflow:hidden;width:100%}.field-actions,.field-value{border-bottom:1px solid var(--gray-300);display:table-cell;padding:var(--spacing-md)}.data-table{background-color:var(--white);border:1px solid var(--gray-300);border-radius:var(--radius);display:table;min-height:200px;overflow:hidden;width:100%}.field-header{padding:var(--spacing-sm) var(--spacing-md);text-align:left;vertical-align:top}.header-content{margin-bottom:var(--spacing-sm)}.filter-input{background-color:var(--white);border:1px solid var(--gray-400);border-radius:var(--radius-sm);box-sizing:border-box;font-size:.875rem;padding:var(--spacing-xs) var(--spacing-sm);width:100%}.filter-input:focus{border-color:var(--primary);box-shadow:0 0 0 .2rem #007bff40;outline:none}.filter-input::placeholder{color:var(--gray-500);font-style:italic}.info-row{display:table-row;min-height:48px}.info-row:nth-child(2n){background-color:var(--gray-100)}.field-actions,.field-value{border-bottom:1px solid var(--gray-300);display:table-cell;min-height:48px;padding:var(--spacing-md);text-align:left}.field-value{color:var(--gray-900);max-width:300px;min-width:80px;overflow:hidden;text-overflow:ellipsis;word-break:break-word}.field-actions{min-width:120px;white-space:nowrap}.page-layout{margin:0 auto;max-width:100%;overflow-x:auto;padding:var(--spacing-xl)}.create-button{margin-top:var(--spacing-xs)}.update-dialog-overlay{align-items:center;background-color:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:var(--z-modal)}.update-dialog-content{background:var(--white);border-radius:var(--radius-lg);box-shadow:var(--shadow);display:flex;flex-direction:column;max-height:90vh;max-width:90vw;min-width:50vw;overflow-y:auto;padding:0;width:50vw}.update-dialog-header{align-items:center;border-bottom:1px solid var(--gray-300);display:flex;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg)}.update-dialog-header h2{color:var(--gray-800);font-size:1.25rem;font-weight:600;margin:0}.update-dialog-close-button{align-items:center;background:none;border:none;color:var(--gray-600);cursor:pointer;display:flex;font-size:1.5rem;height:24px;justify-content:center;padding:0;width:24px}.update-dialog-close-button:hover{color:var(--gray-800)}.update-dialog-content form{grid-gap:var(--spacing-md) var(--spacing-lg);align-items:center;display:grid;flex:1 1;gap:var(--spacing-md) var(--spacing-lg);grid-template-columns:140px 1fr;padding:var(--spacing-lg)}.update-dialog-form-group{display:contents}.update-dialog-form-group label{color:var(--gray-800);font-weight:500;padding-right:var(--spacing-md);text-align:right}.update-dialog-form-group input,.update-dialog-form-group select,.update-dialog-form-group textarea{border:1px solid var(--gray-300);border-radius:var(--radius);box-sizing:border-box;font-size:.875rem;padding:var(--spacing-sm) var(--spacing-md);width:100%}.update-dialog-form-group input:focus,.update-dialog-form-group select:focus,.update-dialog-form-group textarea:focus{border-color:var(--primary);box-shadow:0 0 0 2px #007bff40;outline:none}.update-dialog-form-group input:disabled,.update-dialog-form-group select:disabled,.update-dialog-form-group textarea:disabled{background-color:var(--gray-100);color:var(--gray-600);cursor:not-allowed}.update-dialog-actions{background-color:var(--gray-50);border-top:1px solid var(--gray-300);display:flex;gap:var(--spacing-md);justify-content:center;margin-top:var(--spacing-lg);padding:var(--spacing-md) var(--spacing-lg);width:100%}.update-dialog-actions button{border:none;border-radius:4px;cursor:pointer;font-size:14px;font-weight:500;min-width:80px;padding:10px 20px;transition:background-color .2s}.update-dialog-cancel{background-color:#6c757d;color:#fff}.update-dialog-cancel:hover{background-color:#5a6268}.update-dialog-save{background-color:#007bff;color:#fff}.update-dialog-save:hover{background-color:#0056b3}.update-dialog-actions button:disabled{background-color:#ccc;cursor:not-allowed}@media (max-width:700px){.update-dialog-content{min-width:95vw;width:95vw}.update-dialog-content form{grid-template-columns:1fr}.update-dialog-form-group label{margin-bottom:var(--spacing-xs);padding-right:0;text-align:left}}.integrator-modal-overlay{align-items:center;background-color:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:var(--z-modal)}.integrator-modal-content{background:var(--white);border-radius:var(--radius-lg);box-shadow:var(--shadow);display:flex;flex-direction:column;max-height:90vh;max-width:90vw;min-width:50vw;overflow-y:auto;padding:0;width:50vw}.integrator-modal-header{align-items:center;border-bottom:1px solid var(--gray-300);display:flex;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg)}.integrator-modal-header h2{color:var(--gray-800);font-size:1.25rem;font-weight:600;margin:0}.integrator-modal-close-button{align-items:center;background:none;border:none;color:var(--gray-600);cursor:pointer;display:flex;font-size:1.5rem;height:24px;justify-content:center;padding:0;width:24px}.integrator-modal-close-button:hover{color:var(--gray-800)}.integrator-modal-content form{grid-gap:var(--spacing-md) var(--spacing-lg);align-items:center;display:grid;flex:1 1;gap:var(--spacing-md) var(--spacing-lg);grid-template-columns:140px 1fr;padding:var(--spacing-lg)}.integrator-modal-form-group{display:contents}.integrator-modal-form-group label{color:var(--gray-800);font-weight:500;padding-right:var(--spacing-md);text-align:right}.integrator-modal-form-group input,.integrator-modal-form-group textarea{border:1px solid var(--gray-300);border-radius:var(--radius);box-sizing:border-box;font-size:.875rem;padding:var(--spacing-sm) var(--spacing-md);width:100%}.integrator-modal-form-group input:focus{border-color:var(--primary);box-shadow:0 0 0 2px #007bff40;outline:none}.integrator-modal-readonly-field{background-color:var(--gray-100);color:var(--gray-600);cursor:not-allowed}.integrator-modal-actions{background-color:var(--gray-50);border-top:1px solid var(--gray-300);display:flex;gap:var(--spacing-md);justify-content:center;margin-top:var(--spacing-lg);padding:var(--spacing-md) var(--spacing-lg);width:100%}.integrator-modal-actions button{border:none;border-radius:4px;cursor:pointer;font-size:14px;font-weight:500;min-width:80px;padding:10px 20px;transition:background-color .2s}.integrator-modal-actions button[type=button]{background-color:#6c757d;color:#fff}.integrator-modal-actions button[type=button]:hover:not(:disabled){background-color:#5a6268}.integrator-modal-actions button[type=submit]{background-color:#007bff;color:#fff}.integrator-modal-actions button[type=submit]:hover:not(:disabled){background-color:#0056b3}.integrator-modal-actions button:disabled{background-color:#ccc;cursor:not-allowed}.integrator-modal-parameters-container{background-color:var(--gray-50);border:1px solid var(--gray-300);border-radius:var(--radius);max-height:200px;overflow-y:auto;padding:var(--spacing-sm)}.integrator-modal-parameter-row{align-items:center;display:flex;gap:var(--spacing-xs);margin-bottom:var(--spacing-xs)}.integrator-modal-parameter-row:last-child{margin-bottom:0}.integrator-modal-parameter-key{flex:1 1}.integrator-modal-parameter-key,.integrator-modal-parameter-value{background-color:var(--white);border:1px solid var(--gray-300);border-radius:var(--radius);font-size:.875rem;padding:var(--spacing-xs) var(--spacing-sm)}.integrator-modal-parameter-value{flex:2 1}.integrator-modal-parameter-key:focus,.integrator-modal-parameter-value:focus{border-color:var(--primary);box-shadow:0 0 0 2px #007bff40;outline:none}.integrator-modal-parameter-remove{align-items:center;background-color:var(--danger);border:none;border-radius:var(--radius);color:#fff;cursor:pointer;display:flex;font-size:16px;font-weight:700;height:24px;justify-content:center;transition:background-color .2s;width:24px}.integrator-modal-parameter-remove:hover{background-color:#dc2626}.integrator-modal-parameter-add{background-color:#10b981;border:none;border-radius:var(--radius);color:#fff;cursor:pointer;font-size:.875rem;margin-top:var(--spacing-xs);padding:var(--spacing-xs) var(--spacing-sm);transition:background-color .2s;width:100%}.integrator-modal-parameter-add:hover{background-color:#059669}@media (max-width:700px){.integrator-modal-content{min-width:95vw;width:95vw}.integrator-modal-content form{grid-template-columns:1fr}.integrator-modal-form-group label{margin-bottom:var(--spacing-xs);padding-right:0;text-align:left}}.component-modal-overlay{align-items:center;background-color:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:var(--z-modal)}.component-modal{background:var(--white);border-radius:var(--radius-lg);box-shadow:var(--shadow);display:flex;flex-direction:column;max-height:90vh;max-width:90vw;min-width:50vw;overflow-y:auto;padding:0;width:50vw}.component-modal-header{align-items:center;border-bottom:1px solid var(--gray-300);display:flex;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg)}.component-modal-header h2{font-size:1.25rem;font-weight:600;margin:0}.component-modal-close-button{align-items:center;background:none;border:none;color:var(--gray-600);cursor:pointer;display:flex;font-size:1.5rem;height:24px;justify-content:center;padding:0;width:24px}.component-modal-close-button:hover{color:var(--gray-800)}.component-modal form{grid-gap:var(--spacing-md) var(--spacing-lg);align-items:center;display:grid;flex:1 1;gap:var(--spacing-md) var(--spacing-lg);grid-template-columns:140px 1fr;padding:var(--spacing-lg)}.component-modal-form-group{display:contents}.component-modal-form-group label{color:var(--gray-800);font-weight:500;padding-right:var(--spacing-md);text-align:right}.component-modal-form-group input,.component-modal-form-group select{border:1px solid var(--gray-300);border-radius:var(--radius);box-sizing:border-box;font-size:.875rem;padding:var(--spacing-sm) var(--spacing-md);width:100%}.component-modal-form-group input:focus,.component-modal-form-group select:focus{border-color:var(--primary);box-shadow:0 0 0 2px #007bff40;outline:none}.component-modal-form-group input:disabled,.component-modal-form-group select:disabled{background-color:var(--gray-100);color:var(--gray-600);cursor:not-allowed}.component-modal-actions{background-color:var(--gray-50);border-top:1px solid var(--gray-300);display:flex;gap:var(--spacing-md);justify-content:center;margin-top:var(--spacing-lg);padding:var(--spacing-md) var(--spacing-lg);width:100%}.component-modal-actions button{border:none;border-radius:4px;cursor:pointer;font-size:14px;font-weight:500;min-width:80px;padding:10px 20px;transition:background-color .2s}.component-modal-actions button[type=button]{background-color:#6c757d;color:#fff}.component-modal-actions button[type=button]:hover{background-color:#5a6268}.component-modal-actions button[type=submit]{background-color:#007bff;color:#fff}.component-modal-actions button[type=submit]:hover{background-color:#0056b3}.component-modal-actions button:disabled{background-color:#ccc;cursor:not-allowed}.component-modal-error-message{background-color:#ffebee;border:1px solid #ffcdd2;border-radius:var(--radius);color:var(--danger);margin-bottom:var(--spacing-md);padding:var(--spacing-md)}.components{margin:0 auto;max-width:100%;overflow-x:auto;padding:var(--spacing-xl)}.header{align-items:center;justify-content:space-between}.components-list{background-color:var(--white);border:1px solid var(--gray-300);border-radius:var(--radius);display:table;overflow:hidden;width:100%}.info-header{background-color:var(--gray-100);display:table-row}.field-header{border-bottom:2px solid var(--gray-300);color:var(--gray-700);display:table-cell;font-weight:600;padding:var(--spacing-md);text-transform:capitalize;white-space:nowrap}.field-header.sortable{cursor:pointer;padding-right:1.5rem;position:relative;-webkit-user-select:none;user-select:none}.field-header.sortable:hover{background-color:var(--gray-200)}.component-item{display:table-row}.component-item:nth-child(2n){background-color:var(--gray-100)}.component-info{border-bottom:1px solid var(--gray-300);color:var(--gray-900);display:table-cell;max-width:300px;overflow:hidden;padding:var(--spacing-md);text-overflow:ellipsis;word-break:break-word}.component-info h3{color:var(--gray-800);margin:0}.component-info p{color:var(--gray-600);font-size:.9em;margin:0}.component-actions{border-bottom:1px solid var(--gray-300);display:table-cell;padding:var(--spacing-md);white-space:nowrap}.edit-modal{align-items:center;background-color:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:var(--z-modal)}.edit-form{background-color:var(--white);border-radius:var(--radius);max-height:90vh;max-width:800px;overflow-y:auto;padding:var(--spacing-xl);width:90%}.edit-form h3{color:var(--gray-800);margin-bottom:var(--spacing-lg);margin-top:0}.grid-container{display:table;width:100%}.form-row{display:table-row}.form-row:nth-child(2n){background-color:var(--gray-100)}.form-row label{border-bottom:1px solid var(--gray-300);color:var(--gray-700);display:table-cell;font-weight:500;padding:var(--spacing-md);width:200px}.form-row input,.form-row select{background-color:initial;border:none;border-bottom:1px solid var(--gray-300);display:table-cell;font-size:1rem;padding:var(--spacing-md);width:calc(100% - 200px)}.form-row input:focus,.form-row select:focus{background-color:var(--gray-100);outline:none}.form-row select{-webkit-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-position:right 1rem center;background-repeat:no-repeat;background-size:1em;cursor:pointer;padding-right:2.5rem}.form-row input[readonly]{background-color:var(--gray-100);color:var(--gray-600);cursor:not-allowed}.button-group{border-top:1px solid var(--gray-300);display:flex;gap:var(--spacing-md);justify-content:flex-end;margin-top:var(--spacing-xl);padding-top:var(--spacing-md)}.cancel-button,.save-button{border:none;border-radius:var(--radius);cursor:pointer;font-size:1rem;padding:var(--spacing-sm) var(--spacing-lg);transition:background-color var(--transition)}.save-button{background-color:var(--success);color:var(--white)}.save-button:hover{background-color:var(--success-hover)}.cancel-button{background-color:var(--gray-600);color:var(--white)}.cancel-button:hover{background-color:var(--gray-700)}.locations-container{width:100%}.integrator-selector{background-color:var(--gray-100);border:1px solid var(--gray-300);border-radius:var(--radius);margin-bottom:var(--spacing-xl);padding:var(--spacing-md)}.integrator-selector label{color:var(--gray-700);display:block;font-weight:500;margin-bottom:var(--spacing-sm)}.integrator-selector select{background-color:var(--white);border:1px solid var(--gray-400);border-radius:var(--radius);cursor:pointer;font-size:1rem;max-width:400px;padding:var(--spacing-sm);width:100%}.integrator-selector select:focus{border-color:var(--primary);box-shadow:0 0 0 .2rem #007bff40;outline:none}.integrator-selector select:disabled{background-color:var(--gray-200);cursor:not-allowed}.dialog-content{background-color:var(--gray-100);border:1px solid var(--gray-300);border-radius:var(--radius);margin-bottom:var(--spacing-md);max-height:400px;overflow-y:auto;padding:var(--spacing-md)}.dialog-content p{margin:0 0 var(--spacing-sm) 0;white-space:pre-wrap;word-break:break-all}.loading-overlay{align-items:center;background:#ffffffb3;bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:var(--z-modal)}.spinner{animation:spin 1s linear infinite;border-top:6px solid var(--gray-200);border:6px solid var(--gray-200);border-radius:50%;border-top-color:var(--primary);height:48px;width:48px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.traces{margin:0 auto;max-width:100%;overflow-x:auto;padding:var(--spacing-xl)}.header{display:flex;flex-direction:column;margin-bottom:var(--spacing-xl)}.header h2{color:var(--gray-800);margin:0;margin-bottom:var(--spacing-md)}.filters{display:flex;flex-wrap:wrap;gap:var(--spacing-xl)}.filter-group{display:flex;flex-direction:column;gap:var(--spacing-xs)}.filter-group label{color:var(--gray-600);font-size:.9em}.filter-group input{border:1px solid var(--gray-300);border-radius:var(--radius);min-width:200px;padding:var(--spacing-sm)}.filter-actions{align-self:flex-end;display:flex;flex-direction:column;gap:var(--spacing-sm)}.apply-filters-button,.clear-filters-button{border:none;border-radius:var(--radius);cursor:pointer;font-size:.9em;min-width:120px;padding:var(--spacing-sm) var(--spacing-md);transition:background var(--transition)}.apply-filters-button{background:var(--primary);color:var(--white)}.apply-filters-button:hover:not(:disabled){background:var(--primary-hover)}.clear-filters-button{background:var(--gray-200);color:var(--gray-700)}.clear-filters-button:hover:not(:disabled){background:var(--gray-300)}.apply-filters-button:disabled,.clear-filters-button:disabled{cursor:not-allowed;opacity:.6}.load-more{display:flex;justify-content:center;margin-top:var(--spacing-xl)}.error,.loading,.no-data{color:var(--gray-600);font-size:1.2rem;padding:var(--spacing-xl);text-align:center}.error{color:var(--danger)}.product-modal-overlay{align-items:center;background-color:#00000080;display:flex;height:100vh;inset:0;justify-content:center;margin:0;padding:0;position:fixed;width:100vw;z-index:9999}.product-modal{background:var(--white);border-radius:var(--radius-lg);box-shadow:var(--shadow);display:flex;flex-direction:column;height:90vh!important;max-height:90vh!important;max-width:90vw!important;overflow-y:auto;padding:0;width:90vw!important}.product-modal-header{align-items:center;border-bottom:1px solid var(--gray-300);display:flex;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg)}.product-modal-header h2{color:var(--gray-800);font-size:1.25rem;font-weight:600;margin:0}.product-modal-close-button{align-items:center;background:none;border:none;color:var(--gray-600);cursor:pointer;display:flex;font-size:1.5rem;height:24px;justify-content:center;padding:0;width:24px}.product-modal-close-button:hover{color:var(--gray-800)}.product-modal-content{display:flex;flex:1 1 auto;height:100%;overflow:hidden;padding:var(--spacing-sm)}.product-modal-content .product-modal-left{flex:1 1;max-width:20%;min-width:0;overflow-y:auto;padding:var(--spacing-sm)!important}.product-modal-left{padding-top:4px!important}.product-modal-basic-info-form{grid-gap:var(--spacing-xs) var(--spacing-lg);align-items:center;display:grid;gap:var(--spacing-xs) var(--spacing-lg);grid-template-columns:-webkit-max-content 1fr;grid-template-columns:max-content 1fr}.product-modal-basic-info-form .product-modal-form-group{display:contents}.product-modal-basic-info-form label{color:var(--gray-800);font-weight:500;justify-self:start;margin-bottom:0;min-width:140px;text-align:left}.product-modal-basic-info-form input,.product-modal-basic-info-form select{border:1px solid var(--gray-300);border-radius:var(--radius);box-sizing:border-box;font-size:.875rem;padding:var(--spacing-sm) var(--spacing-md);width:100%}.product-modal-basic-info-form h3,.product-modal-modbus-config-section h3{border-bottom:1px solid var(--gray-300);color:var(--gray-800);font-size:1.1rem;font-weight:600;grid-column:1/-1;margin:0 0 var(--spacing-md) 0;padding-bottom:var(--spacing-xs)}.product-modal-modbus-config-section{grid-gap:var(--spacing-xs) var(--spacing-lg);align-items:center;border-top:1px solid var(--gray-300);display:grid;gap:var(--spacing-xs) var(--spacing-lg);grid-template-columns:-webkit-max-content 1fr;grid-template-columns:max-content 1fr;margin-top:var(--spacing-lg);padding-top:var(--spacing-lg)}.product-modal-modbus-config-section .product-modal-form-group{display:contents}.product-modal-modbus-config-section label{color:var(--gray-800);font-weight:500;justify-self:start;margin-bottom:0;min-width:140px;text-align:left}.product-modal-modbus-config-section input,.product-modal-modbus-config-section select{border:1px solid var(--gray-300);border-radius:var(--radius);box-sizing:border-box;font-size:.875rem;padding:var(--spacing-sm) var(--spacing-md);width:100%}.product-modal-content .product-modal-right{background:var(--gray-50);border-left:1px solid var(--gray-300);display:flex;flex:2 1;flex-direction:column;max-width:67%;min-width:0;overflow-y:auto;padding:var(--spacing-sm)!important}.product-modal-measurements-section{display:flex;flex-direction:column;gap:var(--spacing-md);overflow-x:auto}.product-modal-measurement-item{background:var(--white);border:1px solid var(--gray-300);border-radius:var(--radius);display:flex;flex-direction:column;gap:var(--spacing-xs);margin-bottom:var(--spacing-sm);padding:var(--spacing-md)}.product-modal-measurement-item input,.product-modal-measurement-item select{margin-bottom:var(--spacing-xs)}.product-modal-measurement-actions{display:flex;gap:var(--spacing-xs);margin-top:var(--spacing-xs)}.product-modal-add-measurement-btn{align-self:flex-start;margin-top:4px}.product-modal-form-group select[multiple]{max-height:200px;min-height:120px}.product-modal-form-group select[multiple] option{padding:var(--spacing-xs)}.product-modal-form-group input.error,.product-modal-form-group select.error{border-color:var(--danger);box-shadow:0 0 0 2px #dc354540}.product-modal-error-message{color:var(--danger);display:block;font-size:.875rem;margin-top:var(--spacing-xs)}.product-modal-form-section{background-color:var(--gray-50);border:1px solid var(--gray-300);border-radius:var(--radius);margin-bottom:var(--spacing-xl);padding:var(--spacing-lg)}.product-modal-form-section h3{border-bottom:2px solid var(--primary);color:var(--gray-800);font-size:1.2rem;font-weight:600;margin:0 0 var(--spacing-lg) 0;padding-bottom:var(--spacing-sm)}.product-modal-form-section .product-modal-form-row{grid-gap:var(--spacing-md);display:grid;gap:var(--spacing-md);grid-template-columns:1fr 1fr 1fr;margin-bottom:var(--spacing-md)}.product-modal-form-section .product-modal-form-row .product-modal-form-group,.product-modal-form-section .product-modal-form-row:last-child{margin-bottom:0}.product-modal-form-section .product-modal-form-group.full-width{grid-column:1/-1}.product-modal-checkbox-group{background-color:var(--white);border:1px solid var(--gray-300);border-radius:var(--radius);max-height:200px;overflow-y:auto;padding:var(--spacing-sm)}.product-modal-checkbox-label{align-items:center;cursor:pointer;display:flex;font-size:.875rem;gap:var(--spacing-xs);padding:var(--spacing-xs) 0}.product-modal-checkbox-label input[type=checkbox]{margin:0;width:auto}.product-modal-checkbox-label:hover{background-color:var(--gray-100);border-radius:var(--radius)}@media (max-width:1200px){.product-modal-content{flex-direction:column}.product-modal-content .product-modal-left,.product-modal-content .product-modal-right{max-width:none}.product-modal-content .product-modal-right{border-left:none;border-top:1px solid var(--gray-300)}.product-modal-form-section .product-modal-form-row{grid-template-columns:1fr 1fr}}@media (max-width:768px){.product-modal{height:95vh!important;max-height:95vh!important;max-width:95vw!important;width:95vw!important}.product-modal-content{flex-direction:column}.product-modal-content .product-modal-left,.product-modal-content .product-modal-right{max-width:none}.product-modal-form-section .product-modal-form-row{grid-template-columns:1fr}.product-modal-form-section{padding:var(--spacing-md)}}@media (max-width:700px){.product-modal-basic-info-form,.product-modal-modbus-config-section{grid-template-columns:1fr}.product-modal-basic-info-form label,.product-modal-modbus-config-section label{justify-self:start;margin-bottom:var(--spacing-xs)}}.product-modal-readonly-field{background-color:var(--gray-100);color:var(--gray-600);cursor:not-allowed}.product-modal-measurement-table{border-collapse:collapse;width:100%}.product-modal-measurement-table td,.product-modal-measurement-table th{border-bottom:1px solid var(--gray-300);padding:var(--spacing-xs);text-align:left}.product-modal-measurement-table th{background-color:var(--gray-100);color:var(--gray-800);font-weight:600;position:-webkit-sticky;position:sticky;top:0;z-index:1}.product-modal-measurement-table th>span{align-items:center;color:var(--gray-600);display:flex;font-size:.75rem;gap:var(--spacing-xs);justify-content:space-between;letter-spacing:.5px;text-transform:uppercase}.product-modal-measurement-table td:first-child,.product-modal-measurement-table th:first-child{background-color:var(--white);left:0;min-width:120px;position:-webkit-sticky;position:sticky;z-index:2}.product-modal-input-error{border-color:var(--danger)!important}.product-modal-actions{background-color:var(--gray-50);border-top:1px solid var(--gray-300);display:flex;gap:var(--spacing-md);justify-content:center;margin-top:var(--spacing-lg);padding:var(--spacing-md) var(--spacing-lg);width:100%}.product-modal-actions button{border:none;border-radius:4px;cursor:pointer;font-size:14px;font-weight:500;min-width:80px;padding:10px 20px;transition:background-color .2s}.product-modal-actions button[type=button]{background-color:#6c757d;color:#fff}.product-modal-actions button[type=button]:hover:not(:disabled){background-color:#5a6268}.product-modal-actions button[type=submit]{background-color:#007bff;color:#fff}.product-modal-actions button[type=submit]:hover:not(:disabled){background-color:#0056b3}.product-modal-actions button:disabled{background-color:#ccc;cursor:not-allowed}.product-modal-measurement-table input,.product-modal-measurement-table select{border:1px solid var(--gray-300);border-radius:var(--radius);box-sizing:border-box;font-size:.875rem;padding:var(--spacing-xs);width:100%}.product-modal-measurement-table input:focus,.product-modal-measurement-table select:focus{border-color:var(--primary);box-shadow:0 0 0 2px #007bff40;outline:none}.product-modal-measurement-table input.product-modal-input-error{border-color:var(--danger);box-shadow:0 0 0 2px #dc354540}.unit-modal-overlay{align-items:center;background-color:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:var(--z-modal)}.unit-modal{background:var(--white);border-radius:var(--radius-lg);box-shadow:var(--shadow);display:flex;flex-direction:column;max-height:80vh;max-width:90vw;min-width:50vw;overflow-y:auto;padding:0;width:50vw}.unit-modal-header{align-items:center;border-bottom:1px solid var(--gray-300);display:flex;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg)}.unit-modal-header h2{color:var(--gray-800);margin:0}.unit-modal-close-button{align-items:center;background:none;border:none;color:var(--gray-600);cursor:pointer;display:flex;font-size:1.5rem;height:24px;justify-content:center;padding:0;width:24px}.unit-modal-close-button:hover{color:var(--gray-800)}.unit-modal form{grid-gap:var(--spacing-md) var(--spacing-lg);align-items:center;display:grid;flex:1 1;gap:var(--spacing-md) var(--spacing-lg);grid-template-columns:140px 1fr;padding:var(--spacing-lg)}.unit-modal-form-group{display:contents}.unit-modal-form-group label{color:var(--gray-800);font-weight:500;padding-right:var(--spacing-md);text-align:right}.unit-modal-form-group input{border:1px solid var(--gray-300);border-radius:var(--radius);box-sizing:border-box;font-size:.875rem;padding:var(--spacing-sm) var(--spacing-md);width:100%}.unit-modal-form-group input:focus{border-color:var(--primary);box-shadow:0 0 0 2px #007bff40;outline:none}.unit-modal-form-group input:disabled{background-color:var(--gray-100);color:var(--gray-600);cursor:not-allowed}.unit-modal-actions{background-color:var(--gray-50);border-top:1px solid var(--gray-300);display:flex;gap:var(--spacing-md);justify-content:center;margin-top:var(--spacing-xl);padding:var(--spacing-md) var(--spacing-lg);width:100%}.unit-modal-actions button{border:none;border-radius:4px;cursor:pointer;font-size:14px;font-weight:500;min-width:80px;padding:10px 20px;transition:background-color .2s}.unit-modal-actions button[type=button]{background-color:#6c757d;color:#fff}.unit-modal-actions button[type=button]:hover:not(:disabled){background-color:#5a6268}.unit-modal-actions button[type=submit]{background-color:#007bff;color:#fff}.unit-modal-actions button[type=submit]:hover:not(:disabled){background-color:#0056b3}.unit-modal-actions button:disabled{cursor:not-allowed;opacity:.6}.layout{display:flex;height:100vh;min-height:100vh}.main-content{background-color:var(--white);flex:1 1;min-height:100vh;overflow:auto;padding:var(--spacing-xl)}.page-layout .header{align-items:center;border-bottom:1px solid var(--gray-300);display:flex;justify-content:space-between;margin-bottom:var(--spacing-xl);padding-bottom:var(--spacing-md)}.page-layout .header h2{color:var(--gray-800);margin:0}.create-button{font-size:.875rem;padding:var(--spacing-sm) var(--spacing-md)}.create-button:hover{background-color:var(--success-hover)}.action-buttons{display:flex;gap:var(--spacing-xs)}.edit-button{background-color:var(--primary);border:none;border-radius:var(--radius);color:var(--white);cursor:pointer;font-size:.75rem;padding:var(--spacing-xs) var(--spacing-sm);transition:background-color var(--transition)}.edit-button:hover:not(:disabled){background-color:var(--primary-hover)}.delete-button{background-color:var(--danger);border:none;border-radius:var(--radius);color:var(--white);cursor:pointer;font-size:.75rem;padding:var(--spacing-xs) var(--spacing-sm);transition:background-color var(--transition)}.delete-button:hover:not(:disabled){background-color:var(--danger-hover)}.delete-button:disabled,.edit-button:disabled{cursor:not-allowed;opacity:.6}.login-container{align-items:center;background-color:var(--gray-100);display:flex;height:100vh;justify-content:center}.login-box{background:var(--white);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:var(--spacing-xl);text-align:center}.login-box h1{color:var(--gray-800);margin-bottom:var(--spacing-md)}.login-box p{color:var(--gray-600);margin-bottom:var(--spacing-xl)}.login-button{background-color:var(--primary);border:none;border-radius:var(--radius);color:var(--white);cursor:pointer;font-size:1rem;padding:var(--spacing-sm) var(--spacing-md);transition:background-color var(--transition)}.login-button:hover{background-color:var(--primary-hover)}:root{--primary:#007bff;--primary-hover:#0056b3;--success:#28a745;--success-hover:#218838;--danger:#dc3545;--danger-hover:#c82333;--warning:#ffc107;--warning-hover:#e0a800;--info:#17a2b8;--info-hover:#138496;--light:#f8f9fa;--dark:#343a40;--white:#fff;--gray-100:#f8f9fa;--gray-200:#e9ecef;--gray-300:#dee2e6;--gray-400:#ced4da;--gray-500:#adb5bd;--gray-600:#6c757d;--gray-700:#495057;--gray-800:#343a40;--gray-900:#212529;--spacing-xs:0.25rem;--spacing-sm:0.5rem;--spacing-md:1rem;--spacing-lg:1.5rem;--spacing-xl:2rem;--radius-sm:3px;--radius:4px;--radius-lg:8px;--shadow-sm:0 2px 4px #0000001a;--shadow:0 4px 6px #0000001a;--shadow-lg:0 10px 15px #0000001a;--transition:0.2s ease;--z-modal:1000;--z-dropdown:1000;--z-sticky:1020;--z-fixed:1030;--z-modal-backdrop:1040;--z-modal:1050;--z-popover:1060;--z-tooltip:1070}.btn{align-items:center;border:none;border-radius:var(--radius);cursor:pointer;display:inline-flex;font-size:.875rem;font-weight:500;justify-content:center;line-height:1.5;padding:var(--spacing-sm) var(--spacing-md);text-decoration:none;transition:background-color var(--transition)}.btn:disabled{cursor:not-allowed;opacity:.6}.btn-primary{background-color:var(--primary);color:var(--white)}.btn-primary:hover:not(:disabled){background-color:var(--primary-hover)}.btn-success{background-color:var(--success);color:var(--white)}.btn-success:hover:not(:disabled){background-color:var(--success-hover)}.btn-danger{background-color:var(--danger);color:var(--white)}.btn-danger:hover:not(:disabled){background-color:var(--danger-hover)}.btn-secondary{background-color:var(--gray-600);color:var(--white)}.btn-secondary:hover:not(:disabled){background-color:var(--gray-700)}.btn-warning{background-color:var(--warning);color:var(--dark)}.btn-warning:hover:not(:disabled){background-color:var(--warning-hover)}.btn-sm{font-size:.75rem;padding:var(--spacing-xs) var(--spacing-sm)}.btn-lg{font-size:1rem;padding:var(--spacing-md) var(--spacing-lg)}.btn-icon{height:32px;min-width:32px;padding:var(--spacing-xs)}.btn-group{display:flex;gap:var(--spacing-xs)}.create-button{align-items:center;background-color:var(--success);border:none;border-radius:var(--radius);color:var(--white);cursor:pointer;display:inline-flex;font-size:.75rem;font-weight:500;justify-content:center;line-height:1.5;padding:var(--spacing-xs) var(--spacing-sm);text-decoration:none;transition:background-color var(--transition)}.create-button:hover:not(:disabled){background-color:var(--success-hover)}.create-button-small{font-size:.75rem;padding:var(--spacing-xs) var(--spacing-sm)}.App{text-align:center}