:root{--color-black: #000000;--color-white: #ffffff;--color-gray-50: #f9fafb;--color-gray-100: #f3f4f6;--color-gray-200: #e5e7eb;--color-gray-300: #d1d5db;--color-gray-400: #9ca3af;--color-gray-500: #6b7280;--color-gray-600: #4b5563;--color-gray-700: #374151;--color-gray-800: #1f2937;--color-gray-900: #111827;--color-blue-50: #eff6ff;--color-blue-100: #dbeafe;--color-blue-400: #60a5fa;--color-blue-500: #3b82f6;--color-blue-600: #2563eb;--color-blue-700: #1d4ed8;--color-teal-50: #f0fdfa;--color-teal-100: #ccfbf1;--color-teal-500: #14b8a6;--color-teal-600: #0d9488;--color-red-50: #fef2f2;--color-red-400: #f87171;--color-red-500: #ef4444;--color-red-600: #dc2626;--color-green-50: #f0fdf4;--color-green-400: #4ade80;--color-green-500: #22c55e;--color-green-600: #16a34a;--color-yellow-50: #fefce8;--color-yellow-400: #facc15;--color-yellow-500: #eab308;--color-yellow-600: #ca8a04;--bg-primary: #111827;--bg-secondary: #1f2937;--bg-tertiary: #374151;--bg-overlay: rgba(0, 0, 0, .8);--text-primary: #f3f4f6;--text-secondary: #d1d5db;--text-tertiary: #9ca3af;--border-primary: #374151;--border-secondary: #4b5563;--color-primary: #3b82f6;--color-primary-hover: #2563eb;--color-primary-active: #1d4ed8;--color-secondary: #4b5563;--color-secondary-hover: #5a6572;--color-secondary-active: #3a414d;--color-success: #22c55e;--color-success-bg: rgba(34, 197, 94, .1);--color-error: #ef4444;--color-error-bg: rgba(239, 68, 68, .1);--color-warning: #eab308;--color-warning-bg: rgba(234, 179, 8, .1);--color-info: #3b82f6;--color-info-bg: rgba(59, 130, 246, .1);--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .2);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .3);--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-full: 9999px;--duration-fast: .15s;--duration-normal: .25s;--ease-standard: cubic-bezier(.16, 1, .3, 1)}[data-theme=light]{--bg-primary: #ffffff;--bg-secondary: #f9fafb;--bg-tertiary: #f3f4f6;--bg-overlay: rgba(0, 0, 0, .5);--text-primary: #111827;--text-secondary: #374151;--text-tertiary: #6b7280;--border-primary: #e5e7eb;--border-secondary: #d1d5db;--color-primary: #3b82f6;--color-primary-hover: #2563eb;--color-primary-active: #1d4ed8;--color-secondary: #f3f4f6;--color-secondary-hover: #e5e7eb;--color-secondary-active: #d1d5db;--color-success: #16a34a;--color-success-bg: rgba(22, 163, 74, .1);--color-error: #dc2626;--color-error-bg: rgba(220, 38, 38, .1);--color-warning: #ca8a04;--color-warning-bg: rgba(202, 138, 4, .1);--color-info: #2563eb;--color-info-bg: rgba(37, 99, 235, .1);--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .15);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .2)}[data-theme=light] .btn-secondary{background:var(--color-secondary);color:var(--text-primary);border:1px solid var(--border-primary)}[data-theme=light] .btn-secondary:hover{background:var(--color-secondary-hover);border-color:var(--border-secondary)}[data-theme=light] .action-btn{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-primary)}[data-theme=light] .action-btn:hover{background:var(--color-primary);color:var(--color-white);border-color:var(--color-primary)}*{margin:0;padding:0;box-sizing:border-box}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background:var(--bg-primary);color:var(--text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:14px;line-height:1.5;transition:background-color var(--duration-normal) var(--ease-standard),color var(--duration-normal) var(--ease-standard)}a{color:var(--color-primary);text-decoration:none;transition:color var(--duration-fast) var(--ease-standard)}a:hover{color:var(--color-primary-hover)}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.2;color:var(--text-primary);margin-bottom:.5em}h1{font-size:32px}h2{font-size:28px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}p{color:var(--text-secondary);margin-bottom:1em}.btn{padding:10px 16px;border:none;border-radius:var(--radius-md);font-size:14px;font-weight:600;cursor:pointer;transition:all var(--duration-fast) var(--ease-standard);display:inline-flex;align-items:center;justify-content:center;gap:8px}.btn-primary{background:var(--color-primary);color:var(--color-white)}.btn-primary:hover{background:var(--color-primary-hover);transform:translateY(-2px);box-shadow:var(--shadow-lg)}.btn-primary:active{background:var(--color-primary-active);transform:translateY(0)}.btn-secondary{background:var(--color-secondary);color:var(--text-primary)}.btn-secondary:hover{background:var(--color-secondary-hover)}.btn-secondary:active{background:var(--color-secondary-active)}.btn:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{font-family:inherit;font-size:inherit;color:var(--text-primary);background:var(--bg-secondary);border:2px solid var(--border-primary);border-radius:var(--radius-md);padding:10px 12px;transition:all var(--duration-fast) var(--ease-standard)}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--color-primary);background:var(--bg-tertiary);box-shadow:0 0 0 3px #3b82f626}input::placeholder,textarea::placeholder{color:var(--text-tertiary)}.card{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);padding:20px;transition:all var(--duration-normal) var(--ease-standard)}.card:hover{border-color:var(--border-secondary);box-shadow:var(--shadow-md)}.status-success{color:var(--color-success);background:var(--color-success-bg)}.status-error{color:var(--color-error);background:var(--color-error-bg)}.status-warning{color:var(--color-warning);background:var(--color-warning-bg)}.status-info{color:var(--color-info);background:var(--color-info-bg)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-secondary)}::-webkit-scrollbar-thumb{background:var(--border-secondary);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary)}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=);background-size:26px 26px}.leaflet-default-icon-path{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=)}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}#root{width:100%;min-height:100vh;background:var(--bg-primary);color:var(--text-primary);transition:background-color var(--duration-normal) var(--ease-standard),color var(--duration-normal) var(--ease-standard)}.login-container{display:flex;align-items:center;justify-content:center;width:100%;min-height:100vh;background:var(--bg-0, #161D2C);padding:20px}.login-card{background:var(--bg-1, #1D2638);border:1px solid var(--border-subtle, rgba(255, 255, 255, .1));border-radius:12px;width:100%;max-width:420px;padding:40px;box-shadow:0 10px 40px #0006}.login-header{text-align:center;margin-bottom:32px}.login-header h1{margin:0 0 8px;font-size:32px;font-weight:700;color:var(--primary, #3B83F9)}.login-header p{margin:0;font-size:14px;color:var(--text-1, #A9B4C7)}.login-form{display:flex;flex-direction:column;gap:20px;margin-bottom:20px}.form-group label{font-weight:600;font-size:14px;color:var(--text-0, #E6EDF6)}.form-group input{padding:12px;background:var(--bg-0, #161D2C);border:2px solid var(--border-subtle, rgba(255, 255, 255, .1));border-radius:8px;color:var(--text-0, #E6EDF6);font-size:14px;transition:all .2s ease}.form-group input:focus{outline:none;border-color:var(--primary, #3B83F9);box-shadow:0 0 0 3px #3b83f926}.error-message{padding:12px;background:#ef44441a;color:#ef4444;border-radius:8px;font-size:14px;font-weight:500;border:1px solid #ef4444}.login-footer{text-align:center;padding-top:20px;border-top:1px solid var(--border-subtle, rgba(255, 255, 255, .1))}.login-footer p{margin:0;font-size:12px;color:var(--text-1, #A9B4C7)}.forgot-password-link{color:var(--primary, #3B83F9);text-decoration:none;font-size:14px;font-weight:500;transition:color .2s}.forgot-password-link:hover{color:#5e9cf6;text-decoration:underline}@media(max-width:480px){.login-card{padding:24px}.login-header h1{font-size:28px}}.forgot-password-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#667eea,#764ba2);padding:20px}.forgot-password-container{background:var(--bg-primary);border-radius:12px;box-shadow:0 10px 40px #0003;width:100%;max-width:450px;overflow:hidden}.forgot-password-header{background:var(--bg-secondary);padding:30px;text-align:center;border-bottom:1px solid var(--border-color)}.forgot-password-header h1{margin:0 0 10px;font-size:28px;color:var(--text-primary)}.forgot-password-header p{margin:0;color:var(--text-secondary);font-size:14px}.forgot-password-form{padding:30px}.forgot-password-success{padding:40px 30px;text-align:center}.forgot-password-success h2{margin:0 0 15px;color:var(--text-primary);font-size:24px}.forgot-password-success p{color:var(--text-secondary);margin:0 0 10px;line-height:1.6}[data-theme=dark] .forgot-password-page{background:linear-gradient(135deg,#4c5fc7,#5a3a7a)}.reset-password-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#667eea,#764ba2);padding:20px}.reset-password-container{background:var(--bg-primary);border-radius:12px;box-shadow:0 10px 40px #0003;width:100%;max-width:450px;overflow:hidden}.reset-password-header{background:var(--bg-secondary);padding:30px;text-align:center;border-bottom:1px solid var(--border-color)}.reset-password-header h1{margin:0 0 10px;font-size:28px;color:var(--text-primary)}.reset-password-header p{margin:0;color:var(--text-secondary);font-size:14px}.reset-password-form{padding:30px}.form-group label{display:block;margin-bottom:8px;font-weight:500;color:var(--text-primary)}.form-group input{width:100%;padding:12px;border:1px solid var(--border-color);border-radius:6px;font-size:14px;background:var(--bg-primary);color:var(--text-primary);transition:border-color .2s}.form-group input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #667eea1a}.form-group input:disabled{opacity:.6;cursor:not-allowed}.submit-btn{width:100%;padding:14px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;border-radius:6px;font-size:16px;font-weight:600;cursor:pointer;transition:transform .2s,box-shadow .2s}.submit-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 5px 15px #667eea4d}.submit-btn:disabled{opacity:.6;cursor:not-allowed}.error-message{background:#fee;color:#c00;padding:12px;border-radius:6px;margin-bottom:20px;font-size:14px;border-left:4px solid #c00}.form-footer{margin-top:20px;text-align:center}.back-link{color:var(--primary-color);text-decoration:none;font-size:14px;transition:color .2s}.back-link:hover{color:#764ba2;text-decoration:underline}.reset-password-success{padding:40px 30px;text-align:center}.success-icon{width:80px;height:80px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:48px;margin:0 auto 20px;animation:scaleIn .5s ease}@keyframes scaleIn{0%{transform:scale(0)}to{transform:scale(1)}}.reset-password-success h2{margin:0 0 15px;color:var(--text-primary);font-size:24px}.reset-password-success p{color:var(--text-secondary);margin:0 0 10px;line-height:1.6}.success-note{font-size:13px;color:var(--text-tertiary);margin-bottom:25px!important}.back-to-login-btn{display:inline-block;padding:12px 30px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;text-decoration:none;border-radius:6px;font-weight:600;transition:transform .2s,box-shadow .2s}.back-to-login-btn:hover{transform:translateY(-2px);box-shadow:0 5px 15px #667eea4d}[data-theme=dark] .reset-password-page{background:linear-gradient(135deg,#4c5fc7,#5a3a7a)}.plant-detail-card{background:var(--bg-1, #1D2638);border:1px solid var(--border-subtle, rgba(255, 255, 255, .1));border-radius:12px;padding:16px;margin-bottom:16px;transition:all .2s ease}.plant-detail-card.edit-mode{border-color:var(--primary, #3B83F9);background:var(--bg-1, #1D2638)}.plant-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px;gap:16px;flex-wrap:wrap}.plant-header h1{margin:0;font-size:24px;color:var(--text-0, #E6EDF6)}.header-actions{display:flex;align-items:center;gap:12px}.status-badge{padding:8px 16px;border-radius:50px;font-size:14px;font-weight:600;white-space:nowrap}.status-badge.active{background:#10b98126;color:#10b981;border:1px solid #10B981}.status-badge.maintenance{background:#f59e0b26;color:#f59e0b;border:1px solid #F59E0B}.plant-info-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.info-item{display:flex;flex-direction:column;gap:8px}.info-item.full-width{grid-column:1 / -1}.info-item strong{font-size:12px;font-weight:600;text-transform:uppercase;color:var(--text-1, #A9B4C7);letter-spacing:.5px}.info-item p{margin:0;font-size:14px;color:var(--text-0, #E6EDF6);line-height:1.4}.subnet-badge{display:inline-block;background:var(--bg-2, #24304A);padding:8px 12px;border-radius:8px;font-family:monospace;font-size:14px;border:1px solid var(--border-subtle, rgba(255, 255, 255, .1));color:var(--primary, #3B83F9)}.plant-detail-card.edit-mode h2{margin-top:0;margin-bottom:20px;color:var(--text-primary)}.form-group{margin-bottom:12px}.form-group label{display:block;margin-bottom:8px;font-weight:600;font-size:14px;color:var(--text-primary)}.form-control{width:100%;padding:8px 10px;border:1px solid var(--border-primary);border-radius:var(--radius-base);background:var(--bg-primary);color:var(--text-primary);font-size:13px;font-family:inherit;transition:border-color var(--duration-fast) var(--ease-standard)}textarea.form-control{resize:vertical;min-height:80px}.form-actions{display:flex;gap:10px;margin-top:16px}.btn.btn-sm{padding:6px 12px;font-size:13px}@media(max-width:768px){.plant-detail-card{padding:16px}.plant-header{flex-direction:column;align-items:flex-start}.plant-header h1{font-size:24px}.plant-info-grid{grid-template-columns:1fr}.header-actions{width:100%;justify-content:space-between}}.plant-detail-page{padding:20px;max-width:1200px;margin:0 auto}.plant-detail-header-compact{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:20px;background:var(--panel);padding:16px 20px;border-radius:8px;border:1px solid rgba(59,130,246,.2)}.header-left{display:flex;align-items:center}.header-center{flex:1;min-width:0}.header-center h1{margin:0 0 6px;font-size:22px;font-weight:700;color:var(--text-0,#E6EDF6)}.header-meta{display:flex;flex-wrap:wrap;gap:12px;align-items:center}.meta-item{font-size:13px;color:var(--text-1,#a9b4c7);display:flex;align-items:center;gap:4px;white-space:nowrap}.header-right{display:flex;align-items:center;gap:12px}.status-badge{padding:6px 14px;border-radius:20px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}.status-badge.active{background:#22c55e26;color:#22c55e;border:1.5px solid #22c55e}.status-badge.maintenance{background:#f59e0b26;color:#f59e0b;border:1.5px solid #f59e0b}.plant-detail-header{display:flex;align-items:center;gap:16px;margin-bottom:24px;background:var(--panel);padding:16px;border-radius:8px}.btn-back{background:none;border:1px solid var(--border-subtle, rgba(255, 255, 255, .2));padding:8px 12px;border-radius:4px;cursor:pointer;font-size:14px;color:var(--text-0, #E6EDF6);transition:all .2s}.btn-back:hover{background:var(--bg-2, #2A364B);border-color:var(--primary, #3B83F9);color:var(--primary, #3B83F9)}.plant-detail-header h1{margin:0;flex:1}.plant-address{margin:4px 0 0;color:var(--muted-text)}.plant-info-section{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px;margin-bottom:24px}.info-card{background:var(--panel);padding:16px;border-radius:8px}.info-card label{font-weight:600;display:block;margin-bottom:8px}.info-card p{margin:0;color:var(--text)}.subnet-badge{background:var(--accent);color:#fff;padding:4px 8px;border-radius:4px;display:inline-block}.camera-points-section{background:var(--panel);padding:20px;border-radius:8px}.camera-points-section h2{margin-top:0}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:12px}.section-actions{display:flex;gap:8px}.filters-bar{display:flex;gap:12px;margin-bottom:16px;flex-wrap:wrap}.search-input{flex:1;min-width:200px;padding:10px 12px;background:var(--bg-secondary,#2d3748);border:1px solid rgba(59,130,246,.3);border-radius:4px;color:var(--text-primary,#e6edf6);font-size:13px}.search-input:focus{outline:none;border-color:var(--accent-primary,#3b82f6)}.filter-select{padding:10px 12px;background:var(--bg-secondary,#2d3748);border:1px solid rgba(59,130,246,.3);border-radius:4px;color:var(--text-primary,#e6edf6);font-size:13px;cursor:pointer}.filter-select:focus{outline:none;border-color:var(--accent-primary,#3b82f6)}.stats-section{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:24px}.stat-card{background:var(--panel);padding:16px;border-radius:8px;display:flex;align-items:center;gap:12px}.stat-icon{font-size:28px}.stat-content{flex:1}.stat-value{font-size:24px;font-weight:700;margin-bottom:4px;color:var(--text-primary,#e6edf6)}.stat-label{font-size:12px;color:var(--text-secondary,#b0b8c9)}.stat-types{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.type-badge{background:#3b82f633;color:var(--accent-primary,#3b82f6);padding:3px 8px;border-radius:4px;font-size:11px}.camera-points-list{display:flex;flex-direction:column;gap:16px}.camera-point-card{background:var(--bg-primary,#1a2332);border:1px solid rgba(59,130,246,.3);border-radius:8px;padding:0;transition:all .2s}.camera-point-card:hover{border-color:var(--accent-primary,#3b82f6);box-shadow:0 2px 8px #3b82f633}.point-header{display:flex;align-items:center;gap:12px;padding:16px;border-bottom:1px solid rgba(59,130,246,.1)}.drag-handle{background:none;border:none;color:var(--text-secondary,#b0b8c9);font-size:18px;cursor:move;padding:4px 6px;transition:all .2s;flex-shrink:0;line-height:1}.drag-handle:hover{color:var(--accent-primary,#3b82f6);background:#3b82f61a;border-radius:4px}.point-pin-icon{font-size:18px;flex-shrink:0}.point-info{flex:0 1 auto;min-width:200px}.point-title{margin:0;font-size:15px;font-weight:600;color:var(--text-primary,#e6edf6)}.point-coords{margin:4px 0 0;font-size:11px;color:var(--text-secondary,#b0b8c9)}.devices-badge{background:#3b82f626;color:var(--accent-primary,#3b82f6);padding:4px 10px;border-radius:12px;font-size:12px;font-weight:600;white-space:nowrap;flex-shrink:0}.pill-toggle{background:var(--bg-secondary,#2d3748);border:1px solid rgba(59,130,246,.3);color:var(--text-primary,#e6edf6);padding:6px 12px;border-radius:16px;font-size:11px;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap;display:flex;align-items:center;gap:4px;text-transform:uppercase;letter-spacing:.5px}.pill-toggle:hover{border-color:var(--accent-primary,#3b82f6);background:#3b82f61a}.pill-toggle.active{background:var(--accent-primary,#3b82f6);border-color:var(--accent-primary,#3b82f6);color:#fff}.pill-toggle .caret{font-size:12px}.icon-btn{background:none;border:none;font-size:18px;cursor:pointer;padding:6px;transition:all .2s;color:var(--text-secondary,#b0b8c9);border-radius:4px;flex-shrink:0}.icon-btn:hover{background:#3b82f626;color:var(--accent-primary,#3b82f6)}.icon-btn.danger:hover{background:#ef444426;color:#ef4444}.icon-btn:disabled{opacity:.3;cursor:not-allowed;pointer-events:none}.share-dropdown-container{position:relative;display:inline-block}.share-dropdown-menu{position:absolute;top:calc(100% + 4px);right:0;background:var(--bg-secondary,#2d3748);border:1px solid rgba(59,130,246,.3);border-radius:6px;box-shadow:0 4px 12px #0000004d;min-width:200px;z-index:100;overflow:hidden;animation:slideDown .2s ease}.share-menu-item{width:100%;padding:10px 16px;border:none;background:transparent;color:var(--text-primary,#e6edf6);font-size:13px;text-align:left;cursor:pointer;transition:all .2s;display:flex;align-items:center;gap:8px;border-bottom:1px solid rgba(59,130,246,.1)}.share-menu-item:last-child{border-bottom:none}.share-menu-item:hover{background:#3b82f626;color:var(--accent-primary,#3b82f6)}.devices-section{padding:16px}.devices-table th{text-align:left;padding:10px 12px;background:var(--bg-secondary,#2d3748);color:var(--text-secondary,#b0b8c9);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.5px;border-bottom:2px solid rgba(59,130,246,.2)}.devices-table td{padding:12px;border-bottom:1px solid rgba(59,130,246,.1);color:var(--text-primary,#e6edf6)}.devices-table tbody tr:last-child td{border-bottom:none}.password-cell{display:flex;align-items:center;gap:8px}.password-text{font-family:Courier New,monospace;font-size:12px;color:var(--text-secondary,#b0b8c9)}.eye-icon{background:none;border:none;font-size:16px;cursor:pointer;padding:2px 4px;transition:all .2s;opacity:.6}.eye-icon:hover{opacity:1;transform:scale(1.1)}.actions-cell{white-space:nowrap}.icon-btn-small{background:none;border:none;font-size:16px;cursor:pointer;padding:4px 6px;transition:all .2s;color:var(--text-secondary,#b0b8c9);border-radius:4px;margin:0 2px}.icon-btn-small:hover{background:#3b82f626;color:var(--accent-primary,#3b82f6)}.icon-btn-small.danger:hover{background:#ef444426;color:#ef4444}.devices-footer{margin-top:16px;display:flex;justify-content:flex-end}.caret-toggle,.point-row{display:none}.device-count{font-size:12px;color:var(--accent-primary,#3b82f6);background:#3b82f61a;padding:2px 8px;border-radius:4px;display:inline-block;margin-top:4px}.empty-state{text-align:center;padding:40px 20px;color:var(--muted-text)}.camera-points-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;margin-top:16px}.camera-point-card{background:var(--bg);border:1px solid var(--muted);border-radius:6px;padding:12px;cursor:pointer;transition:all .2s}.camera-point-card:hover{border-color:var(--accent);box-shadow:0 4px 12px #0000001a}.camera-point-card h4{margin:0 0 6px;font-size:14px}.camera-point-card .location{font-size:12px;color:var(--muted-text);margin:0 0 8px}.photo-preview{width:100%;height:120px;border-radius:4px;overflow:hidden;margin:8px 0}.photo-preview img{width:100%;height:100%;object-fit:cover}.point-meta{display:flex;justify-content:space-between;font-size:11px;margin-top:8px;padding-top:8px;border-top:1px solid var(--muted)}.point-date{color:var(--muted-text)}@media(max-width:768px){.plant-detail-header-compact{flex-direction:column;align-items:stretch;gap:12px;padding:12px 16px}.header-left,.header-right{justify-content:center}.header-center{text-align:center}.header-center h1{font-size:18px}.header-meta{flex-direction:column;gap:6px;align-items:center}.meta-item{font-size:12px}.stats-section{grid-template-columns:repeat(2,1fr);gap:12px}.stat-card{padding:12px}.stat-icon{font-size:22px}.stat-value{font-size:20px}.point-header{flex-wrap:wrap;gap:8px}.point-info{min-width:auto;flex:1 1 100%}.pill-toggle{font-size:10px;padding:4px 8px}.devices-badge{font-size:11px;padding:3px 8px}.devices-table{font-size:12px}.devices-table th,.devices-table td{padding:8px 6px}.devices-table th:nth-child(6),.devices-table td:nth-child(6),.devices-table th:nth-child(7),.devices-table td:nth-child(7){display:none}.icon-btn,.icon-btn-small{font-size:14px;padding:4px}}.photos-gallery{padding:12px 16px;background:var(--bg-secondary, #2d3748);border-top:1px solid rgba(59,130,246,.1)}.photos-row{display:flex;gap:8px;align-items:center}.gallery-thumb{width:80px;height:80px;object-fit:cover;border-radius:6px;border:2px solid var(--accent-primary, #3b82f6);cursor:pointer;transition:all .2s}.gallery-thumb:hover{transform:scale(1.05);box-shadow:0 4px 12px #3b82f666;border-color:#60a5fa}.more-photos{width:80px;height:80px;display:flex;align-items:center;justify-content:center;background:#3b82f633;border:2px solid var(--accent-primary, #3b82f6);border-radius:6px;font-size:18px;font-weight:600;color:var(--accent-primary, #3b82f6);cursor:default}[data-theme=light] .photos-gallery{background:#f9fafb;border-top-color:#e5e7eb}[data-theme=light] .gallery-thumb{border-color:#3b82f6}[data-theme=light] .more-photos{background:#3b82f61a;border-color:#3b82f6;color:#3b82f6}.device-modal-overlay{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1300;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.device-modal{background:#1a2332;padding:20px;border-radius:10px;width:520px;max-width:96%;box-shadow:0 20px 60px #00000080;border:2px solid #3b82f6}.device-modal h3{margin:0 0 12px;color:#e6edf6}.device-modal .row{display:flex;flex-direction:column;margin-bottom:12px}.device-modal label{font-size:13px;color:#a9b4c7;margin-bottom:6px}.device-modal input,.device-modal select{padding:10px;border-radius:6px;border:1.5px solid #3b4c66;background:#0f1419;color:#e6edf6}.device-modal .actions{display:flex;gap:10px;justify-content:flex-end;margin-top:12px}.device-modal .btn-primary{background:#3b82f6;color:#fff;border:none;padding:10px 14px;border-radius:6px}.device-modal .btn-secondary{background:#3b4c66;color:#e6edf6;border:1px solid #3b4c66;padding:10px 14px;border-radius:6px}.btn-pass-toggle{background:#2b3846;border:1px solid #3b4c66;color:#e6edf6;padding:6px 8px;border-radius:6px}.btn-pass-toggle:hover{background:#3b4c66}.toast{position:fixed;bottom:20px;right:20px;padding:12px 16px;border-radius:6px;background:#1a2332;color:#e6edf6;border:1px solid #3b82f6;box-shadow:0 4px 12px #0000004d;z-index:2000;animation:slideInRight .3s ease}@keyframes slideInRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.toast-success{border-color:#10b981;background:#0a3d2a}.toast-error{border-color:#ef4444;background:#3d0a0a}.toast-warning{border-color:#f59e0b;background:#3d2a0a}.toast-info{border-color:#3b82f6}.modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1100}.modal-content{background:var(--bg-primary, #1a2332);border:2px solid var(--accent-primary, #3b82f6);border-radius:8px;max-width:650px;width:90%;max-height:90vh;overflow-y:auto;box-shadow:0 8px 32px #0006}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:20px;border-bottom:1px solid rgba(59,130,246,.2)}.modal-header h3{margin:0;font-size:18px;font-weight:600;color:var(--text-primary, #e6edf6)}.modal-close{background:none;border:none;font-size:24px;color:var(--text-secondary, #b0b8c9);cursor:pointer;transition:color .2s}.modal-close:hover{color:var(--text-primary, #e6edf6)}.modal-form{padding:20px}.form-group{margin-bottom:16px}.form-group label{display:block;margin-bottom:6px;font-size:13px;font-weight:500;color:var(--text-primary, #e6edf6)}.form-group input,.form-group textarea,.form-group select{width:100%;padding:10px 12px;background:var(--bg-secondary, #2d3748);border:1px solid rgba(59,130,246,.3);border-radius:4px;color:var(--text-primary, #e6edf6);font-family:inherit;font-size:13px;transition:border-color .2s}.form-group input:focus,.form-group textarea:focus,.form-group select:focus{outline:none;border-color:var(--accent-primary, #3b82f6)}.form-group textarea{resize:vertical}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.error-message{background:#ef44441a;border:1px solid #ef4444;color:#fecaca;padding:10px 12px;border-radius:4px;margin-bottom:16px;font-size:13px}.modal-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:20px;padding-top:16px;border-top:1px solid rgba(59,130,246,.2)}.modal-actions .btn{padding:8px 16px;border:none;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s}.modal-actions .btn:disabled{opacity:.6;cursor:not-allowed}.modal-actions .btn-primary{background:var(--accent-primary, #3b82f6);color:#fff}.modal-actions .btn-primary:hover:not(:disabled){background:#2563eb}.modal-actions .btn-secondary{background:var(--bg-secondary, #2d3748);color:var(--text-primary, #e6edf6)}.modal-actions .btn-secondary:hover{background:#3d4758}.geocode-row{display:flex;gap:8px;align-items:stretch}.geocode-row input{flex:1}.btn-geocode{padding:0 16px;background:var(--accent-primary, #3b82f6);color:#fff;border:none;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s;white-space:nowrap}.btn-geocode:hover:not(:disabled){background:#2563eb;transform:translateY(-1px)}.btn-geocode:disabled{opacity:.6;cursor:not-allowed}.hint-text{display:block;margin-top:6px;font-size:.75rem;color:var(--text-secondary, #b0b8c9);font-style:italic}.photos-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px;margin-bottom:16px}.photo-item{position:relative;aspect-ratio:1;border-radius:8px;overflow:hidden;border:2px solid var(--accent-primary, #3b82f6);background:var(--bg-secondary, #2d3748)}.photo-item.preview{border-color:#10b981}.photo-item img{width:100%;height:100%;object-fit:cover}.photo-delete{position:absolute;top:4px;right:4px;background:#ef4444e6;color:#fff;border:none;border-radius:50%;width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:14px;font-weight:700;transition:all .2s}.photo-delete:hover{background:#dc2626;transform:scale(1.1)}.photo-badge{position:absolute;bottom:4px;left:4px;background:#10b981;color:#fff;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.upload-area{display:flex;flex-direction:column;align-items:center;gap:8px;padding:24px;border:2px dashed var(--accent-primary, #3b82f6);border-radius:8px;background:var(--bg-secondary, #2d3748);margin-bottom:12px}.upload-label{padding:10px 20px;background:var(--accent-primary, #3b82f6);color:#fff;border-radius:6px;cursor:pointer;font-size:14px;font-weight:500;transition:all .2s}.upload-label:hover{background:#2563eb;transform:translateY(-1px)}.upload-area small{color:var(--text-secondary, #b0b8c9);font-size:12px}.btn-upload-now{width:100%;padding:10px 16px;background:#10b981;color:#fff;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s;margin-top:8px}.btn-upload-now:hover:not(:disabled){background:#059669;transform:translateY(-1px)}.btn-upload-now:disabled{opacity:.6;cursor:not-allowed}[data-theme=light] .photo-item{background:#f3f4f6;border-color:#3b82f6}[data-theme=light] .upload-area{background:#f9fafb;border-color:#3b82f6}[data-theme=light] .upload-area small,[data-theme=light] .hint-text{color:#6b7280}[data-theme=light] .geocode-row input{background:#f9fafb;border-color:#d1d5db;color:#111827}.confirm-overlay{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:2000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.confirm-modal{background:var(--bg-primary, #1a2332);border:2px solid var(--color-primary, #3b82f6);border-radius:12px;padding:20px;max-width:500px;width:90%;box-shadow:0 8px 32px #0006}.confirm-modal h3{margin:0 0 16px;font-size:1.1rem;font-weight:700;color:var(--text-primary, #e6edf6);display:flex;align-items:center;gap:.5rem}.confirm-modal p{margin:0 0 16px;font-size:.9rem;color:var(--text-secondary, #b0b8c9);line-height:1.5}.confirm-input-group{margin:16px 0 20px}.confirm-input{width:100%;padding:10px 12px;background:var(--bg-secondary, #2d3748);border:1px solid rgba(59,130,246,.3);border-radius:6px;color:var(--text-primary, #e6edf6);font-size:14px;transition:all .2s}.confirm-input:focus{outline:none;border-color:var(--accent-primary, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.confirm-content{margin:16px 0}.confirm-actions{display:flex;gap:12px;justify-content:flex-end}.confirm-actions .btn{padding:.6rem 1.25rem;border:none;border-radius:6px;font-size:.9rem;font-weight:600;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:.5rem}.confirm-actions .btn-primary{background:var(--color-primary, #3b82f6);color:#fff}.confirm-actions .btn-primary:hover{background:var(--color-primary-hover, #2563eb);transform:translateY(-1px);box-shadow:0 4px 12px #3b82f64d}.confirm-actions .btn-danger{background:#ef4444;color:#fff}.confirm-actions .btn-danger:hover{background:#dc2626}.confirm-actions .btn-secondary{background:var(--bg-secondary, #2d3748);color:var(--text-primary, #e6edf6)}.confirm-actions .btn-secondary:hover{background:var(--bg-tertiary, #3d4758)}@media(max-width:640px){.confirm-modal{max-width:95%;padding:16px}.confirm-modal h3{font-size:1rem}.confirm-actions{flex-direction:column-reverse}.confirm-actions .btn{width:100%;justify-content:center}}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg{max-width:none!important;max-height:none!important}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important;width:auto;padding:0}.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}svg.leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline-offset:1px}.leaflet-container a{color:#0078a8}.leaflet-zoom-box{border:2px dotted #38f;background:#ffffff80}.leaflet-container{font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;font-size:.75rem;line-height:1.5}.leaflet-bar{box-shadow:0 1px 5px #000000a6;border-radius:4px}.leaflet-bar a{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover,.leaflet-bar a:focus{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:700 18px Lucida Console,Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px #0006;background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block;font-size:13px;font-size:1.08333em}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=)}.leaflet-container .leaflet-control-attribution{background:#fff;background:#fffc;margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover,.leaflet-control-attribution a:focus{text-decoration:underline}.leaflet-attribution-flag{display:inline!important;vertical-align:baseline!important;width:1em;height:.6669em}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box;background:#fffc;text-shadow:1px 1px #fff}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 24px 13px 20px;line-height:1.3;font-size:13px;font-size:1.08333em;min-height:1px}.leaflet-popup-content p{margin:1.3em 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px #0006}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover,.leaflet-container a.leaflet-popup-close-button:focus{color:#585858}.leaflet-popup-scrolled{overflow:auto}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=.70710678,M12=.70710678,M21=-.70710678,M22=.70710678)}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px #0006}.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}@media print{.leaflet-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}}.link-modal-overlay{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1500;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.link-modal-content{background:var(--bg-primary,#1a2332);border-radius:8px;width:90%;max-width:520px;max-height:90vh;overflow-y:auto;box-shadow:0 8px 32px #00000080;animation:linkModalSlide .3s ease-out}@keyframes linkModalSlide{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.link-modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:2px solid var(--accent-primary,#3b82f6)}.link-modal-header h3{margin:0;font-size:18px;font-weight:600;color:var(--text-primary,#e6edf6)}.link-modal-close{background:none;border:none;color:var(--text-secondary,#b0b8c9);font-size:24px;cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}.link-modal-close:hover{background:#ffffff1a;color:var(--text-primary,#e6edf6)}.link-modal-form{padding:24px}.link-form-field{margin-bottom:20px}.link-form-field label{display:block;font-size:13px;font-weight:600;color:var(--text-secondary,#b0b8c9);margin-bottom:8px;text-transform:uppercase;letter-spacing:.5px}.link-form-field select,.link-form-field textarea{width:100%;padding:10px 12px;background:var(--bg-secondary,#2d3748);border:1px solid rgba(59,130,246,.3);border-radius:4px;color:var(--text-primary,#e6edf6);font-size:14px;font-family:inherit;transition:border-color .2s}.link-form-field select:focus,.link-form-field textarea:focus{outline:none;border-color:var(--accent-primary,#3b82f6)}.link-form-field select.error,.link-form-field textarea.error{border-color:#ef4444}.link-form-field select:disabled{opacity:.6;cursor:not-allowed}.link-tecnologia-options{display:flex;gap:12px;flex-wrap:wrap}.link-radio-option{cursor:pointer}.link-radio-option input[type=radio]{display:none}.link-radio-label{display:flex;align-items:center;gap:8px;padding:10px 16px;background:var(--bg-secondary,#2d3748);border:2px solid transparent;border-radius:6px;font-size:14px;font-weight:500;color:var(--text-primary,#e6edf6);transition:all .2s;cursor:pointer}.link-radio-label:hover{background:#3d4758}.link-radio-dot{width:12px;height:12px;border-radius:50%;display:block}.link-char-counter{text-align:right;font-size:12px;color:var(--text-secondary,#b0b8c9);margin-top:4px}.link-error-text{display:block;color:#ef4444;font-size:12px;margin-top:4px}.link-error-banner{background:#ef44441a;border:1px solid #ef4444;color:#ef4444;padding:12px;border-radius:4px;font-size:13px;margin-bottom:16px}.link-preview{margin-top:20px;padding:16px;background:var(--bg-secondary,#2d3748);border-radius:6px;border-left:3px solid var(--accent-primary,#3b82f6)}.link-preview label{display:block;font-size:11px;font-weight:600;color:var(--text-secondary,#b0b8c9);margin-bottom:8px;text-transform:uppercase;letter-spacing:.5px}.link-preview-content{color:var(--text-primary,#e6edf6)}.link-preview-name{margin:0 0 4px;font-size:15px;font-weight:600}.link-preview-devices{margin:0 0 8px;font-size:12px;color:var(--accent-primary,#3b82f6)}.link-preview-list{list-style:none;padding:0;margin:0}.link-preview-list li{font-size:12px;padding:4px 0;color:var(--text-secondary,#b0b8c9)}.link-preview-ip{color:var(--accent-primary,#3b82f6);font-weight:500}.link-preview-more{font-style:italic;color:var(--text-secondary,#b0b8c9)}.link-modal-actions{display:flex;gap:12px;margin-top:24px}.link-modal-actions button{flex:1;padding:12px;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}.link-btn-cancel{background:var(--bg-secondary,#2d3748);color:var(--text-primary,#e6edf6)}.link-btn-cancel:hover:not(:disabled){background:#3d4758}.link-btn-save{background:var(--accent-primary,#3b82f6);color:#fff}.link-btn-save:hover:not(:disabled){background:#2563eb}.link-modal-actions button:disabled{opacity:.5;cursor:not-allowed}.link-reverse-section{margin-bottom:20px;padding:12px;background:#3b82f60d;border-radius:6px;border:1px dashed rgba(59,130,246,.3)}.btn-reverse-direction{width:100%;padding:10px 16px;background:var(--bg-secondary,#2d3748);border:2px solid var(--accent-primary,#3b82f6);color:var(--accent-primary,#3b82f6);border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}.btn-reverse-direction:hover{background:#3b82f61a}.btn-reverse-direction.active{background:var(--accent-primary,#3b82f6);color:#fff;border-color:var(--accent-primary,#3b82f6)}.reverse-info{margin:8px 0 0;font-size:12px;color:var(--text-secondary,#b0b8c9);text-align:center}.reverse-info strong{color:var(--accent-primary,#3b82f6)}.plant-map-page{padding:0;height:100vh;display:flex;flex-direction:column}.map-header{display:flex;align-items:center;gap:16px;padding:16px 20px;background:var(--panel);border-bottom:1px solid var(--muted);z-index:1050}.map-header h1{margin:0;font-size:20px}.map-subtitle{margin:4px 0 0;font-size:13px;color:var(--text-secondary,#b0b8c9)}.map-toolbar{display:flex;gap:8px;position:relative;z-index:1051}.btn-edit-mode{padding:8px 16px;border:2px solid var(--accent-primary,#3b82f6);background:transparent;color:var(--accent-primary,#3b82f6);border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s}.btn-edit-mode:hover{background:#3b82f61a}.btn-edit-mode.active{background:var(--accent-primary,#3b82f6);color:#fff}.add-point-dropdown{position:relative;z-index:1052}.btn-add-point{padding:8px 16px;border:2px solid var(--accent-primary,#3b82f6);background:var(--accent-primary,#3b82f6);color:#fff;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s}.btn-add-point:hover{background:#2563eb;border-color:#2563eb}.btn-cancel-creating{padding:8px 16px;border:2px solid #ef4444;background:#ef4444;color:#fff;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s}.btn-cancel-creating:hover{background:#dc2626;border-color:#dc2626}.dropdown-menu{position:absolute;top:calc(100% + 4px);right:0;background:var(--panel,#1a2332);border:1px solid rgba(59,130,246,.3);border-radius:6px;box-shadow:0 4px 12px #0000004d;min-width:220px;z-index:1053;overflow:hidden}.dropdown-item{width:100%;padding:10px 16px;border:none;background:transparent;color:var(--text-primary,#e6edf6);font-size:13px;text-align:left;cursor:pointer;transition:all .2s;display:flex;align-items:center;gap:8px}.dropdown-item:hover{background:#3b82f61a;color:var(--accent-primary,#3b82f6)}.dropdown-item:not(:last-child){border-bottom:1px solid rgba(59,130,246,.1)}.map-container{flex:1;position:relative}.plant-leaflet-map{width:100%;height:100%}.map-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#0000000d;z-index:5}.map-empty p{font-size:16px;color:var(--muted-text)}.custom-marker-icon{background:none;border:none}.marker-badge{position:absolute;top:-8px;right:-8px;background:#3b82f6;color:#fff;font-size:10px;font-weight:700;padding:2px 6px;border-radius:50%;min-width:18px;height:18px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px #0000004d;border:2px solid white}.point-popup .popup-content h4{margin:0 0 8px}.point-popup .popup-devices{font-size:12px;color:var(--accent-primary,#3b82f6);margin-top:4px}.point-popup .popup-links{font-size:12px;color:#32cd32;margin-top:4px}.link-popup{font-size:13px}.link-popup strong{display:block;margin-bottom:6px;font-size:14px}.link-popup p{margin:4px 0}.point-drawer{position:fixed;right:0;top:64px;bottom:0;width:360px;max-width:90vw;background:var(--bg-primary,#1a2332);border-left:2px solid var(--accent-primary,#3b82f6);display:flex;flex-direction:column;box-shadow:-4px 0 16px #0000004d;z-index:1000;animation:slideIn .3s ease-out}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}.point-drawer .drawer-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid rgba(59,130,246,.2)}.point-drawer .drawer-header h3{margin:0;font-size:16px;font-weight:600;color:var(--text-primary,#e6edf6)}.point-drawer .drawer-close{background:none;border:none;color:var(--text-secondary,#b0b8c9);font-size:20px;cursor:pointer;padding:4px 8px;transition:color .2s}.point-drawer .drawer-close:hover{color:var(--text-primary,#e6edf6)}.point-drawer .drawer-body{flex:1;overflow-y:auto;padding:20px}.point-drawer .drawer-section{margin-bottom:20px}.point-drawer .drawer-section label{display:block;font-size:12px;font-weight:600;text-transform:uppercase;color:var(--text-secondary,#b0b8c9);letter-spacing:.5px;margin-bottom:6px}.point-drawer .drawer-section p{margin:0;color:var(--text-primary,#e6edf6);font-size:14px;line-height:1.6}.point-drawer .drawer-section code{display:inline-block;padding:4px 8px;background:var(--bg-secondary,#2d3748);border:1px solid rgba(59,130,246,.3);border-radius:4px;color:var(--accent-primary,#3b82f6);font-size:13px;font-family:Courier New,monospace}.point-drawer .devices-count{color:var(--accent-primary,#3b82f6);font-weight:600}.point-drawer .devices-list{list-style:none;padding:0;margin:8px 0 0}.collegamenti-summary-section{background:#3b82f60d;border-radius:8px;padding:12px;margin-bottom:16px}.collegamenti-summary .summary-breakdown{display:flex;gap:16px;margin-top:8px;font-size:13px;color:var(--text-secondary, #b0b8c9)}.collegamenti-summary .summary-breakdown span{display:flex;align-items:center;gap:4px}.collegamenti-incoming{background:#10b98108;border-left:3px solid #10b981;padding-left:12px}.collegamento-card.incoming{border-left:3px solid #10b981}.collegamento-info-readonly{margin-top:8px;padding:6px 8px;background:#3b82f61a;border-radius:4px}.collegamento-info-readonly small{font-size:11px;color:var(--text-secondary, #b0b8c9);display:block}.point-drawer .devices-list li{padding:8px 10px;background:var(--bg-secondary,#2d3748);border-radius:4px;margin-bottom:6px;font-size:12px;color:var(--text-primary,#e6edf6)}.point-drawer .devices-list .device-ip,.point-drawer .devices-list .device-user{font-size:11px;color:var(--accent-primary,#3b82f6);margin-top:2px}.collegamenti-section{border-top:2px solid rgba(59,130,246,.2);padding-top:16px;margin-top:20px}.collegamenti-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.collegamenti-header label{margin:0}.btn-add-link{padding:6px 12px;background:var(--accent-primary,#3b82f6);color:#fff;border:none;border-radius:4px;font-size:11px;font-weight:600;cursor:pointer;transition:all .2s;text-transform:uppercase;letter-spacing:.3px}.btn-add-link:hover:not(:disabled){background:#2563eb}.btn-add-link:disabled{opacity:.5;cursor:not-allowed}.collegamenti-summary{background:linear-gradient(135deg,#3b82f61a,#9370db1a);border-radius:8px;padding:12px;margin-bottom:12px;border:1px solid rgba(59,130,246,.2)}.summary-total{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid rgba(59,130,246,.2)}.summary-icon{font-size:18px}.summary-text{font-size:14px;color:var(--text-primary,#e6edf6)}.summary-text strong{font-size:16px;color:var(--accent-primary,#3b82f6)}.summary-points-list{display:flex;flex-direction:column;gap:6px}.summary-point-item{display:flex;align-items:center;gap:8px;padding:6px 10px;background:#0003;border-radius:6px;transition:all .2s}.summary-point-item:hover{background:#00000059}.summary-tech-icon{font-size:14px}.summary-point-badge{width:8px;height:8px;border-radius:50%;display:block;box-shadow:0 0 4px #ffffff4d}.summary-point-name{flex:1;font-size:13px;color:var(--text-primary,#e6edf6);font-weight:500}.summary-tech-label{font-size:11px;color:var(--text-secondary,#b0b8c9);font-style:italic}.collegamenti-empty{text-align:center;padding:20px;background:var(--bg-secondary,#2d3748);border-radius:6px;border:1px dashed rgba(59,130,246,.3)}.collegamenti-empty p{font-size:14px;margin:0 0 8px;color:var(--text-primary,#e6edf6)}.collegamenti-empty small{font-size:12px;color:var(--text-secondary,#b0b8c9);line-height:1.4}.btn-add-link-empty{margin-top:12px;padding:8px 16px;background:var(--accent-primary,#3b82f6);color:#fff;border:none;border-radius:4px;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.btn-add-link-empty:hover{background:#2563eb}.collegamenti-list{display:flex;flex-direction:column;gap:8px}.collegamento-card{background:var(--bg-secondary,#2d3748);border-radius:6px;padding:12px;border-left:3px solid transparent;transition:all .2s}.collegamento-card.highlighted{border-left-color:var(--accent-primary,#3b82f6);background:#3d4758}.collegamento-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.collegamento-badge{width:12px;height:12px;border-radius:50%;display:block}.collegamento-header strong{font-size:13px;color:var(--text-primary,#e6edf6);flex:1}.collegamento-info p{margin:0;font-size:12px;color:var(--text-secondary,#b0b8c9);line-height:1.5}.collegamento-ip{color:var(--accent-primary,#3b82f6)!important;font-weight:500}.collegamento-note{font-style:italic;margin-top:4px!important;color:#8b95a8!important}.collegamento-actions{display:flex;gap:4px;margin-top:8px}.btn-icon-secondary,.btn-icon-danger{padding:4px 8px;border:none;background:#3b82f61a;color:var(--accent-primary,#3b82f6);border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s}.btn-icon-secondary:hover{background:#3b82f633}.btn-icon-danger{background:#ef44441a;color:#ef4444}.btn-icon-danger:hover{background:#ef444433}.point-drawer .drawer-actions{display:flex;gap:8px;padding:16px 20px;border-top:1px solid rgba(59,130,246,.2);flex-wrap:wrap}.point-drawer .drawer-actions .btn-primary{flex:1;min-width:100%;padding:10px;border:none;border-radius:4px;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s;background:var(--accent-primary,#3b82f6);color:#fff}.point-drawer .drawer-actions .btn-primary:hover{background:#2563eb}.point-drawer .drawer-actions .btn-secondary{flex:1;padding:10px;border:none;border-radius:4px;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s;background:var(--bg-secondary,#2d3748);color:var(--text-primary,#e6edf6)}.point-drawer .drawer-actions .btn-secondary:hover:not(:disabled){background:#3d4758}.point-drawer .drawer-actions .btn-secondary:disabled{opacity:.5;cursor:not-allowed}.point-drawer .drawer-actions .btn-secondary.active{background:var(--accent-primary,#3b82f6);color:#fff;border:1px solid #2563eb}.leaflet-popup-content-wrapper{background:var(--bg-primary, #1a2332)!important;color:var(--text-primary, #e6edf6)!important;border:2px solid var(--accent-primary, #3b82f6)!important;border-radius:8px!important;box-shadow:0 4px 16px #0006!important;padding:0!important}.leaflet-popup-content{margin:12px 16px!important;font-size:13px!important;line-height:1.5!important;color:var(--text-primary, #e6edf6)!important}.leaflet-popup-tip{background:var(--bg-primary, #1a2332)!important;border:2px solid var(--accent-primary, #3b82f6)!important;border-top:none!important;border-left:none!important}.leaflet-popup-close-button{color:var(--text-secondary, #b0b8c9)!important;font-size:20px!important;font-weight:700!important;padding:4px 8px!important}.leaflet-popup-close-button:hover{color:var(--text-primary, #e6edf6)!important;background:#3b82f61a!important;border-radius:4px!important}.leaflet-popup h4{margin:0 0 8px!important;color:var(--accent-primary, #3b82f6)!important;font-size:15px!important;font-weight:600!important}.leaflet-popup p{margin:4px 0!important;color:var(--text-secondary, #b0b8c9)!important;font-size:12px!important}.leaflet-popup strong{color:var(--text-primary, #e6edf6)!important}.leaflet-popup .popup-devices,.leaflet-popup .popup-links{display:inline-block;padding:3px 8px;background:#3b82f626;border-radius:4px;font-size:11px!important;font-weight:600;margin-top:6px}.leaflet-popup .popup-links{background:#10b98126;color:#10b981!important}[data-theme=light] .leaflet-popup-content-wrapper{background:#fff!important;color:#111827!important;border-color:#3b82f6!important;box-shadow:0 4px 16px #00000026!important}[data-theme=light] .leaflet-popup-content{color:#111827!important}[data-theme=light] .leaflet-popup-tip{background:#fff!important;border-color:#3b82f6!important}[data-theme=light] .leaflet-popup-close-button{color:#6b7280!important}[data-theme=light] .leaflet-popup-close-button:hover{color:#111827!important;background:#3b82f61a!important}[data-theme=light] .leaflet-popup h4{color:#3b82f6!important}[data-theme=light] .leaflet-popup p{color:#6b7280!important}[data-theme=light] .leaflet-popup strong{color:#111827!important}[data-theme=light] .leaflet-popup .popup-devices{background:#3b82f61a;color:#3b82f6!important}[data-theme=light] .leaflet-popup .popup-links{background:#10b9811a;color:#059669!important}.devices-table-container{margin-top:20px}.table-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:12px}.table-header h4{margin:0;color:var(--text-primary)}.no-devices{padding:20px;text-align:center;color:var(--text-secondary);background:var(--bg-primary);border-radius:var(--radius-md);border:1px dashed var(--border-primary)}.table-wrapper{overflow-x:auto;border-radius:var(--radius-md);border:1px solid var(--border-primary)}.devices-table{width:100%;border-collapse:collapse;font-size:13px}.devices-table thead{background:var(--bg-tertiary);border-bottom:2px solid var(--border-primary)}.devices-table th{padding:12px;text-align:left;font-weight:600;color:var(--text-primary);white-space:nowrap}.devices-table td{padding:12px;border-bottom:1px solid var(--border-primary);color:var(--text-primary)}.devices-table tbody tr:hover{background:var(--bg-tertiary)}.monospace{font-family:monospace;font-size:12px;color:var(--color-primary)}.actions{display:flex;gap:8px;justify-content:center}.btn-icon{background:none;border:none;cursor:pointer;font-size:16px;padding:4px 8px;border-radius:var(--radius-sm);transition:all var(--duration-fast) var(--ease-standard)}.btn-icon:hover{background:var(--color-secondary);transform:scale(1.15)}.btn-icon.delete:hover{background:#c0152f26}.device-form{background:var(--bg-primary);border:1px solid var(--color-primary);border-radius:var(--radius-lg);padding:20px;margin-top:20px}.device-form h4{margin-top:0;margin-bottom:20px;color:var(--text-primary)}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:20px}.form-group label{font-weight:600;font-size:12px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.form-control{padding:8px 12px;border:1px solid var(--border-primary);border-radius:var(--radius-base);background:var(--bg-secondary);color:var(--text-primary);font-size:13px;font-family:inherit;transition:border-color var(--duration-fast) var(--ease-standard)}.form-control:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-focus-ring)}.form-actions{display:flex;gap:12px}.btn-pass-toggle{background:transparent;border:1px solid rgba(255,255,255,.04);color:var(--text-primary);padding:6px 8px;border-radius:6px}.btn-pass-toggle:hover{background:#3b83f90f}.btn{padding:10px 16px;border-radius:var(--radius-base);font-weight:600;font-size:13px;cursor:pointer;border:none;transition:all var(--duration-fast) var(--ease-standard)}.btn-primary:hover{background:var(--color-primary-hover)}.btn-secondary:hover{background:var(--color-secondary)}.btn-sm{padding:6px 12px;font-size:12px}@media(max-width:768px){.devices-table{font-size:12px}.devices-table th,.devices-table td{padding:8px}.form-grid{grid-template-columns:1fr}}:root{--bg-0: #1b2332;--bg-1: #273448;--border-subtle: rgba(217, 221, 224, .12);--text-0: #d9dde0;--text-1: #969ba0;--primary: #3b83f9;--primary-hover: #5894ef;--transition: all .2s cubic-bezier(.4, 0, .2, 1);--radius-card: 12px;--radius-control: 10px;--radius-chip: 999px;--spacing-xs: 8px;--spacing-sm: 12px;--spacing-md: 16px;--spacing-lg: 20px;--spacing-xl: 24px;--shadow-dark: 0 6px 18px rgba(0, 0, 0, .25)}.camera-points-container{display:flex;flex-direction:column;gap:var(--spacing-lg);padding-bottom:var(--spacing-xl)}.camera-points-header{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-lg);flex-wrap:wrap;position:sticky;top:0;background:linear-gradient(180deg,var(--bg-0) 0%,var(--bg-0) 90%,transparent 100%);z-index:50;padding:var(--spacing-md) 0;margin-bottom:var(--spacing-md)}.camera-points-header-left{display:flex;align-items:center;gap:var(--spacing-md)}.camera-points-title{font-size:28px;font-weight:800;color:var(--text-0);margin:0;letter-spacing:-.5px}.camera-points-counter{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;background:#3b83f926;color:var(--primary);font-weight:700;font-size:14px;border-radius:var(--radius-chip)}.camera-points-header-right{display:flex;align-items:center;gap:var(--spacing-sm);flex-wrap:wrap}.camera-points-search{position:relative}.camera-points-search input{padding:10px 16px 10px 40px;border:1px solid var(--border-subtle);border-radius:var(--radius-control);background:var(--bg-1);color:var(--text-0);font-size:14px;font-family:inherit;min-width:220px;transition:var(--transition)}.camera-points-search input::placeholder{color:var(--text-1)}.camera-points-search input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #3b83f91a}.camera-points-search:before{content:"🔍";position:absolute;left:12px;top:50%;transform:translateY(-50%);font-size:16px;opacity:.6}.btn-add-point{padding:10px 20px;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-control);font-weight:700;font-size:14px;cursor:pointer;transition:var(--transition);display:flex;align-items:center;gap:8px;text-transform:uppercase;letter-spacing:.5px}.btn-add-point:hover{background:var(--primary-hover);transform:translateY(-2px);box-shadow:var(--shadow-dark)}.btn-add-point:active{transform:translateY(0)}.camera-points-filters{display:flex;gap:var(--spacing-xs);flex-wrap:wrap;margin-bottom:var(--spacing-md)}.filter-chip{padding:8px 16px;background:transparent;border:1px solid var(--border-subtle);color:var(--text-1);border-radius:var(--radius-chip);font-size:12px;font-weight:600;cursor:pointer;transition:var(--transition);text-transform:uppercase;letter-spacing:.5px}.filter-chip:hover,.filter-chip.active{border-color:var(--primary);color:var(--primary);background:#3b83f91a}.camera-points-list{display:flex;flex-direction:column;gap:var(--spacing-md)}.camera-point-card{background:linear-gradient(135deg,var(--bg-1),rgba(39,52,72,.7));border:1px solid var(--border-subtle);border-radius:var(--radius-card);overflow:hidden;transition:var(--transition)}.camera-point-card:hover{border-color:#3b83f94d;box-shadow:0 0 0 1px #3b83f933,var(--shadow-dark)}.camera-point-card.dragging{opacity:.5}.camera-point-summary{padding:var(--spacing-md);display:flex;align-items:center;gap:var(--spacing-md);justify-content:space-between;cursor:pointer;border-bottom:1px solid var(--border-subtle);transition:var(--transition)}.camera-point-card.expanded .camera-point-summary{background:#3b83f90d}.camera-point-summary:hover{background:#3b83f908}.camera-point-summary-left{display:flex;align-items:center;gap:var(--spacing-md);flex:1;min-width:0}.camera-point-drag-handle{flex-shrink:0;font-size:18px;cursor:grab;opacity:.5;transition:var(--transition)}.camera-point-card:hover .camera-point-drag-handle{opacity:1}.camera-point-summary-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.camera-point-title{font-size:16px;font-weight:700;color:var(--text-0);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.camera-point-coords{font-size:12px;color:var(--text-1);display:flex;align-items:center;gap:6px}.camera-point-coords-copy{cursor:pointer;opacity:0;transition:var(--transition);font-size:11px}.camera-point-summary:hover .camera-point-coords-copy{opacity:1}.camera-point-summary-meta{display:flex;align-items:center;gap:var(--spacing-xs);flex-shrink:0}.chip-counter{display:inline-flex;align-items:center;gap:4px;padding:4px 12px;background:#3b83f91f;color:var(--primary);border-radius:var(--radius-chip);font-size:12px;font-weight:600}.chip-counter.empty{background:#969ba01a;color:var(--text-1)}.camera-point-summary-actions{display:flex;align-items:center;gap:var(--spacing-xs);flex-shrink:0}.btn-expand{padding:6px 8px;background:transparent;border:1px solid var(--border-subtle);color:var(--text-1);border-radius:6px;cursor:pointer;font-size:14px;transition:var(--transition);display:flex;align-items:center;gap:4px}.btn-expand:hover{border-color:var(--primary);color:var(--primary);background:#3b83f90d}.btn-edit{padding:8px 16px;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-control);font-weight:700;font-size:12px;cursor:pointer;transition:var(--transition);text-transform:uppercase;letter-spacing:.5px}.btn-edit:hover{background:var(--primary-hover);transform:translateY(-1px);box-shadow:0 4px 12px #3b83f940}.menu-button{padding:6px 8px;background:transparent;border:1px solid var(--border-subtle);color:var(--text-1);border-radius:6px;cursor:pointer;font-size:14px;transition:var(--transition)}.menu-button:hover{border-color:var(--primary);color:var(--primary);background:#3b83f90d}.camera-point-details{max-height:0;overflow:hidden;opacity:0;transition:var(--transition)}.camera-point-card.expanded .camera-point-details{max-height:2000px;opacity:1}.camera-point-details-content{padding:var(--spacing-md);display:flex;flex-direction:column;gap:var(--spacing-lg)}.details-section{display:flex;flex-direction:column;gap:var(--spacing-sm)}.details-section-title{font-size:13px;font-weight:700;color:var(--text-1);text-transform:uppercase;letter-spacing:1px;margin:0}.devices-empty{padding:var(--spacing-lg) var(--spacing-md);text-align:center;color:var(--text-1);font-size:13px;background:#3b83f90d;border-radius:var(--radius-control)}.devices-list{display:flex;flex-direction:column;gap:var(--spacing-xs)}.device-item{padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-0);border:1px solid var(--border-subtle);border-radius:8px;display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-sm);font-size:13px;transition:var(--transition)}.device-item:hover{border-color:var(--primary);background:#3b83f908}.device-info{flex:1;display:flex;flex-direction:column;gap:2px}.device-name{font-weight:600;color:var(--text-0)}.device-ip{font-size:12px;color:var(--text-1)}.device-actions{display:flex;gap:var(--spacing-xs)}.device-actions button{padding:4px 8px;background:transparent;border:1px solid var(--border-subtle);color:var(--text-1);border-radius:6px;cursor:pointer;font-size:11px;transition:var(--transition)}.device-actions button:hover{border-color:var(--primary);color:var(--primary);background:#3b83f90d}.btn-add-device{padding:8px 16px;background:#3b83f91f;color:var(--primary);border:1px solid var(--primary);border-radius:var(--radius-control);font-weight:700;font-size:12px;cursor:pointer;transition:var(--transition);text-transform:uppercase;letter-spacing:.5px}.btn-add-device:hover{background:#3b83f933;transform:translateY(-1px)}.photos-header{display:flex;align-items:center;justify-content:space-between}.photos-counter{font-size:12px;color:var(--text-1);font-weight:600}.photos-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:var(--spacing-sm);margin-bottom:var(--spacing-md)}.photo-thumb{position:relative;aspect-ratio:4 / 3;background:var(--bg-0);border:1px solid var(--border-subtle);border-radius:var(--radius-control);overflow:hidden;cursor:pointer;transition:var(--transition)}.photo-thumb:hover{border-color:var(--primary);box-shadow:0 0 0 2px #3b83f926}.photo-thumb img{width:100%;height:100%;object-fit:cover}.photo-thumb-delete{position:absolute;top:4px;right:4px;background:#000000b3;border:none;color:#fff;width:28px;height:28px;border-radius:50%;cursor:pointer;opacity:0;transition:var(--transition);font-size:14px;padding:0}.photo-thumb:hover .photo-thumb-delete{opacity:1}.photo-thumb-delete:hover{background:#ef4444e6}.dropzone{padding:var(--spacing-lg);border:2px dashed var(--border-subtle);border-radius:var(--radius-control);background:var(--bg-0);text-align:center;cursor:pointer;transition:var(--transition);display:flex;flex-direction:column;align-items:center;gap:var(--spacing-sm)}.dropzone:hover{border-color:var(--primary);background:#3b83f90d}.dropzone.drag-active{border-color:var(--primary);background:#3b83f91a}.dropzone-icon{font-size:32px;opacity:.6}.dropzone-text{font-size:13px;color:var(--text-1);font-weight:600}.dropzone-hint{font-size:11px;color:var(--text-1);opacity:.7}.dropzone input[type=file]{display:none}.camera-point-edit-form{padding:var(--spacing-md);background:#3b83f90d;border-radius:var(--radius-control);display:flex;flex-direction:column;gap:var(--spacing-md)}.form-group{display:flex;flex-direction:column;gap:6px}.form-group label{font-size:12px;font-weight:700;color:var(--text-1);text-transform:uppercase;letter-spacing:1px}.form-group input,.form-group textarea{padding:10px 12px;border:1px solid var(--border-subtle);border-radius:var(--radius-control);background:var(--bg-1);color:var(--text-0);font-size:14px;font-family:inherit;transition:var(--transition)}.form-group input:focus,.form-group textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #3b83f91a}.form-actions{display:flex;gap:var(--spacing-sm);flex-wrap:wrap;margin-top:var(--spacing-md)}.btn-save{padding:10px 20px;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-control);font-weight:700;font-size:12px;cursor:pointer;transition:var(--transition);text-transform:uppercase;letter-spacing:.5px}.btn-save:hover{background:var(--primary-hover);transform:translateY(-2px);box-shadow:0 4px 12px #3b83f940}.btn-cancel{padding:10px 20px;background:transparent;color:var(--text-1);border:1px solid var(--border-subtle);border-radius:var(--radius-control);font-weight:700;font-size:12px;cursor:pointer;transition:var(--transition);text-transform:uppercase;letter-spacing:.5px}.btn-cancel:hover{border-color:var(--text-0);color:var(--text-0);background:#ffffff0d}.btn-delete{padding:10px 20px;background:#ef444426;color:#ef4444;border:1px solid rgba(239,68,68,.3);border-radius:var(--radius-control);font-weight:700;font-size:12px;cursor:pointer;transition:var(--transition);text-transform:uppercase;letter-spacing:.5px}.btn-delete:hover{background:#ef444440;border-color:#ef4444}.no-data{padding:var(--spacing-xl) var(--spacing-lg);text-align:center;color:var(--text-1);background:var(--bg-1);border:1px solid var(--border-subtle);border-radius:var(--radius-card);font-weight:500;font-size:14px}.loading,.error-page{padding:var(--spacing-xl) var(--spacing-lg);text-align:center;border-radius:var(--radius-card);font-weight:500}.loading{color:var(--text-1)}.error-page{background:#ef44441a;border:1px solid rgba(239,68,68,.3);color:#ef4444}.back-button{margin-bottom:var(--spacing-xs)}.back-button button{padding:10px 16px;background:transparent;border:1px solid var(--border-subtle);color:var(--text-1);border-radius:var(--radius-control);font-size:12px;font-weight:700;cursor:pointer;transition:var(--transition);text-transform:uppercase;letter-spacing:.5px;display:flex;align-items:center;gap:6px}.back-button button:hover{border-color:var(--primary);color:var(--primary);background:#3b83f90d;transform:translateY(-2px)}@media(max-width:1024px){.camera-points-header{flex-direction:column;align-items:stretch;gap:var(--spacing-md)}.camera-points-header-left,.camera-points-header-right{width:100%}.camera-points-search input{min-width:100%}.camera-point-summary{flex-wrap:wrap}}@media(max-width:768px){:root{--spacing-md: 12px;--spacing-lg: 16px}.camera-point-summary{padding:var(--spacing-sm);flex-direction:column;align-items:flex-start}.camera-point-summary-left{width:100%}.camera-point-summary-meta,.camera-point-summary-actions{width:100%;justify-content:space-between}.camera-points-search input{min-width:100%}.photos-grid{grid-template-columns:repeat(auto-fill,minmax(80px,1fr))}}.camera-point-compact{display:flex;gap:var(--spacing-md);align-items:flex-start}.camera-point-card.expanded .camera-point-compact{flex-direction:column;gap:var(--spacing-sm)}.camera-point-photos{width:260px}.camera-point-card.expanded .camera-point-photos{width:100%}.camera-point-photos img{width:72px;height:54px;object-fit:cover;border-radius:6px;margin-right:8px}.details-flex{display:flex;gap:var(--spacing-md);align-items:flex-start}.details-flex>.details-section{flex:1 1 auto;order:1}.details-flex>.photos-section{flex:0 0 260px;order:2}.camera-point-card.expanded .details-flex,.camera-point-card.expanded .camera-point-details-content .details-flex{flex-direction:column!important}.camera-point-card.expanded .details-flex>.photos-section,.camera-point-card.expanded .camera-point-details-content .details-flex>.photos-section{flex:1 1 auto!important;width:100%!important;order:2!important;margin-top:var(--spacing-sm)}.camera-point-card.expanded .details-flex>.devices-section,.camera-point-card.expanded .camera-point-details-content .details-flex>.devices-section{order:1!important}@media(max-width:640px){.camera-points-header-right{flex-direction:column-reverse;width:100%}.btn-add-point{width:100%;justify-content:center}.filter-chip{font-size:11px;padding:6px 12px}.camera-point-summary{padding:var(--spacing-xs)}.camera-point-title{font-size:14px}.chip-counter{padding:3px 10px;font-size:11px}.form-group input,.form-group textarea{padding:8px 10px;font-size:13px}.form-actions{flex-direction:column}.form-actions button{width:100%}}.dashboard-container{padding:20px;max-width:1400px;margin:0 auto}.dashboard-header{margin-bottom:28px}.dashboard-header h1{margin:0 0 6px;font-size:28px;font-weight:700;color:var(--text-0, #E6EDF6)}.dashboard-header p{margin:0;font-size:14px;color:var(--text-1, #a9b4c7)}.dashboard-kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:32px}.dashboard-kpi-card{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:8px;padding:20px;display:flex;align-items:center;gap:16px;transition:all .2s}.dashboard-kpi-card:hover{border-color:var(--accent-primary, #3b82f6);box-shadow:0 4px 12px #3b82f633;transform:translateY(-2px)}.dashboard-kpi-card .kpi-icon{font-size:32px;width:56px;height:56px;display:flex;align-items:center;justify-content:center;border-radius:12px;background:#3b82f61a}.dashboard-kpi-card.primary .kpi-icon{background:#3b82f626}.dashboard-kpi-card.success .kpi-icon{background:#22c55e26}.dashboard-kpi-card.warning .kpi-icon{background:#f59e0b26}.dashboard-kpi-card.info .kpi-icon{background:#3b82f61a}.dashboard-kpi-card.accent .kpi-icon{background:#a855f726}.dashboard-kpi-card.neutral .kpi-icon{background:#9ca3af26}.dashboard-kpi-card .kpi-content{flex:1}.dashboard-kpi-card .kpi-value{font-size:28px;font-weight:700;color:var(--text-0, #E6EDF6);margin-bottom:4px}.dashboard-kpi-card .kpi-label{font-size:13px;color:var(--text-1, #a9b4c7);font-weight:500}.dashboard-section{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:8px;padding:24px;margin-bottom:24px}.dashboard-section .section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.dashboard-section .section-header h2{margin:0;font-size:18px;font-weight:600;color:var(--text-0, #E6EDF6)}.btn-link{background:none;border:none;color:var(--accent-primary, #3b82f6);font-size:14px;font-weight:600;cursor:pointer;transition:all .2s;padding:4px 8px;border-radius:4px}.quick-actions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}.quick-action-card{background:var(--bg-secondary, #2d3748);border:1px solid rgba(59,130,246,.2);border-radius:8px;padding:20px;cursor:pointer;transition:all .2s;text-align:left}.quick-action-card:hover{border-color:var(--accent-primary, #3b82f6);background:#3b82f60d;transform:translateY(-2px)}.quick-action-card .qa-icon{font-size:32px;margin-bottom:12px}.quick-action-card .qa-label{font-size:16px;font-weight:600;color:var(--text-0, #E6EDF6);margin-bottom:6px}.quick-action-card .qa-description{font-size:13px;color:var(--text-1, #a9b4c7)}.recent-plants-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.recent-plant-card{background:var(--bg-secondary, #2d3748);border:1px solid rgba(59,130,246,.2);border-radius:8px;padding:16px;cursor:pointer;transition:all .2s}.recent-plant-card:hover{border-color:var(--accent-primary, #3b82f6);box-shadow:0 4px 12px #3b82f633;transform:translateY(-2px)}.recent-plant-card .rp-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:8px}.recent-plant-card .rp-header h3{margin:0;font-size:16px;font-weight:600;color:var(--text-0, #E6EDF6);flex:1}.recent-plant-card .rp-status{font-size:18px;padding:4px;border-radius:4px}.recent-plant-card .rp-status.success{background:#22c55e26}.recent-plant-card .rp-status.warning{background:#f59e0b26}.recent-plant-card .rp-status.danger{background:#ef444426}.recent-plant-card .rp-address{font-size:13px;color:var(--text-1, #a9b4c7);margin:0 0 12px}.recent-plant-card .rp-meta{display:flex;flex-wrap:wrap;gap:12px;align-items:center}.recent-plant-card .rp-meta-item{font-size:12px;color:var(--text-1, #a9b4c7);display:flex;align-items:center;gap:4px}.dashboard-empty-state{text-align:center;padding:60px 20px;background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:8px}.dashboard-empty-state .empty-icon{font-size:64px;margin-bottom:16px;opacity:.6}.dashboard-empty-state h3{margin:0 0 8px;font-size:20px;color:var(--text-0, #E6EDF6)}.dashboard-empty-state p{margin:0 0 20px;font-size:14px;color:var(--text-1, #a9b4c7)}@media(max-width:768px){.dashboard-kpi-grid{grid-template-columns:repeat(2,1fr);gap:12px}.dashboard-kpi-card{padding:16px}.dashboard-kpi-card .kpi-icon{font-size:24px;width:48px;height:48px}.dashboard-kpi-card .kpi-value{font-size:22px}.quick-actions-grid,.recent-plants-grid{grid-template-columns:1fr}.dashboard-section{padding:16px}}.dashboard-charts-section{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:8px;padding:24px;margin-bottom:24px}.dashboard-charts-section .section-header{margin-bottom:24px}.dashboard-charts-section .section-header h2{margin:0;font-size:18px;font-weight:600;color:var(--text-0, #E6EDF6)}.charts-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.chart-card{background:var(--bg-secondary, #2d3748);border:1px solid rgba(59,130,246,.2);border-radius:8px;padding:20px;transition:all .2s}.chart-card:hover{border-color:var(--accent-primary, #3b82f6);box-shadow:0 4px 12px #3b82f626}.chart-card-wide{grid-column:1 / -1}.chart-title{margin:0 0 16px;font-size:15px;font-weight:600;color:var(--text-0, #E6EDF6);text-align:center}.custom-tooltip{background:#1a2332f2;border:1px solid rgba(59,130,246,.4);border-radius:6px;padding:10px 14px;box-shadow:0 4px 12px #0000004d;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.tooltip-label{margin:0 0 4px;font-size:13px;font-weight:600;color:var(--text-0, #E6EDF6)}.tooltip-value{margin:0;font-size:16px;font-weight:700;color:var(--accent-primary, #3b82f6)}.recharts-legend-wrapper{margin-top:8px!important}.recharts-legend-item{margin-right:16px!important}@media(max-width:1200px){.charts-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}}@media(max-width:768px){.charts-grid{grid-template-columns:1fr}.chart-card,.dashboard-charts-section{padding:16px}.chart-title{font-size:14px}}.panoramica-container{padding:40px 24px;max-width:1400px;margin:0 auto}.panoramica-header{margin-bottom:40px}.panoramica-header h1{font-size:32px;font-weight:800;color:var(--text-0);margin:0 0 8px;letter-spacing:-.5px}.panoramica-header p{color:var(--text-1);margin:0;font-size:15px}.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px;margin-bottom:40px}.kpi-card{background:linear-gradient(135deg,var(--bg-1) 0%,var(--bg-2) 100%);border:1px solid var(--border-subtle);border-radius:12px;padding:24px;display:flex;align-items:center;gap:20px;transition:all .3s cubic-bezier(.4,0,.2,1)}.kpi-card:hover{border-color:#3b83f966;box-shadow:0 8px 24px #3b83f91a;transform:translateY(-4px)}.kpi-card.active{border-color:#22c55e4d}.kpi-card.active:hover{box-shadow:0 8px 24px #22c55e26}.kpi-card.maintenance{border-color:#f59e0b4d}.kpi-card.maintenance:hover{box-shadow:0 8px 24px #f59e0b26}.kpi-icon{font-size:40px;flex-shrink:0}.kpi-content{display:flex;flex-direction:column;gap:4px}.kpi-value{font-size:28px;font-weight:800;color:var(--text-0)}.kpi-label{font-size:13px;color:var(--text-1);font-weight:600;text-transform:uppercase;letter-spacing:.5px}.plants-section{margin-top:40px}.plants-section h2{font-size:20px;font-weight:700;color:var(--text-0);margin:0 0 20px}.plants-table-container{background:linear-gradient(135deg,var(--bg-1) 0%,var(--bg-2) 100%);border:1px solid var(--border-subtle);border-radius:12px;overflow:hidden}.plants-table{width:100%;border-collapse:collapse;font-size:14px}.plants-table thead{background:#3b83f91a;border-bottom:1px solid var(--border-subtle)}.plants-table th{padding:16px;text-align:left;color:var(--text-1);font-weight:700;text-transform:uppercase;letter-spacing:.5px;font-size:12px}.plants-table tbody tr{border-bottom:1px solid var(--border-subtle);transition:background .2s}.plants-table tbody tr:hover{background:#3b83f90d}.plants-table tbody tr.active{background:#22c55e08}.plants-table tbody tr.maintenance{background:#f59e0b08}.plants-table tbody tr.offline{background:#ef444408}.plants-table td{padding:16px;color:var(--text-0)}.plant-name{font-weight:600;color:var(--primary)}.status-badge{display:inline-flex;align-items:center;padding:4px 12px;border-radius:999px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px}.status-badge.success{background:#22c55e26;color:var(--success)}.status-badge.warning{background:#f59e0b26;color:var(--warning)}.status-badge.danger{background:#ef444426;color:var(--danger)}.action-btn{background:#3b83f91a;border:1px solid var(--border-subtle);color:var(--primary);padding:6px 10px;border-radius:6px;font-size:12px;cursor:pointer;transition:all .2s;font-weight:600}.action-btn:hover{background:var(--primary);color:#fff;border-color:var(--primary)}.empty-state{padding:60px 40px;text-align:center;color:var(--text-1)}.empty-state p{font-size:15px;margin:0}.loading,.error{padding:40px;text-align:center;font-size:15px;color:var(--text-1)}.error{color:var(--danger)}@media(max-width:1024px){.kpi-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}}@media(max-width:768px){.panoramica-container{padding:24px 16px}.panoramica-header h1{font-size:24px}.kpi-grid{grid-template-columns:1fr}.plants-table{font-size:12px}.plants-table th,.plants-table td{padding:12px}.actions-cell{gap:4px}.action-btn{padding:4px 8px;font-size:11px}}[data-theme=light] .btn-primary{background:#3b82f6;color:#fff;border:none}[data-theme=light] .btn-primary:hover{background:#2563eb}[data-theme=light] .btn-secondary{background:#f3f4f6;color:#111827;border:1px solid #d1d5db}[data-theme=light] .btn-secondary:hover{background:#e5e7eb;border-color:#9ca3af}[data-theme=light] .action-btn{background:#3b82f614;border-color:#d1d5db;color:#3b82f6}[data-theme=light] .action-btn:hover{background:#3b82f6;color:#fff;border-color:#3b82f6}[data-theme=light] .action-btn.danger{color:#dc2626;background:#dc262614}[data-theme=light] .action-btn.danger:hover{background:#dc2626;color:#fff;border-color:#dc2626}[data-theme=light] .plants-table{background:#fff;border-color:#e5e7eb}[data-theme=light] .plants-table thead th{background:#f9fafb;border-color:#e5e7eb;color:#111827}[data-theme=light] .plants-table tbody tr{border-color:#e5e7eb}[data-theme=light] .plants-table tbody tr:hover{background:#f9fafb}.create-plant-overlay{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1200;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:fadeIn .2s ease}.create-plant-modal{width:480px;max-width:90%;background:#1a2332;padding:32px;border-radius:12px;box-shadow:0 20px 60px #00000080;border:2px solid #3b82f6;animation:slideUp .3s ease;max-height:90vh;overflow-y:auto}.create-plant-modal-large{width:640px;max-width:95%}.create-plant-modal h3{margin:0 0 24px;color:#e6edf6;font-size:20px;font-weight:600}.form-row{margin-bottom:16px;display:flex;flex-direction:column}.form-row label{display:block;font-size:14px;font-weight:500;color:#a9b4c7;margin-bottom:8px}.form-row input{width:100%;padding:12px;border-radius:6px;border:1.5px solid #3b4c66;background:#0f1419;color:#e6edf6;font-size:14px;transition:all .2s;box-sizing:border-box}.form-row input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f633}.form-row input:hover:not(:focus){border-color:#3b82f6}.input-with-button{display:flex;gap:8px;width:100%}.input-with-button input{flex:1}.btn-geocode{padding:12px 16px;border-radius:6px;border:1.5px solid #3b82f6;background:#0f1419;color:#3b82f6;font-size:16px;cursor:pointer;transition:all .2s;flex-shrink:0;display:flex;align-items:center;justify-content:center;min-width:48px}.btn-geocode:hover:not(:disabled){background:#3b82f6;color:#fff;transform:translateY(-1px);box-shadow:0 2px 8px #3b82f64d}.btn-geocode:disabled{opacity:.4;cursor:not-allowed}.btn-geocode:active:not(:disabled){transform:translateY(0)}.autocomplete-container{position:relative;width:100%}.suggestions-dropdown{position:absolute;top:100%;left:0;right:0;background:#0f1419;border:1.5px solid #3b82f6;border-top:none;border-radius:0 0 6px 6px;max-height:200px;overflow-y:auto;z-index:1000;box-shadow:0 4px 12px #0000004d}.suggestion-item{display:flex;align-items:center;gap:8px;padding:10px 12px;cursor:pointer;transition:background .15s;border-bottom:1px solid rgba(59,130,246,.1)}.suggestion-item:hover{background:#1a2332}.suggestion-item:last-child{border-bottom:none}.suggestion-icon{font-size:14px;opacity:.6;flex-shrink:0}.suggestion-text{color:#e6edf6;font-size:13px;line-height:1.4}.form-row-group{display:flex;gap:12px}.form-row-half{flex:1}.btn-toggle-map{margin-left:auto;padding:6px 12px;background:#0f1419;border:1.5px solid #3b82f6;border-radius:6px;color:#3b82f6;font-size:13px;cursor:pointer;transition:all .2s}.btn-toggle-map:hover{background:#3b82f6;color:#fff}.map-picker-container{margin-top:12px;border-radius:8px;overflow:hidden;border:1.5px solid #3b4c66}.map-hint{margin-top:8px;font-size:12px;color:#a9b4c7;text-align:center}.form-row label{display:flex;align-items:center;font-size:14px;font-weight:500;color:#a9b4c7;margin-bottom:8px}.form-row-inline{display:flex;align-items:center;gap:12px}.form-row-inline input{flex:1}.form-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:24px;padding-top:16px;border-top:1px solid #3b4c66}.form-actions .btn{font-size:14px;padding:10px 16px;border-radius:6px;cursor:pointer;font-weight:500;transition:all .2s}.form-actions .btn-primary{background:#3b82f6;color:#fff;border:none}.form-actions .btn-primary:hover:not(:disabled){background:#2563eb;box-shadow:0 4px 12px #3b82f666}.form-actions .btn-primary:disabled{opacity:.6;cursor:not-allowed}.form-actions .btn-secondary{background:#3b4c66;color:#e6edf6;border:1px solid #3b4c66}.form-actions .btn-secondary:hover{background:#4a5f7a;border-color:#3b82f6}[data-theme=light] .create-plant-modal{background:#fff;border-color:#3b82f6;box-shadow:0 20px 60px #00000026}[data-theme=light] .create-plant-modal h3{color:#111827}[data-theme=light] .form-row label{color:#374151}[data-theme=light] .form-row input,[data-theme=light] .form-row select{background:#f9fafb;border-color:#d1d5db;color:#111827}[data-theme=light] .form-row input:focus,[data-theme=light] .form-row select:focus{background:#fff;border-color:#3b82f6}[data-theme=light] .form-actions .btn-secondary{background:#f3f4f6;color:#111827;border-color:#d1d5db}[data-theme=light] .form-actions .btn-secondary:hover{background:#e5e7eb;border-color:#3b82f6}[data-theme=light] .map-hint{color:#6b7280}[data-theme=light] .suggestion-text{color:#111827}[data-theme=light] .suggestions-dropdown{background:#fff;border-color:#d1d5db}[data-theme=light] .suggestion-item{border-bottom-color:#e5e7eb}[data-theme=light] .suggestion-item:hover{background:#f9fafb}[data-theme=light] .btn-toggle-map{background:#f9fafb;color:#3b82f6;border-color:#d1d5db}[data-theme=light] .btn-toggle-map:hover{background:#3b82f6;color:#fff}[data-theme=light] .map-picker-container{border-color:#d1d5db}.edit-plant-overlay{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1200;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:fadeIn .2s ease}.edit-plant-modal{background:#1a2332;padding:32px;border-radius:12px;width:480px;max-width:90%;box-shadow:0 20px 60px #00000080;border:2px solid #3b82f6;animation:slideUp .3s ease}.edit-plant-modal h3{margin:0 0 24px;font-size:20px;color:#e6edf6;font-weight:600}.edit-plant-modal .form-row{margin-bottom:16px;display:flex;flex-direction:column}.edit-plant-modal label{font-size:14px;font-weight:500;margin-bottom:8px;color:#a9b4c7;display:block}.edit-plant-modal input{padding:12px;border:1.5px solid #3b4c66;border-radius:6px;background:#0f1419;font-size:14px;color:#e6edf6;transition:all .2s}.edit-plant-modal input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f633}.edit-plant-modal input:hover:not(:focus){border-color:#3b82f6}.edit-plant-modal .form-row-inline{flex-direction:row;align-items:center;gap:12px}.edit-plant-modal .form-row-inline input{margin:0}.edit-plant-modal .form-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:24px;padding-top:16px;border-top:1px solid #3b4c66}.edit-plant-modal .btn{font-size:14px;padding:10px 16px;border-radius:6px;cursor:pointer;font-weight:500;transition:all .2s}.edit-plant-modal .btn-primary{background:#3b82f6;color:#fff;border:none}.edit-plant-modal .btn-primary:hover:not(:disabled){background:#2563eb;box-shadow:0 4px 12px #3b82f666}.edit-plant-modal .btn-primary:disabled{opacity:.6;cursor:not-allowed}.edit-plant-modal .btn-secondary{background:#3b4c66;color:#e6edf6;border:1px solid #3b4c66}.edit-plant-modal .btn-secondary:hover{background:#4a5f7a;border-color:#3b82f6}.assign-users-overlay{position:fixed;inset:0;background:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn .2s ease-out}.assign-users-modal{background:var(--bg-primary, white);border-radius:16px;box-shadow:0 20px 60px #0000004d;display:flex;flex-direction:column;max-height:90vh;animation:slideUp .3s ease-out}@keyframes slideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.assign-users-modal-large{width:90%;max-width:800px}.modal-header{display:flex;justify-content:space-between;align-items:flex-start;padding:24px 28px;border-bottom:1px solid var(--border-color, #e5e7eb)}.modal-header h3{margin:0;font-size:24px;font-weight:600;color:var(--text-primary, #1f2937)}.plant-name{margin:4px 0 0;font-size:14px;color:var(--text-secondary, #6b7280);font-weight:500}.close-btn{background:transparent;border:none;font-size:24px;color:var(--text-secondary, #6b7280);cursor:pointer;padding:4px 8px;border-radius:6px;transition:all .2s;line-height:1}.close-btn:hover{background:var(--hover-bg, #f3f4f6);color:var(--text-primary, #1f2937)}.tabs-container{border-bottom:1px solid var(--border-color, #e5e7eb);background:var(--bg-secondary, #f9fafb)}.tabs{display:flex;padding:0 28px;gap:8px}.tab{display:flex;align-items:center;gap:8px;padding:12px 20px;background:transparent;border:none;border-bottom:3px solid transparent;cursor:pointer;font-size:14px;font-weight:500;color:var(--text-secondary, #6b7280);transition:all .2s;position:relative}.tab:hover{color:var(--text-primary, #1f2937);background:#3b82f60d}.tab.active{color:var(--primary-color, #3b82f6);border-bottom-color:var(--primary-color, #3b82f6);background:#3b82f614}.tab-label{font-weight:600}.tab-badge{background:var(--badge-bg, #e5e7eb);color:var(--text-primary, #1f2937);padding:2px 8px;border-radius:12px;font-size:12px;font-weight:600;min-width:36px;text-align:center}.tab.active .tab-badge{background:var(--primary-color, #3b82f6);color:#fff}.modal-content{flex:1;overflow:hidden;display:flex;flex-direction:column;padding:20px 28px}.search-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.search-input{flex:1;padding:10px 16px;border:2px solid var(--border-color, #e5e7eb);border-radius:8px;font-size:14px;transition:all .2s}.search-input:focus{outline:none;border-color:var(--primary-color, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.bulk-actions{display:flex;align-items:center;gap:8px;white-space:nowrap}.btn-link{background:none;border:none;color:var(--primary-color, #3b82f6);font-size:13px;font-weight:500;cursor:pointer;padding:4px 8px;border-radius:4px;transition:all .2s}.btn-link:hover{background:#3b82f61a;text-decoration:underline}.separator{color:var(--text-secondary, #6b7280);font-size:12px}.users-list{flex:1;overflow-y:auto;border:1px solid var(--border-color, #e5e7eb);border-radius:8px;background:var(--bg-primary, white)}.user-item{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border-color, #e5e7eb);cursor:pointer;transition:all .2s}.user-item:last-child{border-bottom:none}.user-item:hover{background:var(--hover-bg, #f9fafb)}.user-item.selected{background:#3b82f614;border-left:3px solid var(--primary-color, #3b82f6)}.user-checkbox{display:flex;align-items:center}.user-checkbox input[type=checkbox]{width:18px;height:18px;cursor:pointer;accent-color:var(--primary-color, #3b82f6)}.user-info{flex:1;min-width:0}.user-name{font-weight:600;font-size:14px;color:var(--text-primary, #1f2937);margin-bottom:2px}.user-email{font-size:12px;color:var(--text-secondary, #6b7280);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-role-badge{padding:4px 10px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.user-role-badge[data-role=manager]{background:#dbeafe;color:#1e40af}.user-role-badge[data-role=technician],.user-role-badge[data-role=senior-technician]{background:#dcfce7;color:#166534}.user-role-badge[data-role=client]{background:#fef3c7;color:#92400e}.empty-state{text-align:center;padding:48px 24px;color:var(--text-secondary, #6b7280)}.empty-state p{margin:0;font-size:14px}.modal-footer{border-top:1px solid var(--border-color, #e5e7eb);padding:20px 28px;background:var(--bg-secondary, #f9fafb);display:flex;justify-content:space-between;align-items:center;gap:16px;border-radius:0 0 16px 16px}.footer-info{flex:1}.info-text{font-size:13px;color:var(--text-secondary, #6b7280);display:flex;align-items:center;gap:6px}.footer-actions{display:flex;gap:12px}.btn{padding:10px 20px;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s;border:none;display:inline-flex;align-items:center;gap:6px}.btn-primary{background:var(--primary-color, #3b82f6);color:#fff}.btn-primary:hover:not(:disabled){background:#2563eb;transform:translateY(-1px);box-shadow:0 4px 12px #3b82f64d}.btn-secondary{background:#fff;color:var(--text-primary, #1f2937);border:1px solid var(--border-color, #e5e7eb)}.btn-secondary:hover:not(:disabled){background:var(--hover-bg, #f9fafb);border-color:var(--text-secondary, #6b7280)}.btn:disabled{opacity:.6;cursor:not-allowed}.access-denied{text-align:center;padding:48px 32px}.access-denied h3{margin:0 0 16px;font-size:24px;color:var(--text-primary, #1f2937)}.access-denied p{margin:0 0 24px;color:var(--text-secondary, #6b7280)}@media(prefers-color-scheme:dark){.assign-users-modal{--bg-primary: #1f2937;--bg-secondary: #111827;--text-primary: #f9fafb;--text-secondary: #9ca3af;--border-color: #374151;--hover-bg: #374151}}@media(max-width:768px){.assign-users-modal-large{width:95%;max-height:95vh}.modal-header{padding:20px}.tabs{padding:0 20px;overflow-x:auto}.tab{padding:10px 16px;font-size:13px}.tab-label{display:none}.modal-content{padding:16px 20px}.search-bar{flex-direction:column;align-items:stretch}.modal-footer{flex-direction:column;align-items:stretch;gap:12px}.footer-actions{width:100%}.footer-actions .btn{flex:1}}.plants-map-container{position:relative;width:100%;height:100vh;overflow:hidden;background:var(--bg-1, #1D2638)}.map-content{width:100%;height:100%;position:relative;z-index:10}.plants-leaflet-map{width:100%!important;height:100%!important;z-index:10}.plants-leaflet-map .leaflet-container{background:var(--bg-1, #1D2638)!important;font-family:inherit!important}.plants-leaflet-map .leaflet-tile{filter:brightness(.95)}.plants-leaflet-map .leaflet-popup-content-wrapper{background:var(--bg-1, #1D2638)!important;color:var(--text-0, #E6EDF6)!important;border:1px solid var(--border-subtle, rgba(255, 255, 255, .1))!important;border-radius:8px!important;box-shadow:0 4px 12px #0006!important}.plants-leaflet-map .leaflet-popup-tip{background:var(--bg-1, #1D2638)!important;border:1px solid var(--border-subtle, rgba(255, 255, 255, .1))!important}.plants-leaflet-map .leaflet-popup-close-button{color:var(--text-1, #A9B4C7)!important;opacity:.7}.plants-leaflet-map .leaflet-popup-close-button:hover{color:var(--text-0, #E6EDF6)!important;opacity:1}.plant-popup{background:transparent!important;border:none!important}.plant-popup .leaflet-popup-content{margin:0!important;width:auto!important;min-width:240px}.popup-content{padding:4px}.popup-header{display:flex;flex-direction:column;gap:8px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--border-subtle, rgba(255, 255, 255, .08))}.popup-title{margin:0;color:var(--text-0, #E6EDF6);font-size:16px;font-weight:600;line-height:1.3}.popup-badge{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.3px;width:fit-content}.popup-badge.badge-active{background:#22c55e26;color:#22c55e;border:1px solid rgba(34,197,94,.3)}.popup-badge.badge-maintenance{background:#fb923c26;color:#fb923c;border:1px solid rgba(251,146,60,.3)}.popup-body{margin-bottom:12px}.popup-info-item{display:flex;align-items:flex-start;gap:8px;margin-bottom:6px}.popup-icon{font-size:14px;opacity:.7;line-height:1.4;flex-shrink:0}.popup-text{color:var(--text-1, #A9B4C7);font-size:13px;line-height:1.4;flex:1}.popup-actions{display:flex;flex-direction:column;gap:6px;margin-top:12px;padding-top:12px;border-top:1px solid var(--border-subtle, rgba(255, 255, 255, .08))}.popup-btn{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;padding:9px 14px;border:none;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s ease;white-space:nowrap}.popup-btn-primary{background:var(--primary, #3B83F9);color:#fff}.popup-btn-primary:hover{background:var(--primary-hover, #4A90FF);transform:translateY(-1px);box-shadow:0 2px 8px #3b83f94d}.popup-btn-primary:active{transform:translateY(0)}.popup-btn .btn-icon{font-size:14px;line-height:1}.map-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--bg-1, #1D2638) 0%,var(--bg-2, #24304A) 100%);color:var(--text-1, #A9B4C7);font-size:18px;border:1px solid var(--border-subtle, rgba(255, 255, 255, .1))}.map-search{position:fixed;top:80px;left:260px;z-index:90;width:320px;max-width:calc(100% - 280px)}.map-search-input{width:100%;padding:12px 16px;border:1px solid var(--border-subtle, rgba(255, 255, 255, .1));border-radius:8px;background:var(--bg-0, #161D2C);color:var(--text-0, #E6EDF6);font-size:14px;transition:all .2s;box-shadow:0 2px 8px #0000004d}.map-search-input:focus{outline:none;border-color:var(--primary, #3B83F9);box-shadow:0 0 0 3px #3b83f91a,0 2px 8px #0000004d;background:var(--bg-1, #1D2638)}.map-search-input::placeholder{color:var(--text-1, #A9B4C7)}.map-search-results{position:absolute;top:calc(100% + 8px);left:0;right:0;background:var(--bg-0, #161D2C);border:1px solid var(--border-subtle, rgba(255, 255, 255, .1));border-radius:8px;max-height:320px;overflow-y:auto;box-shadow:0 4px 16px #0006;animation:slideDown .2s ease-out}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.search-empty{padding:16px;text-align:center;color:var(--text-1, #A9B4C7);font-size:14px}.search-result-item{display:flex;flex-direction:column;gap:6px;padding:12px 16px;border-bottom:1px solid var(--border-subtle, rgba(255, 255, 255, .05));cursor:pointer;transition:background .15s}.search-result-item:last-child{border-bottom:none}.search-result-item:hover{background:var(--bg-1, #1D2638)}.search-item-name{color:var(--text-0, #E6EDF6);font-weight:500;font-size:14px}.search-item-address{color:var(--text-1, #A9B4C7);font-size:12px}.search-item-btn{align-self:flex-start;padding:4px 8px;background:none;border:1px solid var(--primary, #3B83F9);color:var(--primary, #3B83F9);border-radius:4px;font-size:12px;cursor:pointer;transition:all .15s;margin-top:4px}.search-item-btn:hover{background:#3b83f91a;border-color:var(--primary-hover, #4A90FF);color:var(--primary-hover, #4A90FF)}.map-legend{position:fixed;top:80px;right:20px;z-index:90;background:var(--bg-0, #161D2C);border:1px solid var(--border-subtle, rgba(255, 255, 255, .1));border-radius:8px;padding:16px;width:200px;box-shadow:0 2px 8px #0000004d}.legend-title{color:var(--text-0, #E6EDF6);font-weight:600;font-size:13px;margin-bottom:12px;text-transform:uppercase;letter-spacing:.5px}.legend-item{display:flex;align-items:center;gap:8px;padding:8px 0;cursor:pointer;color:var(--text-0, #E6EDF6);font-size:14px;-webkit-user-select:none;user-select:none;transition:color .15s}.legend-item:hover{color:var(--primary, #3B83F9)}.legend-item input[type=radio]{cursor:pointer;accent-color:var(--primary, #3B83F9)}.fab-new-plant{position:fixed;bottom:28px;right:28px;z-index:90;display:flex;align-items:center;gap:8px;padding:12px 20px;background:var(--primary, #3B83F9);border:none;border-radius:24px;color:#fff;font-weight:600;font-size:14px;cursor:pointer;box-shadow:0 4px 12px #3b83f966;transition:all .2s}.fab-new-plant:hover{background:var(--primary-hover, #4A90FF);transform:translateY(-2px);box-shadow:0 6px 16px #3b83f980}.fab-new-plant:active{transform:translateY(0)}.fab-new-plant span{font-size:18px;font-weight:700}.drawer-overlay{position:fixed;inset:0;z-index:95;background:#00000080;animation:fadeIn .2s ease-out;pointer-events:auto}.drawer-panel{position:fixed;right:0;top:64px;bottom:0;width:380px;max-width:90vw;background:var(--bg-1, #1D2638);border-left:1px solid var(--border-subtle, rgba(255, 255, 255, .1));display:flex;flex-direction:column;box-shadow:-2px 0 12px #0006;animation:slideInRight .25s ease-out;z-index:96}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}.drawer-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--border-subtle, rgba(255, 255, 255, .1))}.drawer-header h3{color:var(--text-0, #E6EDF6);font-size:16px;font-weight:600;margin:0}.drawer-close{background:none;border:none;color:var(--text-1, #A9B4C7);font-size:20px;cursor:pointer;padding:4px 8px;transition:color .15s;display:flex;align-items:center;justify-content:center}.drawer-close:hover{color:var(--text-0, #E6EDF6)}.drawer-content{flex:1;overflow-y:auto;padding:20px}.drawer-section{margin-bottom:20px}.drawer-section label{display:block;font-size:12px;font-weight:600;text-transform:uppercase;color:var(--text-2, #8895AA);letter-spacing:.5px;margin-bottom:6px}.drawer-section p{margin:0;color:var(--text-0, #E6EDF6);font-size:14px;line-height:1.6}.drawer-section code{display:inline-block;padding:4px 8px;background:var(--bg-2, #2A364B);border:1px solid var(--border-subtle, rgba(255, 255, 255, .1));border-radius:4px;color:var(--primary, #3B83F9);font-size:13px;font-family:Courier New,monospace}.drawer-section .subnet-badge{background:#3b83f933;color:var(--primary, #3B83F9);padding:4px 10px;border-radius:4px;font-size:12px;font-weight:600;border:1px solid rgba(59,131,249,.3)}.drawer-kpi{margin-top:24px;padding-top:20px;border-top:1px solid var(--border-subtle, rgba(255, 255, 255, .1))}.drawer-kpi h4{font-size:13px;font-weight:600;color:var(--text-0, #E6EDF6);margin:0 0 16px;text-transform:uppercase;letter-spacing:.5px}.drawer-kpi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.drawer-kpi-card{background:var(--bg-2, #2A364B);padding:12px;border-radius:6px;text-align:center;border:1px solid var(--border-subtle, rgba(255, 255, 255, .1))}.drawer-kpi-card .kpi-value{font-size:24px;font-weight:700;color:var(--primary, #3B83F9);margin-bottom:4px}.drawer-kpi-card .kpi-label{font-size:10px;color:var(--text-2, #8895AA);text-transform:uppercase;letter-spacing:.3px;line-height:1.3}.kpi-loading{text-align:center;color:var(--text-1, #A9B4C7);font-size:13px;padding:20px}.drawer-nearby{margin-top:24px;padding-top:20px;border-top:1px solid var(--border-subtle, rgba(255, 255, 255, .1))}.drawer-nearby h4{font-size:13px;font-weight:600;color:var(--text-0, #E6EDF6);margin:0 0 12px;text-transform:uppercase;letter-spacing:.5px}.nearby-list{display:flex;flex-direction:column;gap:8px}.nearby-item{display:flex;align-items:center;justify-content:space-between;padding:12px;background:var(--bg-2, #2A364B);border:1px solid var(--border-subtle, rgba(255, 255, 255, .1));border-radius:6px;cursor:pointer;transition:all .2s}.nearby-item:hover{background:var(--bg-3, #35415A);border-color:var(--primary, #3B83F9);transform:translate(4px)}.nearby-info{flex:1;display:flex;flex-direction:column;gap:4px}.nearby-name{font-size:14px;font-weight:500;color:var(--text-0, #E6EDF6)}.nearby-address{font-size:12px;color:var(--text-2, #8895AA);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}.nearby-distance{display:flex;flex-direction:column;align-items:center;padding:4px 12px;background:var(--bg-0, #161D2C);border-radius:4px;min-width:60px}.distance-value{font-size:18px;font-weight:700;color:var(--primary, #3B83F9);line-height:1}.distance-unit{font-size:10px;color:var(--text-2, #8895AA);text-transform:uppercase;letter-spacing:.5px;margin-top:2px}.drawer-section label{display:block;color:var(--text-1, #A9B4C7);font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.drawer-section p{color:var(--text-0, #E6EDF6);margin:0;font-size:14px;line-height:1.5}.drawer-section code{display:block;background:var(--bg-0, #161D2C);border:1px solid var(--border-subtle, rgba(255, 255, 255, .1));border-radius:4px;padding:8px 12px;font-family:Courier New,monospace;font-size:12px;color:var(--primary, #3B83F9);word-break:break-all;margin:0}.status-active{color:var(--success, #10B981)!important}.status-maintenance{color:var(--warning, #F59E0B)!important}.drawer-actions{display:flex;flex-direction:column;gap:12px;padding:20px;border-top:1px solid var(--border-subtle, rgba(255, 255, 255, .1))}.btn-primary,.btn-secondary{padding:10px 16px;border-radius:6px;font-weight:500;font-size:14px;cursor:pointer;transition:all .2s;border:none}.btn-primary{background:var(--primary, #3B83F9);color:#fff}.btn-primary:hover{background:var(--primary-hover, #4A90FF);transform:translateY(-1px);box-shadow:0 2px 8px #3b83f94d}.btn-secondary{background:var(--bg-0, #161D2C);color:var(--text-0, #E6EDF6);border:1px solid var(--border-subtle, rgba(255, 255, 255, .1))}.btn-secondary:hover{border-color:var(--text-0, #E6EDF6);background:#e6edf60d}@media(max-width:1024px){.map-search{left:100px;width:280px}.drawer-panel{width:90vw;max-width:360px}}@media(max-width:768px){.map-search{left:20px;top:72px;width:calc(100% - 40px);max-width:none}.map-legend{right:20px;width:160px;padding:12px}.fab-new-plant{bottom:20px;right:20px;padding:10px 16px;font-size:13px}.drawer-panel{width:100%;max-width:100%}}@media(max-width:640px){.map-search{width:calc(100% - 30px);left:15px}.map-search-results{max-height:250px}.map-legend{width:140px;right:15px;padding:10px}.legend-title{font-size:11px}.legend-item{font-size:12px;padding:6px 0}.fab-new-plant{bottom:16px;right:16px;padding:8px 14px;font-size:12px}.fab-new-plant span{font-size:16px}}.customer-dashboard{padding:24px;max-width:1400px;margin:0 auto}.dashboard-loading{display:flex;align-items:center;justify-content:center;min-height:400px;font-size:16px;color:var(--text-secondary)}.dashboard-header{margin-bottom:32px;display:flex;justify-content:space-between;align-items:flex-start;gap:20px}.dashboard-header>div{flex:1}.dashboard-header h1{margin:0 0 8px;font-size:32px;color:var(--text-primary);font-weight:700}.plant-name{margin:0;font-size:16px;color:var(--text-secondary);font-weight:500}.refresh-button{padding:10px 20px;background:var(--primary-color);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;white-space:nowrap}.refresh-button:hover:not(:disabled){background:var(--primary-hover);transform:translateY(-1px)}.refresh-button:disabled{opacity:.6;cursor:not-allowed}.refresh-button.refreshing{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.dashboard-kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px;margin-bottom:32px}.kpi-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:12px;padding:20px;display:flex;align-items:center;gap:16px;transition:transform .2s,box-shadow .2s}.kpi-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px #00000026}.kpi-icon{font-size:40px;line-height:1}.kpi-content{flex:1}.kpi-value{font-size:36px;font-weight:700;color:var(--text-primary);line-height:1;margin-bottom:8px}.kpi-label{font-size:14px;color:var(--text-secondary);font-weight:500}.kpi-danger{border-left:4px solid #ef4444}.kpi-warning{border-left:4px solid #f59e0b}.kpi-success{border-left:4px solid #10b981}.kpi-info{border-left:4px solid #3b82f6}.dashboard-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;margin-bottom:32px}.dashboard-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:12px;padding:24px}.dashboard-card h3{margin:0 0 20px;font-size:18px;color:var(--text-primary);font-weight:600}.maintenance-card{background:linear-gradient(135deg,#3b82f61a,#9333ea1a);border-color:#3b82f64d}.maintenance-info{text-align:center;padding:20px 0}.maintenance-date{font-size:20px;font-weight:600;color:var(--text-primary);margin-bottom:8px;text-transform:capitalize}.maintenance-time{font-size:16px;color:var(--text-secondary);margin-bottom:16px}.maintenance-countdown{display:inline-block;background:var(--primary-color);color:#fff;padding:8px 20px;border-radius:20px;font-weight:600;font-size:14px}.no-maintenance{text-align:center;padding:40px 20px;color:var(--text-secondary)}.no-maintenance p{margin:0;font-size:18px}.stats-card{display:flex;flex-direction:column;justify-content:center}.stat-value{text-align:center;padding:20px 0}.stat-number{font-size:56px;font-weight:700;color:var(--primary-color);line-height:1}.stat-unit{font-size:20px;color:var(--text-secondary);margin-left:8px;font-weight:500}.stat-empty{font-size:16px;color:var(--text-tertiary)}.recent-tickets-card{margin-bottom:24px}.card-header h3{margin:0}.btn-link{background:none;border:none;color:var(--primary-color);font-size:14px;font-weight:600;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background .2s}.btn-link:hover{background:#3b82f61a}.tickets-list{display:flex;flex-direction:column;gap:12px}.ticket-item{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:8px;padding:16px;cursor:pointer;transition:all .2s}.ticket-item:hover{border-color:var(--primary-color);box-shadow:0 4px 12px #3b82f626;transform:translate(4px)}.ticket-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.ticket-status-badge{padding:4px 12px;border-radius:12px;font-size:12px;font-weight:600}.ticket-date{font-size:12px;color:var(--text-tertiary)}.ticket-title{font-size:16px;font-weight:600;color:var(--text-primary);margin-bottom:8px}.ticket-meta{display:flex;gap:8px;flex-wrap:wrap}.priority-badge,.category-badge{padding:2px 8px;border-radius:4px;font-size:11px;font-weight:500;text-transform:uppercase}.priority-badge{background:#ef444426;color:#ef4444}.priority-urgent{background:#ef444433;color:#ef4444}.priority-high{background:#f59e0b33;color:#f59e0b}.priority-normal{background:#3b82f633;color:#3b82f6}.priority-low{background:#6b728033;color:#6b7280}.category-badge{background:#9333ea26;color:#9333ea}.empty-state{text-align:center;padding:60px 20px;color:var(--text-secondary)}.empty-state p{margin:0 0 20px;font-size:16px}.dashboard-quick-action{text-align:center;margin-top:32px}.btn-large{font-size:16px;padding:14px 32px;border-radius:8px;font-weight:600}@media(max-width:768px){.customer-dashboard{padding:16px}.dashboard-header h1{font-size:24px}.dashboard-kpi-grid{grid-template-columns:repeat(2,1fr);gap:12px}.kpi-card{padding:16px;flex-direction:column;text-align:center}.kpi-value{font-size:28px}.dashboard-grid{grid-template-columns:1fr}.maintenance-date{font-size:16px}.stat-number{font-size:40px}}@media(max-width:480px){.dashboard-kpi-grid{grid-template-columns:1fr}.kpi-icon{font-size:32px}.kpi-value{font-size:24px}}:root{--transition-smooth: all .3s cubic-bezier(.4, 0, .2, 1)}.users-section{display:flex;flex-direction:column;gap:32px}.users-section h2{margin:0;font-size:32px;font-weight:800;color:var(--text-primary);letter-spacing:-.5px}.user-form-card{background:linear-gradient(135deg,var(--bg-secondary),var(--bg-secondary));border:1px solid var(--border-primary);border-radius:12px;padding:28px;box-shadow:0 2px 8px #0000000a}.user-form-card h3{margin:0 0 20px;font-size:20px;font-weight:700;color:var(--text-primary)}.user-form-card .form-group{margin-bottom:16px}.user-form-card .form-group label{display:block;margin-bottom:8px;font-weight:700;font-size:12px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:1px}.user-form-card .form-control{width:100%;padding:12px 14px;border:1px solid var(--border-primary);border-radius:8px;background:var(--bg-primary);color:var(--text-primary);font-size:14px;font-family:inherit;font-weight:500;transition:var(--transition-smooth)}.user-form-card .form-control:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 4px #3b82f626;background:var(--bg-primary)}.user-form-card .form-control:disabled{background:var(--bg-secondary);opacity:.6;cursor:not-allowed}.user-form-card .form-actions{display:flex;gap:12px;margin-top:24px;flex-wrap:wrap}.users-table-wrapper{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:12px;overflow:hidden;box-shadow:0 2px 8px #0000000a}.users-table{width:100%;border-collapse:collapse;font-size:14px}.users-table thead{background:linear-gradient(90deg,var(--bg-tertiary),var(--bg-secondary));border-bottom:2px solid var(--border-primary)}.users-table th{padding:16px;text-align:left;font-weight:700;color:var(--text-primary);text-transform:uppercase;font-size:12px;letter-spacing:1px}.users-table tbody tr{border-bottom:1px solid var(--border-primary);transition:var(--transition-smooth)}.users-table td{padding:16px;color:var(--text-primary);vertical-align:middle}.users-table .email-cell{font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:13px;color:var(--text-secondary);word-break:break-all}.users-table .date-cell{font-size:13px;color:var(--text-secondary);white-space:nowrap}.users-table .actions-cell{display:flex;gap:8px;white-space:nowrap}.role-badge{display:inline-block;padding:8px 14px;border-radius:20px;color:#fff;font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.5px}.role-badge.admin{background:linear-gradient(135deg,#3b82f6,#2563eb)}.role-badge.manager{background:linear-gradient(135deg,#8b5cf6,#7c3aed)}.role-badge.technician{background:linear-gradient(135deg,#10b981,#059669)}.role-badge.client{background:linear-gradient(135deg,#f59e0b,#d97706)}.status-badge{display:inline-block;padding:6px 12px;border-radius:20px;font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.5px}.status-badge.active{background:#10b98126;color:var(--color-success)}.status-badge.inactive{background:#ef444426;color:var(--color-error)}.no-data{padding:60px 40px;text-align:center;color:var(--text-secondary);font-size:14px;font-weight:500}.btn{padding:10px 16px;border-radius:8px;font-weight:700;font-size:13px;cursor:pointer;border:none;transition:var(--transition-smooth);display:inline-flex;align-items:center;justify-content:center;gap:8px;text-transform:uppercase;letter-spacing:.5px}.btn-sm{padding:8px 12px;font-size:12px}.btn-primary:hover{background:var(--color-primary-hover);transform:translateY(-2px);box-shadow:0 8px 16px #3b82f64d}.btn-primary:active{transform:translateY(0)}.btn-secondary{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-primary)}.btn-secondary:hover{background:var(--border-primary);border-color:var(--text-secondary)}.btn-danger:hover{background:#dc2626;transform:translateY(-2px);box-shadow:0 8px 16px #ef44444d}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}@media(max-width:1024px){.users-section h2{font-size:28px}.user-form-card{padding:24px}.users-table{font-size:13px}.users-table th,.users-table td{padding:12px}}@media(max-width:768px){.users-section{gap:28px}.users-section h2{font-size:24px}.user-form-card{padding:20px}.user-form-card h3{font-size:18px;margin-bottom:16px}.user-form-card .form-actions{flex-direction:column}.user-form-card .form-actions .btn{width:100%}.users-table-wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch}.users-table{min-width:100%;font-size:12px}.users-table th,.users-table td{padding:10px}.users-table .email-cell{font-size:12px;word-break:break-word}.users-table .actions-cell{flex-direction:column;gap:6px}.users-table .actions-cell .btn{width:100%;padding:6px 8px;font-size:11px}}@media(max-width:640px){.users-section h2{font-size:20px}.user-form-card{padding:16px}.user-form-card h3{font-size:16px}.user-form-card .form-group{margin-bottom:12px}.user-form-card .form-control{padding:10px 12px;font-size:13px}.user-form-card .form-actions{gap:8px}.users-table-wrapper{border-radius:8px}.users-table{font-size:11px}.users-table th,.users-table td{padding:8px}.users-table th{font-size:10px}.role-badge,.status-badge{padding:4px 8px;font-size:10px}.no-data{padding:40px 20px;font-size:12px}}@media(max-width:480px){.users-section{gap:20px}.user-form-card{padding:14px}.users-table-wrapper{overflow-x:auto}.users-table{min-width:500px}.btn{padding:8px 10px;font-size:11px}}.btn-secondary:hover{background:var(--border-primary)}.btn-danger{background:var(--color-error);color:#fff}.btn-danger:hover{background:#dc2626}@media(max-width:768px){.users-table{font-size:12px}.users-table th,.users-table td{padding:8px}.user-form-card{padding:16px}}.create-user-overlay{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1200;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.create-user-modal{background:#1a2332;padding:32px;border-radius:12px;width:500px;max-width:90%;box-shadow:0 20px 60px #00000080;border:2px solid #3b82f6;animation:slideUp .3s ease}.create-user-modal h3{margin:0 0 24px;font-size:20px;color:#e6edf6;font-weight:600}.create-user-modal .form-row{margin-bottom:16px;display:flex;flex-direction:column}.create-user-modal label{font-size:14px;font-weight:500;margin-bottom:8px;color:#a9b4c7;display:block}.create-user-modal input,.create-user-modal select{width:100%;padding:12px;border:1.5px solid #3b4c66;border-radius:6px;background:#0f1419;color:#e6edf6;font-size:14px;transition:all .2s;box-sizing:border-box}.create-user-modal input:focus,.create-user-modal select:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f633}.create-user-modal input:hover:not(:focus),.create-user-modal select:hover:not(:focus){border-color:#3b82f6}.create-user-modal .form-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:24px;padding-top:16px;border-top:1px solid #3b4c66}.create-user-modal .btn{font-size:14px;padding:10px 16px;border-radius:6px;cursor:pointer;font-weight:500;transition:all .2s}.create-user-modal .btn-primary{background:#3b82f6;color:#fff;border:none}.create-user-modal .btn-primary:hover:not(:disabled){background:#2563eb;box-shadow:0 4px 12px #3b82f666}.create-user-modal .btn-primary:disabled{opacity:.6;cursor:not-allowed}.create-user-modal .btn-secondary{background:#3b4c66;color:#e6edf6;border:1px solid #3b4c66}.create-user-modal .btn-secondary:hover{background:#4a5f7a;border-color:#3b82f6}.modal-overlay{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:9999;padding:20px}.user-form-modal{background:var(--bg-primary);border-radius:16px;width:90%;max-width:700px;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px #0000004d}.user-form-modal .modal-header{display:flex;justify-content:space-between;align-items:center;padding:24px;border-bottom:2px solid var(--border-primary);position:sticky;top:0;background:var(--bg-primary);z-index:10}.user-form-modal .modal-header h3{margin:0;font-size:20px;font-weight:700;color:var(--text-primary)}.user-form{padding:24px;display:flex;flex-direction:column;gap:24px}.form-error{padding:12px 16px;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:8px;color:#ef4444;font-size:14px}.form-section{display:flex;flex-direction:column;gap:16px}.form-section h4{margin:0;font-size:16px;font-weight:700;color:var(--text-primary);display:flex;align-items:center;gap:8px}.form-group input,.form-group select{padding:12px;background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:8px;color:var(--text-primary);font-size:14px;transition:all .2s}.form-group select option{background:var(--bg-secondary);color:var(--text-primary);padding:12px}.form-group input:focus,.form-group select:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #3b82f61a}.checkbox-label{display:flex;align-items:center;gap:8px;cursor:pointer;padding:8px 0}.checkbox-label span{color:var(--text-primary);font-size:14px}.permissions-section{border:2px solid var(--border-primary);border-radius:12px;overflow:hidden}.permissions-header{display:flex;justify-content:space-between;align-items:center;padding:16px;background:var(--bg-secondary);cursor:pointer;transition:background .2s}.permissions-header:hover{background:#3b82f60d}.permissions-header h4{margin:0}.toggle-btn{width:32px;height:32px;border:none;background:transparent;color:var(--text-secondary);font-size:14px;cursor:pointer;transition:transform .2s}.permissions-content{padding:20px;display:flex;flex-direction:column;gap:20px}.permissions-info{margin:0;padding:12px;background:#3b82f61a;border-left:3px solid var(--color-primary);border-radius:4px;font-size:13px;color:var(--text-primary)}.permission-group{display:flex;flex-direction:column;gap:8px}.permission-group h5{margin:0;font-size:14px;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.permission-item{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--bg-secondary);border-radius:6px;cursor:pointer;transition:all .2s}.permission-item:hover{background:#3b82f60d}.permission-item input[type=checkbox]{width:18px;height:18px;cursor:pointer}.permission-item span{flex:1;font-size:14px;color:var(--text-primary);display:flex;align-items:center;gap:8px}.permission-override{font-weight:600;color:var(--color-primary)}.override-badge{padding:2px 8px;background:var(--color-primary);color:#fff;font-size:10px;font-weight:700;border-radius:8px;text-transform:uppercase}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover);transform:translateY(-2px)}.btn-secondary:hover:not(:disabled){background:#3b82f61a}@media(max-width:768px){.user-form-modal{width:95%;max-height:95vh}.user-form{padding:16px}.modal-actions{flex-direction:column}.btn-primary,.btn-secondary{width:100%}}.config-users-tab{display:flex;flex-direction:column;gap:24px}.tab-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.tab-subtitle{margin:4px 0 0;font-size:14px;color:var(--text-secondary)}.filters-bar{display:flex;gap:16px;align-items:center;padding:16px;background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:12px;margin-bottom:16px}.filter-search{flex:1;position:relative;display:flex;align-items:center}.filter-icon{position:absolute;left:12px;font-size:16px;color:var(--text-secondary);pointer-events:none}.filter-search input{width:100%;padding:10px 40px;background:var(--bg-primary);border:1px solid var(--border-primary);border-radius:8px;color:var(--text-primary);font-size:14px;transition:all .2s}.filter-search input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #3b82f61a}.filter-search input::placeholder{color:var(--text-tertiary)}.clear-search{position:absolute;right:8px;width:24px;height:24px;border:none;background:var(--bg-tertiary);color:var(--text-secondary);border-radius:50%;font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.clear-search:hover{background:var(--color-error);color:#fff}.filter-group{display:flex;align-items:center;gap:8px;white-space:nowrap}.filter-group label{font-size:13px;font-weight:600;color:var(--text-secondary)}.filter-group select{padding:8px 12px;background:var(--bg-primary);border:1px solid var(--border-primary);border-radius:8px;color:var(--text-primary);font-size:14px;cursor:pointer;transition:all .2s;min-width:150px}.filter-group select:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #3b82f61a}.filter-group select option{background:var(--bg-secondary);color:var(--text-primary)}.users-table-container{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:12px;overflow:hidden}.users-table{width:100%;border-collapse:collapse}.users-table thead{background:var(--bg-primary);border-bottom:2px solid var(--border-primary)}.users-table th{padding:16px;text-align:left;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary)}.users-table tbody tr{border-bottom:1px solid var(--border-primary);transition:background .2s}.users-table tbody tr:hover{background:#3b82f60d}.users-table tbody tr.user-disabled{opacity:.5}.users-table td{padding:16px;font-size:14px;color:var(--text-primary)}.user-cell{display:flex;align-items:center;gap:12px}.user-avatar{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,var(--color-primary),#2563eb);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px}.user-name{font-weight:600}.role-badge{display:inline-block;padding:4px 12px;border-radius:12px;font-size:12px;font-weight:600;white-space:nowrap}.status-badge{display:inline-flex;align-items:center;gap:4px;padding:4px 12px;border-radius:12px;font-size:12px;font-weight:600;white-space:nowrap}.btn-icon{width:36px;height:36px;border:none;background:#3b82f61a;border-radius:8px;font-size:16px;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}.config-loading{display:flex;align-items:center;justify-content:center;padding:64px 20px;color:var(--text-secondary)}@media(max-width:1024px){.filters-bar{flex-wrap:wrap}.filter-search{flex-basis:100%}.filter-group{flex:1;min-width:140px}.users-table{font-size:13px}.users-table th,.users-table td{padding:12px}.user-avatar{width:32px;height:32px;font-size:14px}}@media(max-width:768px){.tab-header{flex-direction:column}.filters-bar{flex-direction:column;gap:12px}.filter-search,.filter-group,.filter-group select{width:100%}.users-table-container{overflow-x:auto}.users-table{min-width:800px}}.config-dispositivi-tab{display:flex;flex-direction:column;gap:24px}.tab-header h2{margin:0;font-size:24px;font-weight:700;color:var(--text-primary)}.section-selector{display:flex;gap:12px;padding:16px;background:var(--bg-secondary);border-radius:12px;border:1px solid var(--border-primary)}.section-btn{flex:1;padding:14px 20px;background:transparent;border:2px solid var(--border-primary);border-radius:8px;color:var(--text-secondary);font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}.section-btn:hover{background:#3b82f60d;border-color:var(--accent-primary);color:var(--text-primary)}.section-btn.active{background:var(--accent-primary);border-color:var(--accent-primary);color:#fff}.filters-bar{display:flex;gap:16px;padding:16px;background:var(--bg-secondary);border-radius:12px;border:1px solid var(--border-primary)}.filter-group{display:flex;align-items:center;gap:8px;flex:1}.filter-group label{font-size:13px;font-weight:600;color:var(--text-secondary);white-space:nowrap}.filter-group select{flex:1;padding:10px;background:var(--bg-primary);border:1px solid var(--border-primary);border-radius:6px;color:var(--text-primary);font-size:14px}.section-content{display:flex;flex-direction:column;gap:16px}.content-header{display:flex;justify-content:space-between;align-items:center;gap:16px}.content-subtitle{margin:0;font-size:14px;color:var(--text-secondary);flex:1}.dispositivi-table-container{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:12px;overflow:hidden}.dispositivi-table{width:100%;border-collapse:collapse}.dispositivi-table thead{background:var(--bg-primary);border-bottom:2px solid var(--border-primary)}.dispositivi-table th{padding:16px;text-align:left;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary)}.dispositivi-table tbody tr{border-bottom:1px solid var(--border-primary);transition:background .2s}.dispositivi-table tbody tr:hover{background:#3b82f60d}.dispositivi-table tbody tr.item-disabled{opacity:.5}.dispositivi-table td{padding:16px;font-size:14px;color:var(--text-primary)}.status-badge{display:inline-flex;align-items:center;gap:4px;padding:4px 12px;border-radius:12px;font-size:12px;font-weight:600}.status-badge.active{background:#10b9811a;color:#10b981}.status-badge.inactive{background:#ef44441a;color:#ef4444}.actions-cell{display:flex;gap:8px}.btn-icon{width:36px;height:36px;border:none;background:#3b82f61a;border-radius:8px;font-size:16px;cursor:pointer;transition:all .2s}.btn-icon:hover{background:#3b82f633;transform:translateY(-2px)}.form-modal{background:var(--bg-primary);border-radius:16px;width:90%;max-width:600px;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px #0000004d}.form-modal .modal-header{display:flex;justify-content:space-between;align-items:center;padding:24px;border-bottom:2px solid var(--border-primary);position:sticky;top:0;background:var(--bg-primary);z-index:10}.form-modal .modal-header h3{margin:0;font-size:18px;font-weight:700;color:var(--text-primary)}.btn-close{width:32px;height:32px;border:none;background:#ef44441a;color:#ef4444;border-radius:8px;font-size:18px;cursor:pointer;transition:all .2s}.btn-close:hover{background:#ef444433}.form-content{padding:24px;display:flex;flex-direction:column;gap:20px}.form-group{display:flex;flex-direction:column;gap:8px}.form-group label{font-size:13px;font-weight:600;color:var(--text-secondary)}.form-group input,.form-group select,.form-group textarea{padding:12px;background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:8px;color:var(--text-primary);font-size:14px;font-family:inherit;transition:all .2s}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--accent-primary);box-shadow:0 0 0 3px #3b82f61a}.form-group textarea{resize:vertical;min-height:80px}.checkbox-label{display:flex;align-items:center;gap:8px;cursor:pointer}.modal-actions{display:flex;gap:12px;justify-content:flex-end;padding-top:16px;border-top:2px solid var(--border-primary)}.btn-primary,.btn-secondary{padding:12px 24px;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}.btn-primary{background:var(--accent-primary);color:#fff}.btn-primary:hover:not(:disabled){background:#2563eb;transform:translateY(-2px)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-secondary{background:var(--bg-secondary);color:var(--text-primary);border:1px solid var(--border-primary)}.btn-secondary:hover{background:#3b82f61a}.empty-state{padding:64px 20px;text-align:center;color:var(--text-secondary)}.empty-state p{margin:0 0 16px;font-size:16px}@media(max-width:768px){.section-selector,.filters-bar{flex-direction:column}.content-header{flex-direction:column;align-items:flex-start}.dispositivi-table-container{overflow-x:auto}.dispositivi-table{min-width:600px}}.config-permissions-matrix{display:flex;flex-direction:column;gap:32px}.matrix-header h2{margin:0 0 8px;font-size:24px;font-weight:700;color:var(--text-primary)}.matrix-subtitle{margin:0;font-size:14px;color:var(--text-secondary);line-height:1.6}.role-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px}.role-card{background:var(--bg-secondary);border-left:4px solid;border-radius:12px;padding:20px;transition:all .3s}.role-card:hover{transform:translateY(-4px);box-shadow:0 8px 24px #0000001a}.role-card-header h3{margin:0 0 12px;font-size:20px;font-weight:700}.role-description{margin:0;font-size:14px;color:var(--text-secondary);line-height:1.6}.matrix-table-container{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:12px;overflow:hidden}.matrix-table{width:100%;border-collapse:collapse}.matrix-table thead{background:var(--bg-primary);border-bottom:2px solid var(--border-primary)}.matrix-table th{padding:16px;text-align:left;font-size:14px;font-weight:700;text-transform:uppercase;letter-spacing:.5px}.matrix-table th.permission-col{color:var(--text-secondary);width:40%}.matrix-table tbody tr{border-bottom:1px solid var(--border-primary)}.matrix-table tbody tr.group-header{background:var(--bg-primary);border-top:2px solid var(--border-primary)}.matrix-table tbody tr.group-header td{padding:12px 16px;font-size:13px;font-weight:700;color:var(--color-primary);text-transform:uppercase;letter-spacing:.5px}.matrix-table td{padding:14px 16px;font-size:14px}.permission-label{display:flex;flex-direction:column;gap:4px}.perm-code{font-family:Courier New,monospace;font-size:12px;color:var(--color-primary);font-weight:600}.perm-desc{font-size:14px;color:var(--text-primary)}.permission-cell{text-align:center}.perm-badge{font-size:18px;display:inline-block}.perm-badge.allowed{color:#10b981}.perm-badge.denied{color:#ef4444;opacity:.5}.matrix-footer{margin-top:8px}.info-box{background:#e3f2fd;border-left:4px solid var(--color-info);border-radius:var(--radius-lg);padding:24px;margin-bottom:24px}.info-box h4{margin:0 0 16px;font-size:17px;font-weight:700;color:#1a1a1a;display:flex;align-items:center;gap:8px}.info-box ul{margin:0;padding-left:24px;list-style:none}.info-box ul li:before{content:"▸";color:var(--color-info);font-weight:700;display:inline-block;width:1em;margin-left:-1em}.info-box li{margin-bottom:10px;font-size:14px;color:#333;line-height:1.6}.info-box li:last-child{margin-bottom:0}.info-box strong{color:#000;font-weight:600}[data-theme=light] .info-box{background:var(--bg-secondary)}[data-theme=light] .info-box h4{color:var(--text-primary)}[data-theme=light] .info-box li{color:var(--text-secondary)}[data-theme=light] .info-box strong{color:var(--text-primary)}@media(max-width:1024px){.role-cards{grid-template-columns:1fr}.matrix-table-container{overflow-x:auto}.matrix-table{min-width:700px}}@media(max-width:768px){.matrix-table th,.matrix-table td{padding:10px;font-size:13px}.perm-code{font-size:11px}.perm-desc{font-size:13px}}.matrix-header{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;flex-wrap:wrap}.badge-customized{font-size:12px;background:var(--color-warning-bg);color:var(--color-warning);padding:4px 12px;border-radius:12px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.matrix-actions{display:flex;gap:12px;flex-shrink:0;flex-wrap:wrap}.permission-cell.editable{cursor:pointer;position:relative}.permission-cell.editable:hover{background:var(--bg-tertiary);border-radius:var(--radius-sm)}.permission-cell.editable:hover:after{content:"✏️";position:absolute;top:2px;right:2px;font-size:10px;opacity:.5}.loading,.error{text-align:center;padding:40px;color:var(--text-tertiary)}.error{color:var(--color-error)}.config-notifications-tab{padding:1.5rem;max-width:1200px}.notifications-header{margin-bottom:2rem}.notifications-header h2{font-size:1.75rem;font-weight:600;color:var(--text-0);margin-bottom:.5rem}.notifications-header p{color:var(--text-1);font-size:.95rem}.config-section{background:var(--bg-1);border:1px solid var(--border-subtle);border-radius:.75rem;padding:1.5rem;margin-bottom:1.5rem}.section-header{margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:1px solid var(--border-subtle)}.section-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.section-title h3{font-size:1.25rem;font-weight:600;color:var(--text-0);margin:0}.section-description{color:var(--text-1);font-size:.9rem;margin:0}.toggle-switch{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.toggle-switch input[type=checkbox]{position:absolute;opacity:0;width:0;height:0}.toggle-slider{position:relative;width:44px;height:24px;background-color:#4b5563;border-radius:24px;transition:background-color .2s}.toggle-slider:after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;background-color:#fff;border-radius:50%;transition:transform .2s}.toggle-switch input:checked+.toggle-slider{background-color:#10b981}.toggle-switch input:checked+.toggle-slider:after{transform:translate(20px)}.toggle-label{font-size:.9rem;font-weight:500;color:var(--text-1)}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.25rem;margin-bottom:1rem}.form-group label{font-size:.9rem;font-weight:500;color:var(--text-0)}.password-input-wrapper{position:relative;display:flex;align-items:center}.password-input-wrapper input{flex:1;padding-right:3rem!important}.password-toggle{position:absolute;right:.5rem;background:transparent;border:none;cursor:pointer;font-size:1.25rem;padding:.25rem .5rem;display:flex;align-items:center;justify-content:center;transition:opacity .2s;-webkit-user-select:none;user-select:none}.password-toggle:hover:not(:disabled){opacity:.7}.password-toggle:disabled{cursor:not-allowed;opacity:.3}.form-group input[type=text],.form-group input[type=email],.form-group input[type=password],.form-group input[type=number],.password-input-wrapper input{padding:.625rem .875rem;border:1px solid var(--border-subtle);border-radius:.5rem;background:var(--bg-0);color:var(--text-0);font-size:.9rem;transition:all .2s}.form-group input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.form-group input:disabled{opacity:.5;cursor:not-allowed;background:var(--bg-2)}.form-group small{font-size:.8rem;color:var(--text-2);margin-top:-.25rem}.checkbox-label{display:flex;align-items:center;gap:.5rem;font-size:.9rem;color:var(--text-0);cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox-label input[type=checkbox]:disabled{cursor:not-allowed;opacity:.5}.test-section{margin-top:1.5rem;padding:1rem;background:var(--bg-2);border-radius:.5rem;border:1px solid var(--border-subtle)}.test-section h4{font-size:1rem;font-weight:600;color:var(--text-0);margin:0 0 1rem}.test-form{display:flex;gap:1rem;align-items:center}.test-input{flex:1;padding:.625rem .875rem;border:1px solid var(--border-subtle);border-radius:.5rem;background:var(--bg-0);color:var(--text-0);font-size:.9rem}.test-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.btn-test{padding:.625rem 1.25rem;background:#3b82f6;color:#fff;border:none;border-radius:.5rem;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s;white-space:nowrap}.btn-test:hover:not(:disabled){background:#2563eb;transform:translateY(-1px);box-shadow:0 4px 6px #0000001a}.btn-test:disabled{opacity:.6;cursor:not-allowed}.info-box{margin-top:1.5rem;padding:1rem;background:#dbeafe;border:1px solid #93c5fd;border-radius:.5rem}.info-box h4{font-size:.95rem;font-weight:600;color:#1e40af;margin:0 0 .75rem}.info-box ol{margin:0;padding-left:1.5rem;color:#1e3a8a}.info-box li{margin-bottom:.5rem;font-size:.9rem;line-height:1.5}.info-box code{background:#bfdbfe;padding:.125rem .375rem;border-radius:.25rem;font-size:.85rem;font-family:Courier New,monospace}.actions-footer{position:sticky;bottom:0;padding:1.5rem;background:var(--bg-0);border-top:1px solid var(--border-subtle);margin:2rem -1.5rem -1.5rem;display:flex;justify-content:flex-end}.btn-save{padding:.75rem 2rem;background:#10b981;color:#fff;border:none;border-radius:.5rem;font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s}.btn-save:hover:not(:disabled){background:#059669;transform:translateY(-1px);box-shadow:0 4px 6px #0000001a}.btn-save:disabled{opacity:.6;cursor:not-allowed}.loading-state{padding:3rem;text-align:center;color:var(--text-1);font-size:1.1rem}[data-theme=light] .config-section{background:#fff;border-color:#e5e7eb}[data-theme=light] .section-header{border-bottom-color:#e5e7eb}[data-theme=light] .form-group input,[data-theme=light] .password-input-wrapper input{background:#f9fafb;border-color:#d1d5db;color:#111827}[data-theme=light] .form-group input:disabled,[data-theme=light] .password-input-wrapper input:disabled{background:#e5e7eb}[data-theme=light] .password-toggle{color:#4b5563}[data-theme=light] .test-section{background:#f9fafb;border-color:#e5e7eb}[data-theme=light] .test-input{background:#fff;border-color:#d1d5db;color:#111827}[data-theme=light] .info-box{background:#dbeafe;border-color:#93c5fd}[data-theme=light] .actions-footer{background:#fff;border-top-color:#e5e7eb}@media(max-width:768px){.form-grid{grid-template-columns:1fr}.test-form{flex-direction:column}.btn-test{width:100%}.actions-footer{padding:1rem}.btn-save{width:100%}}.config-ticket-sla{padding:20px;max-width:1400px;margin:0 auto}.config-sla-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px}.config-sla-header h2{margin:0 0 8px;font-size:24px;color:var(--text-0, #E6EDF6)}.config-sla-header p{margin:0;font-size:14px;color:var(--text-1, #B0BEC5)}.sla-form-card{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:12px;padding:24px;margin-bottom:30px}.form-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid rgba(59,130,246,.2)}.form-card-header h3{margin:0;font-size:18px;color:var(--text-0, #E6EDF6)}.form-group label{margin-bottom:6px;font-size:13px;font-weight:500;color:var(--text-1, #B0BEC5)}.form-group input,.form-group select{padding:10px 12px;background:var(--bg-secondary, #2d3748);border:1px solid rgba(59,130,246,.3);border-radius:6px;color:var(--text-0, #E6EDF6);font-size:14px;transition:all .2s}.form-group input:focus,.form-group select:focus{outline:none;border-color:var(--accent-primary, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.form-section{margin-bottom:24px;padding:16px;background:#3b82f60d;border-radius:8px}.form-section h4{margin:0 0 12px;font-size:15px;color:var(--text-0, #E6EDF6)}.checkbox-label{display:flex;align-items:center;gap:8px;margin-bottom:12px;cursor:pointer;font-size:14px;color:var(--text-0, #E6EDF6)}.checkbox-label:last-child{margin-bottom:0}.checkbox-label input[type=checkbox]{width:18px;height:18px;cursor:pointer}.checkbox-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}.form-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(59,130,246,.2)}.sla-templates-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:20px}.sla-template-card{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:12px;padding:20px;transition:all .3s;position:relative}.sla-template-card:hover{border-color:var(--accent-primary, #3b82f6);box-shadow:0 4px 12px #3b82f633;transform:translateY(-2px)}.sla-template-card.inactive{opacity:.6;border-color:#78909c4d}.sla-template-card.inactive:hover{opacity:.8}.template-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.template-header h3{margin:0 0 4px;font-size:16px;font-weight:600;color:var(--text-0, #E6EDF6)}.template-desc{margin:0;font-size:13px;color:var(--text-2, #78909C)}.badge-inactive{padding:4px 8px;background:#ef444433;color:#ef4444;border-radius:4px;font-size:11px;font-weight:600}.template-badges{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}.badge{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;background:#3b82f633;color:var(--accent-primary, #3b82f6);border-radius:4px;font-size:12px;font-weight:500}.template-sla{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;padding:12px;background:#3b82f60d;border-radius:8px}.sla-time{display:flex;flex-direction:column}.sla-label{font-size:11px;color:var(--text-2, #78909C);margin-bottom:4px}.sla-value{font-size:18px;font-weight:700;color:var(--accent-primary, #3b82f6)}.template-features{display:flex;gap:6px;margin-bottom:16px;flex-wrap:wrap}.feature-badge{padding:4px 8px;background:#10b98126;color:#10b981;border-radius:4px;font-size:11px;font-weight:500}.template-actions{display:flex;justify-content:flex-end;gap:8px;padding-top:12px;border-top:1px solid rgba(59,130,246,.15)}.btn-icon{padding:6px 10px;background:transparent;border:1px solid rgba(59,130,246,.3);border-radius:6px;color:var(--text-1, #B0BEC5);font-size:16px;cursor:pointer;transition:all .2s}.btn-icon.active{color:#10b981;border-color:#10b98180}.btn-icon.inactive{color:#78909c;border-color:#78909c4d}.btn-icon.danger{color:#ef4444;border-color:#ef444480}.btn-icon.danger:hover{background:#ef44441a;border-color:#ef4444}.empty-state{grid-column:1 / -1;text-align:center;padding:60px 20px;background:var(--panel, #1a2332);border:2px dashed rgba(59,130,246,.3);border-radius:12px}@media(max-width:768px){.config-sla-header{flex-direction:column;align-items:flex-start;gap:16px}.form-row,.sla-templates-grid,.checkbox-grid{grid-template-columns:1fr}}.config-general-tab{padding:24px}.section-header{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:32px;flex-wrap:wrap}.section-header h2{font-size:24px;font-weight:700;color:var(--text-primary);margin:0 0 8px}.section-subtitle{font-size:14px;color:var(--text-secondary);margin:0}.section-actions{display:flex;gap:12px;flex-shrink:0}.settings-grid{display:flex;flex-direction:column;gap:32px}.settings-section{background:var(--bg-secondary);border-radius:var(--radius-lg);padding:24px;border:1px solid var(--border-primary)}.settings-section h3{font-size:18px;font-weight:600;color:var(--text-primary);margin:0 0 20px;padding-bottom:12px;border-bottom:1px solid var(--border-secondary)}.form-group{margin-bottom:20px}.form-group:last-child{margin-bottom:0}.form-group label{display:block;font-size:14px;font-weight:500;color:var(--text-primary);margin-bottom:8px}.field-info{display:block;font-size:12px;font-weight:400;color:var(--text-tertiary);margin-top:4px}.form-control{width:100%;padding:10px 14px;border:1px solid var(--border-primary);border-radius:var(--radius-md);background:var(--bg-primary);color:var(--text-primary);font-size:14px;transition:border-color .2s}.form-control:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-alpha)}.form-control:disabled{opacity:.6;cursor:not-allowed;background:var(--bg-tertiary)}.icon-input{max-width:150px}.icon-preview{margin-top:12px;padding:12px 16px;background:var(--bg-tertiary);border-radius:var(--radius-sm);display:flex;align-items:center;gap:12px}.preview-label{font-size:13px;color:var(--text-tertiary);font-weight:500}.preview-value{font-size:18px;font-weight:600;color:var(--text-primary)}.btn-save,.btn-cancel,.btn-reset{padding:10px 20px;border:none;border-radius:var(--radius-md);font-weight:500;font-size:14px;cursor:pointer;transition:all .2s;white-space:nowrap}.btn-save{background:var(--color-primary);color:#fff}.btn-save:hover:not(:disabled){background:var(--color-primary-hover);transform:translateY(-2px);box-shadow:var(--shadow-md)}.btn-cancel{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-primary)}.btn-cancel:hover:not(:disabled){background:var(--bg-secondary)}.btn-reset{background:var(--color-warning-bg);color:var(--color-warning);border:1px solid var(--color-warning)}.btn-reset:hover:not(:disabled){background:var(--color-warning);color:#fff}.btn-save:disabled,.btn-cancel:disabled,.btn-reset:disabled{opacity:.5;cursor:not-allowed}.info-box{margin-top:24px;padding:16px;background:var(--color-info-bg);border-left:4px solid var(--color-info);border-radius:var(--radius-sm);font-size:14px;line-height:1.6}.loading{text-align:center;padding:40px;color:var(--text-tertiary)}@media(max-width:768px){.config-general-tab{padding:16px}.section-header{flex-direction:column;align-items:stretch}.section-actions{width:100%}.btn-save,.btn-cancel,.btn-reset{flex:1}.icon-input{max-width:100%}}.config-section{padding:24px;display:flex;flex-direction:column;gap:24px;height:100%}.config-header{margin-bottom:8px}.config-header h1{margin:0 0 8px;font-size:28px;font-weight:700;color:var(--text-primary)}.config-subtitle{margin:0;font-size:14px;color:var(--text-secondary)}.config-tabs{display:flex;gap:8px;border-bottom:2px solid var(--border-primary);padding-bottom:0}.config-tab{display:flex;align-items:center;gap:8px;padding:12px 24px;background:transparent;border:none;border-bottom:3px solid transparent;color:var(--text-secondary);font-size:14px;font-weight:600;cursor:pointer;transition:all .2s;position:relative;bottom:-2px}.config-tab:hover{color:var(--text-primary);background:#3b82f60d}.config-tab.active{color:var(--accent-primary);border-bottom-color:var(--accent-primary);background:#3b82f61a}.tab-icon{font-size:18px}.tab-label{white-space:nowrap}.config-content{flex:1;overflow-y:auto;padding:16px 0}.config-loading{display:flex;align-items:center;justify-content:center;padding:64px 20px;color:var(--text-secondary);font-size:14px}.config-error{padding:20px;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:8px;color:#ef4444;font-size:14px}.config-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:64px 20px;color:var(--text-secondary);text-align:center}.config-empty-icon{font-size:48px;margin-bottom:16px;opacity:.5}.config-empty p{margin:0;font-size:16px}@media(max-width:768px){.config-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch}.config-tab{padding:10px 16px;font-size:13px}.tab-icon{font-size:16px}}.tiptap-editor{border:1px solid var(--border-color);border-radius:8px;background:var(--bg-primary);overflow:hidden}.tiptap-toolbar{display:flex;flex-wrap:wrap;gap:4px;padding:8px;background:var(--bg-secondary);border-bottom:1px solid var(--border-color)}.tiptap-toolbar button{padding:6px 10px;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:4px;color:var(--text-primary);font-size:13px;cursor:pointer;transition:all .2s;min-width:32px;display:flex;align-items:center;justify-content:center}.tiptap-toolbar button:hover:not(:disabled){background:var(--bg-hover);border-color:var(--primary-color)}.tiptap-toolbar button.is-active{background:var(--primary-color);color:#fff;border-color:var(--primary-color)}.tiptap-toolbar button:disabled{opacity:.4;cursor:not-allowed}.toolbar-separator{width:1px;background:var(--border-color);margin:0 4px}.tiptap-editor-content{padding:16px;min-height:200px;max-height:400px;overflow-y:auto;color:var(--text-primary);font-size:14px;line-height:1.6}.tiptap-editor-content:focus{outline:none}.tiptap-editor-content p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:var(--text-tertiary);float:left;height:0;pointer-events:none}.tiptap-editor-content h1{font-size:2em;font-weight:700;margin:.5em 0;color:var(--text-primary)}.tiptap-editor-content h2{font-size:1.5em;font-weight:600;margin:.4em 0;color:var(--text-primary)}.tiptap-editor-content h3{font-size:1.25em;font-weight:600;margin:.3em 0;color:var(--text-primary)}.tiptap-editor-content p{margin:.5em 0}.tiptap-editor-content strong{font-weight:700}.tiptap-editor-content em{font-style:italic}.tiptap-editor-content s{text-decoration:line-through}.tiptap-editor-content ul,.tiptap-editor-content ol{padding-left:1.5em;margin:.5em 0}.tiptap-editor-content ul{list-style-type:disc}.tiptap-editor-content ol{list-style-type:decimal}.tiptap-editor-content li{margin:.25em 0}.tiptap-editor-content blockquote{border-left:4px solid var(--primary-color);padding-left:1em;margin:1em 0;color:var(--text-secondary);font-style:italic}.tiptap-editor-content code{background:var(--bg-secondary);padding:2px 6px;border-radius:4px;font-family:Courier New,monospace;font-size:.9em;color:var(--primary-color)}.tiptap-editor-content pre{background:var(--bg-secondary);padding:12px;border-radius:6px;overflow-x:auto;margin:1em 0}.tiptap-editor-content pre code{background:transparent;padding:0;color:var(--text-primary);font-size:.9em}.tiptap-editor-content hr{border:none;border-top:2px solid var(--border-color);margin:1.5em 0}.tiptap-editor-content::-webkit-scrollbar{width:8px}.tiptap-editor-content::-webkit-scrollbar-track{background:var(--bg-secondary)}.tiptap-editor-content::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px}.tiptap-editor-content::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary)}[data-theme=dark] .tiptap-editor{border-color:#ffffff1a}[data-theme=dark] .tiptap-toolbar{background:#1a1f2e;border-bottom-color:#ffffff1a}[data-theme=dark] .tiptap-toolbar button{background:#252d3d;border-color:#ffffff1a;color:#e6edf6}[data-theme=dark] .tiptap-toolbar button:hover:not(:disabled){background:#2d3548}.create-ticket-modal{width:90%;max-width:800px;max-height:90vh;overflow-y:auto}.modal-overlay{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-container{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.3);border-radius:12px;box-shadow:0 20px 60px #00000080}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid rgba(59,130,246,.2)}.modal-header h2{margin:0;font-size:20px;color:var(--text-0, #E6EDF6)}.modal-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid rgba(59,130,246,.3);border-radius:6px;color:var(--text-1, #B0BEC5);font-size:18px;cursor:pointer;transition:all .2s}.modal-close:hover{background:#ef444433;border-color:#ef4444;color:#ef4444}.modal-body{padding:24px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.form-group{display:flex;flex-direction:column}.form-group label{margin-bottom:6px;font-size:13px;font-weight:600;color:var(--text-0, #E6EDF6)}.form-group input,.form-group select,.form-group textarea{padding:10px 12px;background:var(--bg-secondary, #2d3748);border:1px solid rgba(59,130,246,.3);border-radius:6px;color:var(--text-0, #E6EDF6);font-size:14px;font-family:inherit;transition:all .2s}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--accent-primary, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.form-group small{margin-top:4px;font-size:12px;color:var(--text-2, #78909C)}.sla-info-box{margin:20px 0;padding:16px;background:#3b82f61a;border:1px solid rgba(59,130,246,.3);border-radius:8px}.sla-info-box strong{display:block;margin-bottom:8px;font-size:14px;color:var(--accent-primary, #3b82f6)}.sla-info-box p{margin:0;font-size:13px;line-height:1.5;color:var(--text-1, #B0BEC5)}.modal-footer{display:flex;justify-content:flex-end;gap:12px;padding-top:20px;border-top:1px solid rgba(59,130,246,.2)}.camera-points-selector{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:8px;padding:12px;background:var(--bg-secondary);border-radius:6px;max-height:200px;overflow-y:auto}.camera-point-item{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:6px;cursor:pointer;transition:all .2s}.camera-point-item:hover{background:var(--bg-hover);border-color:var(--primary-color)}.camera-point-item input[type=checkbox]{margin:0;cursor:pointer;width:18px;height:18px}.camera-point-info{display:flex;flex-direction:column;gap:2px;flex:1}.camera-point-name{font-weight:500;color:var(--text-primary);font-size:14px}.camera-point-type{font-size:12px;color:var(--text-secondary)}.no-camera-points{padding:16px;background:#3b82f61a;border:1px solid rgba(59,130,246,.3);border-radius:6px;text-align:center}.no-camera-points p{margin:0;color:var(--text-secondary);font-size:14px}@media(max-width:768px){.create-ticket-modal{width:95%;max-height:95vh}.form-row{grid-template-columns:1fr}.modal-body,.modal-header{padding:16px}.camera-points-selector{grid-template-columns:1fr}}.tickets-list-page{padding:20px;max-width:1600px;margin:0 auto}.page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px}.page-header h1{margin:0 0 8px;font-size:28px;color:var(--text-0, #E6EDF6)}.page-subtitle{margin:0;font-size:14px;color:var(--text-1, #B0BEC5)}.filters-card{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:12px;padding:20px;margin-bottom:20px}.filters-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.filters-header h3{margin:0;font-size:16px;color:var(--text-0, #E6EDF6)}.btn-text{background:none;border:none;color:var(--accent-primary, #3b82f6);font-size:14px;cursor:pointer;transition:opacity .2s}.btn-text:hover{opacity:.8}.filters-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.filter-group{display:flex;flex-direction:column}.filter-group label{margin-bottom:6px;font-size:13px;font-weight:500;color:var(--text-1, #B0BEC5)}.filter-group input,.filter-group select{padding:10px 12px;background:var(--bg-secondary, #2d3748);border:1px solid rgba(59,130,246,.3);border-radius:6px;color:var(--text-0, #E6EDF6);font-size:14px;transition:all .2s}.filter-group input:focus,.filter-group select:focus{outline:none;border-color:var(--accent-primary, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.tickets-card{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:12px;padding:20px}.tickets-summary{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;padding-bottom:12px;border-bottom:1px solid rgba(59,130,246,.2)}.tickets-summary span{font-size:14px;color:var(--text-1, #B0BEC5)}.filter-active{padding:4px 10px;background:#3b82f633;color:var(--accent-primary, #3b82f6);border-radius:4px;font-size:12px;font-weight:500}.tickets-table{overflow-x:auto}.tickets-table table{width:100%;border-collapse:collapse}.tickets-table thead{background:#3b82f61a}.tickets-table th{padding:12px;text-align:left;font-size:13px;font-weight:600;color:var(--text-0, #E6EDF6);border-bottom:2px solid rgba(59,130,246,.3)}.tickets-table td{padding:14px 12px;font-size:14px;color:var(--text-1, #B0BEC5);border-bottom:1px solid rgba(59,130,246,.1)}.tickets-table tbody tr{transition:background .2s}.tickets-table tbody tr:hover{background:#3b82f60d}.ticket-number{font-family:Courier New,monospace;font-weight:700;color:var(--accent-primary, #3b82f6);font-size:13px}.ticket-title{max-width:300px}.ticket-title strong{display:block;margin-bottom:4px;color:var(--text-0, #E6EDF6)}.ticket-tags{display:flex;gap:4px;flex-wrap:wrap;margin-top:4px}.tag{padding:2px 6px;background:#8b5cf633;color:#8b5cf6;border-radius:3px;font-size:11px;font-weight:500}.status-badge,.priority-badge{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:4px;font-size:12px;font-weight:600;white-space:nowrap}.assigned-user{display:flex;align-items:center;gap:4px;font-size:13px;color:var(--text-0, #E6EDF6)}.unassigned{color:var(--text-2, #78909C);font-style:italic;font-size:13px}.plant-name{display:flex;align-items:center;gap:4px;font-size:13px;color:var(--text-0, #E6EDF6)}.no-plant{color:var(--text-2, #78909C)}.sla-progress{display:flex;align-items:center;gap:8px}.sla-bar{width:80px;height:8px;background:#3b82f61a;border-radius:4px;overflow:hidden}.sla-percentage{font-size:12px;font-weight:600;min-width:35px}.sla-violated{padding:2px 6px;background:#ef444433;color:#ef4444;border-radius:3px;font-size:10px;font-weight:600}.no-sla{color:var(--text-2, #78909C)}.ticket-date{font-size:13px;color:var(--text-1, #B0BEC5)}.btn-icon{padding:6px 12px;background:transparent;border:1px solid rgba(59,130,246,.3);border-radius:6px;font-size:16px;cursor:pointer;transition:all .2s}.btn-icon:hover{background:#3b82f61a;border-color:var(--accent-primary, #3b82f6);transform:translateY(-1px)}.pagination{display:flex;justify-content:center;align-items:center;gap:20px;margin-top:20px;padding-top:20px;border-top:1px solid rgba(59,130,246,.2)}.btn-pagination{padding:8px 16px;background:var(--accent-primary, #3b82f6);border:none;border-radius:6px;color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.btn-pagination:hover:not(:disabled){background:#2563eb;transform:translateY(-1px)}.btn-pagination:disabled{opacity:.4;cursor:not-allowed}.pagination-info{font-size:14px;color:var(--text-1, #B0BEC5)}.loading-state,.empty-state{text-align:center;padding:60px 20px}.loading-state{font-size:18px;color:var(--text-1, #B0BEC5)}.empty-state p{margin:0 0 20px;font-size:16px;color:var(--text-1, #B0BEC5)}@media(max-width:1024px){.filters-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.tickets-table{font-size:12px}.ticket-title{max-width:200px}.sla-bar{width:60px}}@media(max-width:768px){.page-header{flex-direction:column;align-items:flex-start;gap:16px}.filters-grid{grid-template-columns:1fr}.tickets-table{display:block;overflow-x:auto}}.ticket-detail-page{padding:20px;max-width:1600px;margin:0 auto}.page-header{display:flex;align-items:center;gap:16px;margin-bottom:24px}.btn-back{padding:8px 16px;background:transparent;border:1px solid rgba(59,130,246,.3);border-radius:6px;color:var(--text-0, #E6EDF6);font-size:14px;cursor:pointer;transition:all .2s}.btn-back:hover{background:#3b82f61a;border-color:var(--accent-primary, #3b82f6)}.page-header h1{margin:0;font-size:28px;color:var(--text-0, #E6EDF6)}.ticket-layout{display:grid;grid-template-columns:1fr 380px;gap:24px}.ticket-main{display:flex;flex-direction:column;gap:20px}.ticket-header-card{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:12px;padding:24px}.ticket-title-section h2{margin:0 0 12px;font-size:24px;color:var(--text-0, #E6EDF6)}.ticket-meta{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:20px}.status-badge,.priority-badge,.category-badge{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:6px;font-size:13px;font-weight:600}.category-badge{background:#8b5cf633;color:#8b5cf6}.sla-card{margin:20px 0;padding:16px;background:#3b82f60d;border:1px solid rgba(59,130,246,.2);border-radius:8px}.sla-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.sla-title{font-size:14px;font-weight:600;color:var(--text-0, #E6EDF6)}.sla-percentage{font-size:20px;font-weight:700}.sla-bar{height:12px;background:#3b82f61a;border-radius:6px;overflow:hidden;margin-bottom:8px}.sla-bar-fill{height:100%;transition:width .3s,background .3s}.sla-info{display:flex;justify-content:space-between;font-size:12px;color:var(--text-1, #B0BEC5)}.sla-violated-banner{margin-top:12px;padding:10px;background:#ef444433;color:#ef4444;border-radius:6px;text-align:center;font-weight:600;font-size:13px}.ticket-description{margin-top:16px}.ticket-description h3{margin:0 0 12px;font-size:16px;color:var(--text-0, #E6EDF6)}.ticket-description p{margin:0;line-height:1.6;color:var(--text-1, #B0BEC5)}.ticket-tags-section{margin-top:16px;padding-top:16px;border-top:1px solid rgba(59,130,246,.1)}.ticket-tags-section strong{display:block;margin-bottom:8px;font-size:14px;color:var(--text-0, #E6EDF6)}.tag{display:inline-block;padding:4px 10px;margin:0 6px 6px 0;background:#8b5cf633;color:#8b5cf6;border-radius:4px;font-size:12px;font-weight:500}.comments-card{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:12px;padding:24px}.comments-card h3{margin:0 0 20px;font-size:18px;color:var(--text-0, #E6EDF6)}.add-comment{margin-bottom:20px;display:flex;flex-direction:column;gap:12px}.add-comment textarea{width:100%;padding:12px;background:var(--bg-secondary, #2d3748);border:1px solid rgba(59,130,246,.3);border-radius:6px;color:var(--text-0, #E6EDF6);font-size:14px;font-family:inherit;resize:vertical}.add-comment textarea:focus{outline:none;border-color:var(--accent-primary, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.comments-list{display:flex;flex-direction:column;gap:12px}.comment-item{padding:12px;background:#3b82f60d;border-radius:8px}.comment-header{display:flex;justify-content:space-between;margin-bottom:8px}.comment-author{font-size:13px;font-weight:600;color:var(--text-0, #E6EDF6)}.comment-date{font-size:12px;color:var(--text-2, #78909C)}.comment-text{margin:0;font-size:14px;line-height:1.5;color:var(--text-1, #B0BEC5)}.interventions-card{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:12px;padding:24px}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.card-header h3{margin:0;font-size:18px;color:var(--text-0, #E6EDF6)}.interventions-list{display:flex;flex-direction:column;gap:16px}.intervention-item{padding:16px;background:#3b82f60d;border:1px solid rgba(59,130,246,.2);border-radius:8px}.intervention-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;flex-wrap:wrap;gap:10px}.intervention-technicians{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.tech-badge{display:inline-block;padding:4px 10px;background:#3b82f626;border:1px solid rgba(59,130,246,.3);color:var(--text-0, #E6EDF6);border-radius:6px;font-size:12px;font-weight:500}.intervention-date{font-size:14px;font-weight:600;color:var(--text-0, #E6EDF6);margin-right:10px}.intervention-completed{display:inline-block;padding:2px 8px;background:#10b98133;color:#10b981;border-radius:4px;font-size:11px;font-weight:600}.intervention-scheduled{display:inline-block;padding:2px 8px;background:#3b82f633;color:#3b82f6;border-radius:4px;font-size:11px;font-weight:600}.btn-icon-edit{background:transparent;border:1px solid rgba(59,130,246,.3);color:var(--text-0, #E6EDF6);padding:6px 10px;border-radius:6px;cursor:pointer;font-size:14px;transition:all .2s}.btn-icon-edit:hover{background:#3b82f626;border-color:#3b82f699;transform:scale(1.05)}.intervention-tech{font-size:13px;color:var(--text-1, #B0BEC5)}.intervention-desc{margin:0 0 12px;font-size:14px;line-height:1.5;color:var(--text-1, #B0BEC5)}.work-done{margin-top:12px;padding:12px;background:#10b9811a;border-radius:6px}.work-done strong{display:block;margin-bottom:6px;font-size:13px;color:var(--text-0, #E6EDF6)}.work-done p{margin:0;font-size:13px;color:var(--text-1, #B0BEC5)}.materials-used{margin-top:12px;padding:12px;background:#f59e0b1a;border-radius:6px}.materials-used strong{display:block;margin-bottom:8px;font-size:13px;color:var(--text-0, #E6EDF6)}.materials-used ul{margin:0;padding-left:20px}.materials-used li{font-size:13px;color:var(--text-1, #B0BEC5);margin-bottom:4px}.ticket-sidebar{display:flex;flex-direction:column;gap:20px}.sidebar-card{background:var(--panel, #1a2332);border:1px solid rgba(59,130,246,.2);border-radius:12px;padding:20px}.sidebar-card h3{margin:0 0 16px;font-size:16px;color:var(--text-0, #E6EDF6)}.action-buttons{display:flex;flex-direction:column;gap:10px}.btn-block{width:100%;justify-content:center}.info-list{display:flex;flex-direction:column;gap:12px}.info-item{display:flex;justify-content:space-between;align-items:flex-start;padding:8px 0;border-bottom:1px solid rgba(59,130,246,.1)}.info-item:last-child{border-bottom:none}.info-label{font-size:13px;color:var(--text-2, #78909C);font-weight:500}.info-value{font-size:13px;color:var(--text-0, #E6EDF6);text-align:right}.timeline{display:flex;flex-direction:column;gap:16px}.timeline-item{display:flex;gap:12px;position:relative}.timeline-item:not(:last-child):after{content:"";position:absolute;left:14px;top:32px;bottom:-16px;width:2px;background:#3b82f633}.timeline-icon{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:#3b82f633;border-radius:50%;flex-shrink:0;font-size:14px}.timeline-content{flex:1;display:flex;flex-direction:column;gap:4px}.timeline-content strong{font-size:13px;color:var(--text-0, #E6EDF6)}.timeline-content span{font-size:12px;color:var(--text-2, #78909C)}.modal-form{display:flex;flex-direction:column;gap:16px;padding:16px 0}.modal-form-compact{display:flex;flex-direction:column;gap:12px;padding:8px 0}.modal-form-compact .form-row{display:grid;grid-template-columns:1fr 1fr auto;gap:12px}.modal-form-compact .form-group{display:flex;flex-direction:column;gap:6px}.modal-form-compact .form-group-small{min-width:110px}.modal-form-compact label{font-size:.75rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.modal-form-compact input[type=date],.modal-form-compact input[type=time],.modal-form-compact input[type=number],.modal-form-compact textarea{padding:.6rem .75rem;background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:6px;color:var(--text-primary);font-size:.9rem;transition:all .2s}.modal-form-compact input:focus,.modal-form-compact textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #3b82f61a}.modal-form-compact textarea{font-family:inherit;resize:vertical;min-height:60px}.modal-form-compact input::placeholder,.modal-form-compact textarea::placeholder{color:var(--text-tertiary);font-size:.85rem}@media(max-width:640px){.modal-form-compact .form-row{grid-template-columns:1fr;gap:10px}.modal-form-compact .form-group-small{min-width:100%}}.modal-form .form-group{display:flex;flex-direction:column;gap:8px}.modal-form label{font-size:13px;font-weight:600;color:var(--text-0, #E6EDF6);position:relative;padding-left:22px}.modal-form label:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:16px;height:16px;background:#3b82f633;border-radius:3px}.modal-form .form-group:nth-child(1) label:before{background:#3b82f633}.modal-form .form-group:nth-child(2) label:before{background:#f59e0b33}.modal-form .form-group:nth-child(3) label:before{background:#8b5cf633}.modal-form select,.modal-form input,.modal-form textarea{padding:12px 14px;background:var(--bg-secondary, #2d3748);border:2px solid rgba(59,130,246,.4);border-radius:8px;color:var(--text-0, #E6EDF6);font-size:14px;transition:all .2s}.modal-form textarea{min-height:100px;border:2px solid rgba(139,92,246,.5);background:#8b5cf60d;font-family:inherit;resize:vertical;line-height:1.5}.modal-form textarea:focus{border-color:#8b5cf6cc;background:#8b5cf614;box-shadow:0 0 0 4px #8b5cf626}.modal-form select[multiple]{padding:10px;min-height:140px;max-height:200px;overflow-y:auto;border:2px solid rgba(16,185,129,.5);background:#10b9810d}.modal-form select[multiple]:focus{border-color:#10b981cc;background:#10b98114;box-shadow:0 0 0 4px #10b98126}.modal-form select[multiple] option{padding:10px 12px;margin:3px 0;border-radius:6px;cursor:pointer;transition:all .2s;background:#3b82f60d;border:1px solid transparent}.modal-form select[multiple] option:hover{background:#3b82f626;border-color:#3b82f64d}.modal-form select[multiple] option:checked{background:#3b82f640;color:var(--text-0, #E6EDF6);font-weight:600;border-color:#3b82f680}.modal-form select:focus,.modal-form input:focus{outline:none;border-color:#3b82f6cc;background:#3b82f614;box-shadow:0 0 0 4px #3b82f626}.modal-form small{display:flex;align-items:center;gap:8px;margin-top:8px;padding:10px 12px;background:#3b82f614;border-radius:6px;border-left:4px solid rgba(59,130,246,.5);font-size:.85rem;color:var(--text-1, #B0BEC5)}.modal-form small:before{content:"ℹ️";font-size:14px}.modal-form-compact .form-group{margin-bottom:20px}.modal-form-compact .form-row{display:grid;grid-template-columns:1fr 1fr auto;gap:16px;margin-bottom:20px}.technician-select{min-height:120px!important}.empty-state{padding:40px 20px;text-align:center;color:var(--text-2, #78909C);font-size:14px}.loading-screen,.error-screen{display:flex;align-items:center;justify-content:center;min-height:400px;font-size:18px;color:var(--text-1, #B0BEC5)}@media(max-width:1200px){.ticket-layout{grid-template-columns:1fr}.ticket-sidebar{grid-row:2}}@media(max-width:768px){.ticket-detail-page{padding:12px}.page-header{flex-direction:column;align-items:flex-start;gap:12px}.page-header h1{font-size:22px}.intervention-header{flex-direction:column;align-items:flex-start;gap:8px}}.work-order-modal{max-width:800px;max-height:90vh;overflow-y:auto}.work-order-modal .modal-body{display:flex;flex-direction:column;gap:1.5rem;padding:2rem}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.form-group{display:flex;flex-direction:column;gap:.5rem}.form-group.full-width{grid-column:1 / -1}.form-group label{font-weight:600;color:var(--text-primary);font-size:.95rem}.required{color:#ef4444}.form-group input,.form-group select,.form-group textarea{padding:.75rem;border:1px solid var(--border-color);border-radius:8px;background:var(--input-bg);color:var(--text-primary);font-size:.95rem;font-family:inherit;transition:border-color .2s}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #3b82f61a}.form-group textarea{resize:vertical;min-height:100px}.technicians-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.75rem;max-height:200px;overflow-y:auto;padding:.5rem;background:var(--bg-secondary);border-radius:8px}.technician-checkbox{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:var(--card-bg);border:2px solid var(--border-color);border-radius:6px;cursor:pointer;transition:all .2s}.technician-checkbox:hover{border-color:var(--primary-color);background:var(--hover-bg)}.technician-checkbox.selected{border-color:var(--primary-color);background:linear-gradient(135deg,var(--primary-color)10,var(--primary-color)20)}.technician-checkbox input[type=checkbox]{cursor:pointer}.technician-name{flex:1;font-weight:600;color:var(--text-primary);font-size:.9rem}.technician-role{font-size:.75rem;color:var(--text-secondary);text-transform:uppercase;background:var(--bg-secondary);padding:.25rem .5rem;border-radius:4px}.no-data{text-align:center;color:var(--text-secondary);padding:1rem;font-style:italic}.checkbox-label{display:flex;align-items:center;gap:.75rem;padding:1rem;background:var(--bg-secondary);border-radius:8px;cursor:pointer;transition:background .2s}.checkbox-label:hover{background:var(--hover-bg)}.checkbox-label input[type=checkbox]{width:20px;height:20px;cursor:pointer}.checkbox-label span{font-weight:500;color:var(--text-primary)}.modal-footer{display:flex;justify-content:flex-end;gap:1rem;padding-top:1.5rem;border-top:1px solid var(--border-color);margin-top:1rem}@media(max-width:768px){.work-order-modal{max-width:95vw}.form-row,.technicians-grid{grid-template-columns:1fr}}.calendar-page{padding:1rem 1.5rem;max-width:100%;overflow-x:auto}.calendar-loading{display:flex;align-items:center;justify-content:center;min-height:400px;font-size:1.2rem;color:var(--text-secondary)}.calendar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;gap:1.5rem;flex-wrap:wrap}.calendar-title-section h1{font-size:1.5rem;margin:0;color:var(--text-primary)}.calendar-subtitle{color:var(--text-secondary);margin:.25rem 0 0;font-size:.85rem}.calendar-controls{display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.calendar-navigation{display:flex;gap:.5rem}.calendar-week-display{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.5rem;background:var(--card-bg);border-radius:8px;font-weight:600;color:var(--text-primary)}.week-label{font-size:1.2rem}.week-range{font-size:1rem}.calendar-filters{display:flex;gap:1rem;align-items:center;padding:.75rem 1rem;background:var(--bg-secondary);border-radius:8px;margin-bottom:1rem;flex-wrap:wrap;border:1px solid var(--border-primary)}.filter-group{display:flex;align-items:center;gap:.5rem}.filter-group label{font-weight:600;color:var(--text-secondary);white-space:nowrap;font-size:.85rem}.filter-select{padding:.4rem .75rem;border:1px solid var(--border-primary);border-radius:6px;background:var(--bg-primary);color:var(--text-primary);font-size:.85rem;min-width:180px}.filter-select option{background:var(--bg-secondary);color:var(--text-primary)}.view-toggle{display:flex;gap:.25rem;background:var(--input-bg);padding:.25rem;border-radius:6px}.view-btn{padding:.5rem 1rem;border:none;background:transparent;color:var(--text-secondary);cursor:pointer;border-radius:4px;transition:all .2s;font-weight:500}.view-btn.active{background:var(--primary-color);color:#fff}.view-btn:hover:not(.active){background:var(--hover-bg)}.calendar-stats{display:flex;gap:1rem;margin-left:auto}.stat-item{display:flex;align-items:center;gap:.5rem;padding:.4rem .75rem;background:var(--bg-primary);border-radius:6px;border:1px solid var(--border-primary)}.stat-label{font-size:.8rem;color:var(--text-secondary)}.stat-value{font-size:1rem;font-weight:700;color:var(--color-primary)}.calendar-grid-container{background:var(--bg-secondary);border-radius:8px;overflow:hidden;box-shadow:var(--shadow-md);border:1px solid var(--border-primary)}.calendar-grid{min-width:1200px}.calendar-grid-header{display:grid;grid-template-columns:70px repeat(7,1fr);border-bottom:2px solid var(--border-primary);background:var(--bg-tertiary);position:sticky;top:0;z-index:10}.time-column-header{padding:.75rem .5rem;font-weight:600;color:var(--text-secondary);border-right:2px solid var(--border-primary);display:flex;align-items:center;justify-content:center;font-size:.8rem}.day-header{padding:.75rem .5rem;text-align:center;border-right:1px solid var(--border-primary);transition:all .2s}.day-header:last-child{border-right:none}.day-header.today{background:var(--color-primary);background:linear-gradient(135deg,#3b82f626,#3b82f640)}.day-name{font-weight:700;font-size:.9rem;color:var(--text-primary);margin-bottom:.25rem}.day-date{font-size:.85rem;color:var(--text-secondary);margin-bottom:.25rem}.day-count{font-size:.75rem;color:var(--primary-color);font-weight:600}.calendar-grid-body{max-height:calc(100vh - 320px);overflow-y:auto}.calendar-row{display:grid;grid-template-columns:70px repeat(7,1fr);border-bottom:1px solid var(--border-primary);min-height:70px}.calendar-row:hover{background:#3b82f608}.time-cell{padding:.4rem;border-right:2px solid var(--border-primary);display:flex;align-items:flex-start;justify-content:center;background:var(--bg-tertiary)}.time-label{font-size:.75rem;color:var(--text-secondary);font-weight:600}.calendar-cell{padding:.4rem;border-right:1px solid var(--border-primary);position:relative;min-height:70px;cursor:pointer;transition:all .2s;background:var(--bg-primary)}.calendar-cell:hover{background:var(--hover-bg)}.calendar-cell:last-child{border-right:none}.calendar-cell.today{background:linear-gradient(135deg,var(--primary-color)03,var(--primary-color)08)}.intervention-card{background:var(--bg-secondary);border:1px solid var(--border-primary);border-left:3px solid var(--color-primary);border-radius:4px;padding:.4rem;margin-bottom:.35rem;cursor:pointer;transition:all .2s;font-size:.75rem}.intervention-card:hover{transform:translateY(-1px);box-shadow:var(--shadow-md);z-index:10;border-left-width:4px}.ticket-intervention{background:linear-gradient(135deg,rgba(59,130,246,.08),var(--bg-secondary))}.work-order-card{background:linear-gradient(135deg,rgba(245,158,11,.08),var(--bg-secondary));border-left-width:4px}.intervention-time{font-size:.7rem;color:var(--text-secondary);margin-bottom:.2rem;font-weight:600}.intervention-title{font-weight:700;margin-bottom:.2rem;color:var(--text-primary);font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.intervention-description{font-size:.7rem;color:var(--text-secondary);margin-bottom:.2rem;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.3}.intervention-technician,.intervention-plant,.intervention-duration{font-size:.65rem;color:var(--text-tertiary);margin-bottom:.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.intervention-status{display:inline-block;padding:.15rem .4rem;border-radius:3px;font-size:.65rem;font-weight:600;color:#fff;margin-top:.2rem}color: var(--text-secondary); margin-bottom: .25rem; } .intervention-title{font-weight:700;color:var(--text-primary);margin-bottom:.25rem;font-size:.9rem}.intervention-description{color:var(--text-secondary);margin-bottom:.25rem;font-size:.8rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.intervention-technician,.intervention-plant{font-size:.75rem;color:var(--text-secondary);margin-top:.25rem}.intervention-status{display:inline-block;padding:.25rem .5rem;border-radius:4px;font-size:.7rem;font-weight:600;color:#fff;margin-top:.5rem}.technician-view{display:flex;flex-direction:column;gap:1.5rem}.technician-section{background:var(--card-bg);border-radius:12px;padding:1.5rem;box-shadow:0 2px 8px #0000001a}.technician-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:2px solid var(--border-color)}.technician-info h3{margin:0 0 .25rem;color:var(--text-primary);font-size:1.3rem}.technician-email{color:var(--text-secondary);font-size:.9rem}.stat-badge{padding:.5rem 1rem;background:var(--primary-color);color:#fff;border-radius:20px;font-size:.9rem;font-weight:600}.interventions-timeline{display:flex;flex-direction:column;gap:1rem}.timeline-intervention{background:var(--bg-secondary);border:1px solid var(--border-color);border-left:4px solid var(--primary-color);border-radius:8px;padding:1rem;cursor:pointer;transition:all .2s}.timeline-intervention:hover{transform:translate(4px);box-shadow:0 4px 12px #0000001a}.timeline-date{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem;font-weight:600;color:var(--text-primary)}.timeline-time{color:var(--text-secondary);font-size:.9rem}.timeline-content{margin-bottom:.75rem}.timeline-title{font-weight:700;color:var(--text-primary);margin-bottom:.5rem;font-size:1.05rem}.timeline-description{color:var(--text-secondary);margin-bottom:.5rem}.timeline-plant,.timeline-work-done{font-size:.9rem;color:var(--text-secondary);margin-top:.25rem}.timeline-status{display:inline-block;padding:.4rem .8rem;border-radius:6px;font-size:.85rem;font-weight:600;color:#fff}.empty-state{text-align:center;padding:2rem;color:var(--text-secondary);font-style:italic}.empty-state-large{text-align:center;padding:4rem;color:var(--text-secondary);font-size:1.2rem}.calendar-grid-body::-webkit-scrollbar{width:8px;height:8px}.calendar-grid-body::-webkit-scrollbar-track{background:var(--bg-tertiary);border-radius:4px}.calendar-grid-body::-webkit-scrollbar-thumb{background:var(--color-primary);border-radius:4px}.calendar-grid-body::-webkit-scrollbar-thumb:hover{background:var(--color-primary-hover)}@keyframes fadeIn{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.intervention-card{animation:fadeIn .2s ease-out}.calendar-cell.today:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--color-primary);z-index:1}@media(max-width:1400px){.calendar-grid{min-width:1000px}}@media(max-width:768px){.calendar-page{padding:1rem}.calendar-controls{flex-direction:column;align-items:flex-start}.calendar-filters,.filter-group{flex-direction:column;align-items:stretch}.filter-select{width:100%}.calendar-stats{margin-left:0;width:100%}}.audit-logs-page{padding:2rem;max-width:1800px;margin:0 auto}.page-header{margin-bottom:2rem}.page-header h1{margin:0 0 .5rem;font-size:2rem;color:var(--text-primary)}.page-header p{margin:0;color:var(--text-secondary)}.tabs{display:flex;gap:.5rem;margin-bottom:2rem;border-bottom:2px solid var(--border-primary)}.tabs button{padding:.75rem 1.5rem;border:none;background:none;cursor:pointer;font-size:1rem;color:var(--text-secondary);border-bottom:3px solid transparent;transition:all var(--duration-normal)}.tabs button:hover{color:var(--color-primary)}.tabs button.active{color:var(--color-primary);border-bottom-color:var(--color-primary);font-weight:600}.filters-section{background:var(--bg-secondary);padding:1.5rem;border-radius:var(--radius-md);margin-bottom:1.5rem;box-shadow:var(--shadow-md)}.filter-row{display:flex;gap:1rem;margin-bottom:1rem}.filter-row:last-child{margin-bottom:0}.search-input{flex:1;padding:.75rem;border:1px solid var(--border-primary);border-radius:var(--radius-sm);font-size:.95rem;background:var(--bg-tertiary);color:var(--text-primary)}.filters-section select{padding:.75rem;border:1px solid var(--border-primary);border-radius:var(--radius-sm);background:var(--bg-tertiary);color:var(--text-primary);cursor:pointer;min-width:150px}.filters-section input[type=date]{padding:.75rem;border:1px solid var(--border-primary);border-radius:var(--radius-sm);background:var(--bg-tertiary);color:var(--text-primary)}.export-btn{padding:.75rem 1.5rem;border:none;background:var(--color-primary);color:#fff;border-radius:var(--radius-sm);cursor:pointer;font-weight:500;transition:background var(--duration-normal)}.export-btn:hover{background:var(--color-primary-hover)}.logs-table-container{background:var(--bg-secondary);border-radius:var(--radius-md);overflow:hidden;box-shadow:var(--shadow-md);margin-bottom:1.5rem}.logs-table{width:100%;border-collapse:collapse}.logs-table thead{background:var(--bg-tertiary)}.logs-table th{padding:1rem;text-align:left;font-weight:600;color:var(--text-primary);border-bottom:2px solid var(--border-primary)}.logs-table td{padding:1rem;border-bottom:1px solid var(--border-primary);color:var(--text-primary)}.logs-table tbody tr:hover{background:var(--bg-tertiary)}.timestamp{font-family:Courier New,monospace;font-size:.85remtertiary);white-space:nowrap}.user-info{display:flex;flex-direction:column;gap:.25rem}.user-info strong{color:var(--text-primary)}.user-info small{color:var(--text-secondary color: var(--text-secondary, #666); font-size: .85rem; } .role-badge { display: inline-block; padding: .15rem .5rem; border-radius: 12px; font-size: .75rem; font-weight: 600; text-transform: uppercase; } .role-badge.admin { background: #dc3545; color: white; } .role-badge.manager { background: #ffc107; color: #333; } .role-badge.technician { background: #17a2b8; color: white; } .role-badge.client { background: #6c757d; color: white; } .resource-info { display: flex; flex-direction: column; gap: .25rem; } .resource-info strong { text-transform: capitalize; color: var(--text-primary); } .resource-info small { color: var(--text-secondary); font-size: .85rem; } .status-badge, .severity-badge { display: inline-block; padding: .25rem .75rem; border-radius: 12px; font-size: .85rem; font-weight: 600; color: white; text-transform: uppercase; } .ip { font-family: "Courier New", monospace; font-size: .85remtertiary); } .details-btn { padding: .35rem .75rem; border: 1px solid var(--border-primary); background: var(--bg-tertiary); color: var(--text-primary); border-radius: var(--radius-sm); cursor: pointer; transition: all var(--duration-normal); } .details-btn:hover { background: var(--bg-primary); border-color: var(--color-primary border-color: var(--primary-color, #2196f3); } .pagination { display: flex; align-items: center; justify-content: center; gap: 1rem; padding: 1rem;bg-secondary); border-radius: var(--radius-md); box-shadow: var(--shadow-md); } .pagination button { padding: .5rem 1rem; border: 1px solid var(--border-primary); background: var(--bg-tertiary); color: var(--text-primary); border-radius: var(--radius-sm); cursor: pointer; transition: all var(--duration-normal); } .pagination button:hover:not(:disabled) { background: var(--color-primary); color: white; border-color: var(--color-primary); } .pagination button:disabled { opacity: .5; cursor: not-allowed; } .pagination span { color: var(--text-primary) cursor: not-allowed; } .stats-section { display: flex; flex-direction: column; gap: 2rem; } .stats-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem; } .stat-card { background: var(--card-bg, white); padding: 1.5rem; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,.1); text-align: center; } .stat-card h3 { margin: 0 0 1rem 0; font-size: 1rem; color: var(--text-secondary, #666); font-weight: 500; } .stat-value { font-size: 2.5rem; font-weight: 700; color: var(--text-color, #333); margin-bottom: .5rem; } .stat-value.success { color: #28a745; } .stat-value.failed { color: #dc3545; } .stat-value.denied { color: #ffc107; } .stat-card small { color: var(--text-tertiary); font-size: .85rem; } .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); gap: 1.5rem; } .stats-box { background: var(--bg-secondary); padding: 1.5rem; border-radius: var(--radius-md); box-shadow: var(--shadow-md); } .stats-box.full-width { grid-column: 1 / -1; } .stats-box h3 { margin: 0 0 1.5rem 0; font-size: 1.1rem; color: var(--text-primary); } .severity-bars { display: flex; flex-direction: column; gap: 1rem; } .severity-bar { display: flex; align-items: center; gap: 1rem; } .severity-bar label { min-width: 80px; font-weight: 500; text-transform: capitalize; } .bar-container { flex: 1; display: flex; align-items: center; gap: .5rem; } .bar-fill { height: 24px; border-radius: var(--radius-sm); transition: width var(--duration-normal); min-width: 2px; } .top-list { list-style: none; padding: 0; margin: 0; } .top-list li { display: flex; justify-content: space-between; align-items: center; padding: .75rem 0; border-bottom: 1px solid var(--border-primary); color: var(--text-primary); } .top-list li:last-child { border-bottom: none; } .timeline-chart { display: flex; align-items: flex-end; gap: .5rem; height: 200px; padding: 1rem 0; } .timeline-bar { flex: 1; display: flex; flex-direction: column; align-items: center; gap: .5rem; } .bar-stack { width: 100%; height: 160px; display: flex; flex-direction: column-reverse; gap: 2px;var(--radius-sm); overflow: hidden; } .bar-segment { width: 100%; transition: height var(--duration-normal); cursor: pointer; } .bar-segment.success { background: var(--color-success); } .bar-segment.failed { background: var(--color-error); } .bar-segment.denied { background: var(--color-warning); } .timeline-bar small { font-size: .75rem; color: var(--text-tertiary); transform: rotate(-45deg); white-space: nowrap; } .loading { text-align: center; padding: 3rem; color: var(--text-secondary); font-size: 1.1rem; --input-bg: #2a2a2a; } } .manager-dashboard { padding: 2rem; max-width: 1800px; margin: 0 auto; } .dashboard-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem; } .dashboard-header h1 { margin: 0; font-size: 2rem; color: var(--text-primary); } .period-selector { display: flex; align-items: center; gap: .5rem; } .period-selector label { font-weight: 500; color: var(--text-primary); } .period-selector select { padding: .5rem 1rem; border: 1px solid var(--border-primary); border-radius: var(--radius-sm); background: var(--bg-secondary); color: var(--text-primary); cursor: pointer; } .summary-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; margin-bottom: 2rem; } .summary-card { background: var(--bg-secondary); border-radius: var(--radius-md); padding: 1.5rem; box-shadow: var(--shadow-md); display: flex; gap: 1rem; transition: transform var(--duration-normal); } .summary-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); } .card-icon { font-size: 3rem; line-height: 1; } .card-content { flex: 1; } .card-content h3 { margin: 0 0 .5rem 0; font-size: .9rem; color: var(--text-secondary); text-transform: uppercase; font-weight: 500; } .card-value { font-size: 2rem; font-weight: 700; color: var(--color-primary); margin-bottom: .5rem; } .card-breakdown { display: flex; gap: 1rem; font-size: .85rem; } .card-breakdown span { padding: .25rem .5rem; border-radius: var(--radius-sm); background: var(--bg-tertiary); color: var(--text-primary); } .card-breakdown .open { color: var(--color-warning); font-weight: 600; } .card-breakdown .progress { color: var(--color-info); font-weight: 600; } .card-breakdown .closed { color: var(--color-success); font-weight: 600; } .card-breakdown .pending { color: var(--color-warning); font-weight: 600; } .card-breakdown .completed { color: var(--color-success); font-weight: 600; } .card-breakdown .success { color: var(--color-success); font-weight: 600; } .card-breakdown .warning { color: var(--color-error); font-weight: 600; } .section { background: var(--bg-secondary); border-radius: var(--radius-md); padding: 1.5rem; box-shadow: var(--shadow-md); margin-bottom: 2rem; } .section h2 { margin: 0 0 1.5rem 0; font-size: 1.3rem; color: var(--text-primary); } .table-container { overflow-x: auto; } .performance-table { width: 100%; border-collapse: collapse; } .performance-table th { padding: 1rem; text-align: left; font-weight: 600; background: var(--bg-tertiary); color: var(--text-primary); border-bottom: 2px solid var(--border-primary); } .performance-table td { padding: 1rem; border-bottom: 1px solid var(--border-primary); color: var(--text-primary); } .performance-table tbody tr:hover { background: var(--bg-tertiary); } .tech-info { display: flex; flex-direction: column; gap: .25rem; } .tech-info strong { color: var(--text-primary); } .tech-info small { color: var(--text-secondary); font-size: .85rem; } .number { text-align: center; font-weight: 500; } .number.success { color: var(--color-success); font-weight: 600; } .progress-bar-container { position: relative; height: 24px; background: var(--bg-tertiary); border-radius: var(--radius-full); overflow: hidden; } .progress-bar-fill { height: 100%; background: linear-gradient(90deg, var(--color-success), var(--color-teal-500)); transition: width var(--duration-normal); } .progress-label { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: .85rem; font-weight: 600; color: var(--text-primary); } .timeline-container { padding: 1rem 0; } .timeline-chart { display: flex; align-items: flex-end; gap: .5rem; height: 250px; padding: 1rem 0; margin-bottom: 1rem; } .timeline-day { flex: 1; display: flex; flex-direction: column; align-items: center; gap: .5rem; } .timeline-bars { width: 100%; height: 200px; display: flex; align-items: flex-end; justify-content: center; gap: 2px; } .timeline-bar { flex: 1; border-radius: var(--radius-sm) var(--radius-sm) 0 0; transition: all var(--duration-normal); cursor: pointer; min-height: 2px; } .timeline-bar:hover { opacity: .8; } .timeline-bar.ticket-created { background: var(--color-primary); } .timeline-bar.ticket-closed { background: var(--color-success); } .timeline-bar.wo-created { background: var(--color-warning); } .timeline-date { font-size: .75rem; color: var(--text-tertiary); transform: rotate(-45deg); white-space: nowrap; } .timeline-legend { display: flex; justify-content: center; gap: 2rem; padding: 1rem; background: var(--bg-tertiary); border-radius: var(--radius-sm); } .legend-item { display: flex; align-items: center; gap: .5rem; font-size: .9rem; color: var(--text-primary); } .legend-color { width: 20px; height: 20px; border-radius: var(--radius-sm); } .legend-color.ticket-created { background: var(--color-primary); } .legend-color.ticket-closed { background: var(--color-success); } .legend-color.wo-created { background: var(--color-warning); } .top-issues-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 1rem; } .issue-card { display: flex; align-items: center; gap: 1rem; padding: 1rem;bg-tertiary); border-radius: var(--radius-md); border-left: 4px solid var(--color-primary); transition: all var(--duration-normal); } .issue-card:hover { transform: translateX(4px); box-shadow: var(--shadow-md); } .issue-rank { font-size: 2rem; font-weight: 700; color: var(--color-primary); min-width: 50px; text-align: center; } .issue-content { flex: 1; } .issue-content h4 { margin: 0 0 .25rem 0; font-size: 1rem; color: var(--text-primary); } .issue-count { font-size: .85rem; color: var(--text-secondary); } .loading { text-align: center; padding: 3rem; color: var(--text-secondary); font-size: 1.1rem; --hover-bg: #2a2a2a; } } @media (max-width: 768px) { .dashboard-header { flex-direction: column; align-items: flex-start; gap: 1rem; } .summary-cards { grid-template-columns: 1fr; } .performance-table { font-size: .85rem; } .performance-table th, .performance-table td { padding: .5rem; } .top-issues-grid { grid-template-columns: 1fr; } } .monitoring-status-badge { display: inline-flex; align-items: center; gap: 6px; padding: 4px 12px; border-radius: 12px; font-size: 14px; font-weight: 500; transition: all .2s; } .monitoring-status-badge.status-badge-small { padding: 2px 8px; font-size: 12px; gap: 4px; } .status-icon { font-size: 1.1em; line-height: 1; } .status-label { white-space: nowrap; } .status-online { background: var(--color-success-bg); color: var(--color-success); } .status-offline { background: var(--color-error-bg); color: var(--color-error); animation: pulse-error 2s ease-in-out infinite; } @keyframes pulse-error { 0%, 100% { opacity: 1; } 50% { opacity: .7; } } .status-warning { background: var(--color-warning-bg); color: var(--color-warning); } .status-info { background: var(--color-info-bg); color: var(--color-info); } .status-muted { background: var(--bg-tertiary); color: var(--text-tertiary); } .status-acknowledged { background: rgba(59, 130, 246, .15); color: var(--color-primary); } .status-resolved { background: var(--color-success-bg); color: var(--color-success); opacity: .7; } .status-unknown { background: var(--bg-tertiary); color: var(--text-tertiary); } [data-theme="light"] .status-badge { box-shadow: 0 1px 2px rgba(0, 0, 0, .05); } .modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, .6); display: flex; align-items: center; justify-content: center; z-index: 9999; padding: 20px; animation: fadeIn .2s; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .modal-content { background: var(--bg-primary); border-radius: 12px; max-width: 600px; width: 100%; max-height: 90vh; overflow-y: auto; box-shadow: var(--shadow-xl); animation: slideUp .3s; } @keyframes slideUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 24px; border-bottom: 1px solid var(--border-primary); } .modal-header h2 { margin: 0; font-size: 24px; font-weight: 700; color: var(--text-primary); } .modal-close { background: none; border: none; font-size: 32px; color: var(--text-tertiary); cursor: pointer; line-height: 1; transition: color .2s; padding: 0; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; } .modal-close:hover { color: var(--text-primary); } .modal-body { padding: 24px; } .alert-info-box { background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: 8px; padding: 16px; margin-bottom: 24px; } .alert-info-title { font-size: 16px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; } .alert-info-desc { font-size: 14px; color: var(--text-secondary); line-height: 1.5; } .form-group { margin-bottom: 20px; } .form-group label { display: block; margin-bottom: 8px; font-size: 14px; font-weight: 600; color: var(--text-primary); } .form-control { width: 100%; padding: 10px 12px; background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: 8px; color: var(--text-primary); font-size: 14px; font-family: inherit; transition: all .2s; } .form-control:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, .1); } textarea.form-control { resize: vertical; min-height: 80px; } .form-help { margin-top: 6px; font-size: 13px; color: var(--text-tertiary); } .modal-actions { display: flex; gap: 12px; justify-content: flex-end; margin-top: 24px; padding-top: 20px; border-top: 1px solid var(--border-primary); } .btn-primary, .btn-secondary { padding: 10px 24px; border-radius: 8px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all .2s; border: none; } .btn-primary { background: var(--color-primary); color: white; } .btn-primary:hover { background: var(--color-primary-hover); transform: translateY(-1px); } .btn-secondary { background: var(--bg-secondary); color: var(--text-primary); border: 1px solid var(--border-primary); } .btn-secondary:hover { background: var(--bg-tertiary); } @media (max-width: 768px) { .modal-overlay { padding: 0; } .modal-content { max-height: 100vh; border-radius: 0; } .modal-actions { flex-direction: column-reverse; } .btn-primary, .btn-secondary { width: 100%; } } .create-ticket-modal { max-width: 800px; max-height: 90vh; overflow-y: auto; } .alert-summary { background: var(--bg-tertiary); border-radius: var(--radius-md); padding: 16px; margin-bottom: 24px; border-left: 4px solid var(--border-primary); } .alert-summary-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; } .severity-badge { display: inline-flex; align-items: center; gap: 6px; padding: 4px 12px; border-radius: 12px; font-size: 12px; font-weight: 600; text-transform: uppercase; } .severity-badge.critical { background: var(--color-error-bg); color: var(--color-error); } .severity-badge.high { background: rgba(249, 115, 22, .1); color: #f97316; } .severity-badge.medium { background: var(--color-warning-bg); color: var(--color-warning); } .severity-badge.low { background: var(--color-info-bg); color: var(--color-info); } .alert-id { font-family: monospace; font-size: 12px; color: var(--text-tertiary); } .alert-summary-title { font-size: 16px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; } .alert-summary-device { font-size: 13px; color: var(--text-secondary); } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .info-box { background: var(--color-info-bg); border-left: 4px solid var(--color-info); padding: 12px 16px; border-radius: var(--radius-sm); font-size: 13px; line-height: 1.6; margin-bottom: 24px; } @media (max-width: 768px) { .form-row { grid-template-columns: 1fr; } } .monitoring-overview { padding: 24px; max-width: 1400px; margin: 0 auto; } .monitoring-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 32px; } .monitoring-header h1 { margin: 0 0 8px; font-size: 32px; font-weight: 700; color: var(--text-primary); } .header-subtitle { margin: 0; color: var(--text-secondary); font-size: 15px; } .header-actions { display: flex; gap: 12px; } .btn-refresh { padding: 10px 20px; background: var(--bg-secondary); color: var(--text-primary); border: 1px solid var(--border-primary); border-radius: 8px; cursor: pointer; font-size: 14px; font-weight: 500; transition: all .2s; } .btn-refresh:hover { background: var(--bg-tertiary); transform: rotate(180deg); } .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin-bottom: 32px; } .stat-card { background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: 12px; padding: 20px; display: flex; align-items: center; gap: 16px; transition: all .3s; } .stat-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); } .stat-icon { font-size: 36px; line-height: 1; } .stat-value { font-size: 32px; font-weight: 700; color: var(--text-primary); line-height: 1; } .stat-label { font-size: 14px; color: var(--text-secondary); margin-top: 4px; } .stat-card.stat-offline .stat-icon, .stat-card.stat-offline .stat-value { color: var(--color-error); } .stat-card.stat-online .stat-icon, .stat-card.stat-online .stat-value { color: var(--color-success); } .stat-card.stat-alerts .stat-icon, .stat-card.stat-alerts .stat-value { color: var(--color-warning); } .alerts-section, .plants-section, .agents-section { margin-bottom: 32px; } .section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } .section-header h2 { margin: 0; font-size: 20px; font-weight: 700; color: var(--text-primary); } .btn-text { background: none; border: none; color: var(--color-primary); cursor: pointer; font-size: 14px; font-weight: 500; transition: opacity .2s; } .btn-text:hover { opacity: .8; } .alerts-list { display: flex; flex-direction: column; gap: 16px; } .alert-card { background: var(--bg-secondary); border: 1px solid var(--border-primary); border-left: 4px solid var(--border-primary); border-radius: 12px; padding: 20px; transition: all .3s; } .alert-card:hover { box-shadow: var(--shadow-md); } .alert-card.severity-critical { border-left-color: var(--color-error); background: rgba(239, 68, 68, .05); } .alert-card.severity-high { border-left-color: #ff6b35; } .alert-card.severity-medium { border-left-color: var(--color-warning); } .alert-card.severity-low { border-left-color: var(--color-info); } .alert-main { display: flex; align-items: flex-start; gap: 16px; margin-bottom: 16px; } .alert-icon { font-size: 24px; line-height: 1; flex-shrink: 0; } .alert-content { flex: 1; min-width: 0; } .alert-title { font-size: 16px; font-weight: 600; color: var(--text-primary); margin-bottom: 6px; } .alert-description { font-size: 14px; color: var(--text-secondary); margin-bottom: 10px; line-height: 1.5; } .alert-meta { display: flex; flex-wrap: wrap; gap: 16px; font-size: 13px; color: var(--text-tertiary); } .alert-plant, .alert-time, .alert-failures { display: inline-flex; align-items: center; gap: 4px; } .alert-status { flex-shrink: 0; } .alert-actions { display: flex; flex-wrap: wrap; gap: 8px; padding-top: 16px; border-top: 1px solid var(--border-primary); } .btn-action { padding: 8px 16px; background: var(--bg-primary); color: var(--text-primary); border: 1px solid var(--border-primary); border-radius: 6px; cursor: pointer; font-size: 13px; font-weight: 500; transition: all .2s; } .btn-action:hover { background: var(--bg-tertiary); border-color: var(--color-primary); } .btn-link { padding: 8px 16px; background: var(--color-primary); color: white; border: none; border-radius: 6px; cursor: pointer; font-size: 13px; font-weight: 500; transition: all .2s; } .btn-link:hover { opacity: .9; } .plants-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; } .plant-card { background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: 12px; padding: 20px; display: flex; align-items: center; gap: 16px; transition: all .3s; } .plant-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); } .plant-card.plant-critical { border-left: 4px solid var(--color-error); background: rgba(239, 68, 68, .05); } .plant-card.plant-warning { border-left: 4px solid var(--color-warning); } .plant-card.plant-ok { border-left: 4px solid var(--color-success); } .plant-status-icon { font-size: 32px; line-height: 1; } .plant-info { flex: 1; min-width: 0; } .plant-name { margin: 0 0 8px; font-size: 16px; font-weight: 600; color: var(--text-primary); } .plant-stats { display: flex; flex-direction: column; gap: 4px; font-size: 14px; } .plant-stat { color: var(--text-secondary); } .plant-stat-critical { color: var(--color-error); font-weight: 600; } .plant-stat-ok { color: var(--color-success); } .btn-arrow { background: none; border: none; color: var(--color-primary); cursor: pointer; font-size: 14px; font-weight: 500; white-space: nowrap; transition: transform .2s; } .btn-arrow:hover { transform: translateX(4px); } .agents-summary { background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: 12px; padding: 20px; display: flex; flex-wrap: wrap; gap: 24px; align-items: center; } .agent-stat { display: flex; align-items: center; gap: 8px; } .agent-stat-label { font-size: 14px; color: var(--text-secondary); } .agent-stat-value { font-size: 24px; font-weight: 700; color: var(--text-primary); } .agent-stat.online .agent-stat-value { color: var(--color-success); } .agent-stat.offline .agent-stat-value { color: var(--color-error); } .agent-stat.error .agent-stat-value { color: #ff6b35; } .agent-stat.health .agent-stat-value { color: var(--color-primary); } .loading-spinner, .error-message { text-align: center; padding: 60px 20px; color: var(--text-secondary); font-size: 16px; } .error-message { color: var(--color-error); } @media (max-width: 768px) { .monitoring-overview { padding: 16px; } .monitoring-header { flex-direction: column; gap: 16px; } .header-actions { width: 100%; } .header-actions button { flex: 1; } .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 12px; } .plants-list { grid-template-columns: 1fr; } .alert-actions { flex-direction: column; } .btn-action, .btn-link { width: 100%; } } .monitoring-alerts-page { padding: 24px; max-width: 1200px; margin: 0 auto; } .page-header { margin-bottom: 32px; } .page-header h1 { font-size: 32px; font-weight: 700; color: var(--text-primary); margin: 0 0 8px; } .page-header p { font-size: 16px; color: var(--text-secondary); margin: 0; } .filters-section { background: var(--bg-secondary); border-radius: var(--radius-lg); padding: 20px; margin-bottom: 24px; display: flex; gap: 16px; flex-wrap: wrap; align-items: flex-end; border: 1px solid var(--border-primary); } .filter-group { display: flex; flex-direction: column; gap: 8px; min-width: 180px; } .filter-group label { font-size: 13px; font-weight: 500; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .5px; } .filter-group select { padding: 10px 14px; border: 1px solid var(--border-primary); border-radius: var(--radius-md); background: var(--bg-primary); color: var(--text-primary); font-size: 14px; cursor: pointer; transition: border-color .2s; } .filter-group select:hover { border-color: var(--color-primary); } .filter-group select:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px var(--color-primary-alpha); } .btn-refresh { padding: 10px 20px; background: var(--color-primary); color: white; border: none; border-radius: var(--radius-md); font-weight: 500; cursor: pointer; transition: background .2s; height: fit-content; } .btn-refresh:hover { background: var(--color-primary-hover); } .alerts-list { display: flex; flex-direction: column; gap: 16px; } .alert-item { background: var(--bg-secondary); border-radius: var(--radius-lg); border: 1px solid var(--border-primary); overflow: hidden; transition: transform .2s, box-shadow .2s; } .alert-item:hover { transform: translateX(4px); box-shadow: var(--shadow-lg); } .alert-item.severity-critical { border-left: 4px solid var(--color-error); background: linear-gradient(135deg, var(--bg-secondary) 0%, rgba(239, 68, 68, .03) 100%); } .alert-item.severity-high { border-left: 4px solid #f97316; background: linear-gradient(135deg, var(--bg-secondary) 0%, rgba(249, 115, 22, .03) 100%); } .alert-item.severity-medium { border-left: 4px solid var(--color-warning); } .alert-item.severity-low { border-left: 4px solid var(--color-info); } .alert-main { display: flex; gap: 16px; padding: 20px; } .alert-icon { font-size: 32px; line-height: 1; flex-shrink: 0; } .alert-content { flex: 1; min-width: 0; } .alert-header-row { display: flex; justify-content: space-between; align-items: center; gap: 16px; margin-bottom: 8px; } .alert-title { font-size: 18px; font-weight: 600; color: var(--text-primary); margin: 0; } .alert-description { font-size: 14px; color: var(--text-secondary); line-height: 1.6; margin: 0 0 12px; } .alert-meta { display: flex; flex-wrap: wrap; gap: 16px; font-size: 13px; color: var(--text-tertiary); } .meta-item { display: inline-flex; align-items: center; gap: 4px; } .meta-item.alert-id { font-family: monospace; background: var(--bg-tertiary); padding: 2px 8px; border-radius: 4px; font-size: 12px; } .alert-metadata { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--border-secondary); display: flex; flex-wrap: wrap; gap: 16px; font-size: 12px; color: var(--text-tertiary); } .alert-actions { display: flex; gap: 8px; padding: 12px 20px; background: var(--bg-tertiary); border-top: 1px solid var(--border-secondary); flex-wrap: wrap; } .btn-action { padding: 8px 16px; border: none; border-radius: var(--radius-sm); font-size: 13px; font-weight: 500; cursor: pointer; transition: all .2s; white-space: nowrap; } .btn-action.acknowledge { background: var(--color-info-bg); color: var(--color-info); } .btn-action.acknowledge:hover { background: var(--color-info); color: white; } .btn-action.mute { background: var(--color-warning-bg); color: var(--color-warning); } .btn-action.mute:hover { background: var(--color-warning); color: white; } .btn-action.resolve { background: var(--color-success-bg); color: var(--color-success); } .btn-action.resolve:hover { background: var(--color-success); color: white; } .btn-action.create-ticket { background: var(--color-primary-bg); color: var(--color-primary); } .btn-action.create-ticket:hover { background: var(--color-primary); color: white; } .btn-action.view-ticket { background: var(--bg-secondary); color: var(--text-primary); border: 1px solid var(--border-primary); } .btn-action.view-ticket:hover { background: var(--bg-primary); } .loading, .empty-state { text-align: center; padding: 60px 20px; color: var(--text-tertiary); background: var(--bg-secondary); border-radius: var(--radius-lg); border: 1px solid var(--border-primary); } .empty-state p { font-size: 16px; margin: 0; } @media (max-width: 768px) { .monitoring-alerts-page { padding: 16px; } .filters-section { flex-direction: column; align-items: stretch; } .filter-group { min-width: 100%; } .btn-refresh { width: 100%; } .alert-main { flex-direction: column; } .alert-header-row { flex-direction: column; align-items: flex-start; } .alert-meta { flex-direction: column; gap: 8px; } .alert-actions { flex-direction: column; } .btn-action { width: 100%; } } .monitoring-devices-page { padding: 24px; max-width: 1400px; margin: 0 auto; } .page-header { display: flex; align-items: center; gap: 20px; margin-bottom: 32px; } .btn-back { padding: 10px 20px; background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: var(--radius-md); color: var(--text-primary); font-weight: 500; cursor: pointer; transition: all .2s; } .btn-back:hover { background: var(--bg-tertiary); transform: translateX(-4px); } .page-header h1 { font-size: 32px; font-weight: 700; color: var(--text-primary); margin: 0 0 4px; } .plant-name { font-size: 16px; color: var(--text-secondary); margin: 0; } .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; margin-bottom: 32px; } .stat-card { background: var(--bg-secondary); border-radius: var(--radius-lg); padding: 20px; border: 1px solid var(--border-primary); } .stat-label { font-size: 13px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .5px; margin-bottom: 8px; } .stat-value { font-size: 32px; font-weight: 700; color: var(--text-primary); } .stat-card.online { border-left: 4px solid var(--color-success); } .stat-card.offline { border-left: 4px solid var(--color-error); } .stat-card.warning { border-left: 4px solid var(--color-warning); } .devices-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 20px; } .device-card { background: var(--bg-secondary); border-radius: var(--radius-lg); padding: 20px; border: 1px solid var(--border-primary); transition: transform .2s, box-shadow .2s; } .device-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); } .device-card.status-online { border-left: 4px solid var(--color-success); } .device-card.status-offline { border-left: 4px solid var(--color-error); } .device-card.status-warning { border-left: 4px solid var(--color-warning); } .device-header { display: flex; gap: 12px; margin-bottom: 16px; align-items: flex-start; } .device-icon-wrapper { display: flex; flex-direction: column; align-items: center; gap: 8px; } .device-icon { font-size: 32px; line-height: 1; } .device-title { flex: 1; min-width: 0; } .device-title h3 { font-size: 18px; font-weight: 600; color: var(--text-primary); margin: 0 0 4px; word-break: break-word; } .device-type { font-size: 13px; color: var(--text-tertiary); text-transform: uppercase; letter-spacing: .5px; } .device-info { margin-bottom: 16px; padding: 12px; background: var(--bg-tertiary); border-radius: var(--radius-sm); } .info-row { display: flex; justify-content: space-between; align-items: center; padding: 6px 0; font-size: 14px; } .info-row:not(:last-child) { border-bottom: 1px solid var(--border-secondary); } .info-label { color: var(--text-secondary); font-weight: 500; } .info-value { color: var(--text-primary); font-family: monospace; } .info-row.alert-row { border-top: 2px solid var(--color-error); padding-top: 8px; margin-top: 8px; } .alert-count { color: var(--color-error); font-weight: 700; font-size: 16px; } .protocols-status { margin-bottom: 16px; } .protocols-label { font-size: 12px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .5px; margin-bottom: 8px; } .protocols-list { display: flex; flex-wrap: wrap; gap: 6px; } .protocol-badge { padding: 4px 10px; background: var(--color-primary-bg); color: var(--color-primary); border-radius: 12px; font-size: 11px; font-weight: 600; letter-spacing: .5px; } .device-actions { display: flex; gap: 8px; flex-wrap: wrap; } .btn-action { flex: 1; min-width: 120px; padding: 8px 16px; background: var(--color-primary); color: white; border: none; border-radius: var(--radius-sm); font-size: 13px; font-weight: 500; cursor: pointer; transition: all .2s; } .btn-action:hover { background: var(--color-primary-hover); transform: translateY(-2px); } .btn-action.alerts { background: var(--color-error); } .btn-action.alerts:hover { background: #dc2626; } .loading, .empty-state { text-align: center; padding: 60px 20px; color: var(--text-tertiary); background: var(--bg-secondary); border-radius: var(--radius-lg); border: 1px solid var(--border-primary); } .empty-state p { font-size: 16px; margin: 0; } @media (max-width: 768px) { .monitoring-devices-page { padding: 16px; } .page-header { flex-direction: column; align-items: flex-start; } .stats-grid { grid-template-columns: repeat(2, 1fr); } .devices-grid { grid-template-columns: 1fr; } .device-actions { flex-direction: column; } .btn-action { width: 100%; } } :root { --bg-0: #161d2c; --bg-1: #1d2638; --bg-2: #24304a; --text-0: #e6edf6; --text-1: #a9b4c7; --primary: #3b83f9; --primary-hover: #5894ef; --success: #22c55e; --warning: #f59e0b; --danger: #ef4444; --border-subtle: rgba(255, 255, 255, .1); --transition: all .2s cubic-bezier(.4, 0, .2, 1); } .topbar { position: fixed; top: 0; left: 0; right: 0; height: 64px; background: linear-gradient(180deg, var(--bg-1) 0%, var(--bg-0) 100%); border-bottom: 1px solid var(--border-subtle); display: flex; align-items: center; justify-content: space-between; padding: 0 20px; z-index: 1100; box-shadow: 0 2px 8px rgba(0, 0, 0, .3); } .topbar-left { display: flex; align-items: center; gap: 16px; } .topbar-menu-toggle { background: transparent; border: 1px solid var(--border-subtle); color: var(--text-0); font-size: 24px; cursor: pointer; padding: 8px 12px; border-radius: 8px; transition: var(--transition); } .topbar-menu-toggle:hover { border-color: var(--primary); color: var(--primary); background: rgba(59, 131, 249, .1); } .topbar-logo { font-size: 18px; font-weight: 700; color: var(--text-0); letter-spacing: -.5px; } .topbar-right { display: flex; align-items: center; gap: 16px; } .topbar-theme-toggle { background: transparent; border: 1px solid var(--border-subtle); color: var(--text-0); font-size: 18px; cursor: pointer; padding: 8px 12px; border-radius: 8px; transition: var(--transition); } .topbar-theme-toggle:hover { border-color: var(--primary); color: var(--primary); background: rgba(59, 131, 249, .1); } .topbar-user { position: relative; } .topbar-user-button { background: transparent; border: 1px solid var(--border-subtle); color: var(--text-0); font-size: 14px; cursor: pointer; padding: 8px 16px; border-radius: 8px; transition: var(--transition); font-weight: 600; } .topbar-user-button:hover { border-color: var(--primary); color: var(--primary); background: rgba(59, 131, 249, .1); } .topbar-user-menu { position: absolute; top: calc(100% + 8px) ; right: 0; background: var(--bg-2); border: 1px solid var(--border-subtle); border-radius: 12px; min-width: 240px; box-shadow: 0 8px 32px rgba(0, 0, 0, .4); z-index: 1101; overflow: hidden; } .user-menu-item { padding: 12px 16px; color: var(--text-1); font-size: 13px; border-bottom: 1px solid var(--border-subtle); } .user-menu-logout { width: 100%; padding: 12px 16px; background: transparent; border: none; color: var(--danger); font-size: 14px; font-weight: 600; cursor: pointer; transition: var(--transition); text-align: left; } .user-menu-logout:hover { background: rgba(239, 68, 68, .1); } @media (max-width: 768px) { .topbar { height: 56px; padding: 0 16px; } .topbar-logo { font-size: 16px; } .topbar-user-button { padding: 6px 12px; font-size: 13px; } } @media (max-width: 480px) { .topbar { height: 52px; padding: 0 12px; } .topbar-logo { font-size: 14px; } .topbar-left { gap: 10px; } .topbar-menu-toggle { font-size: 18px; } .topbar-user-button { padding: 4px 8px; font-size: 12px; } .topbar-theme-toggle { padding: 6px; font-size: 16px; } } .sidebar { position: fixed; left: 0; top: 64px; bottom: 0; width: 240px; background: linear-gradient(180deg, var(--bg-1) 0%, var(--bg-0) 100%); border-right: 1px solid var(--border-subtle); display: flex; flex-direction: column; transition: var(--transition); padding-top: 16px; z-index: 99; } .sidebar.collapsed { width: 80px; } .sidebar-header { font-size: 12px; font-weight: 700; color: var(--text-1); text-transform: uppercase; letter-spacing: 1px; padding: 0 16px 16px 16px; border-bottom: 1px solid var(--border-subtle); margin-bottom: 8px; } .sidebar-nav { flex: 1; display: flex; flex-direction: column; gap: 4px; padding: 0 8px; } .sidebar-item { display: flex; align-items: center; gap: 12px; padding: 12px 12px; color: var(--text-1); text-decoration: none; border-radius: 8px; transition: var(--transition); border-left: 3px solid transparent; position: relative; } .sidebar-item:hover { background: rgba(59, 131, 249, .1); color: var(--primary); } .sidebar-item.active { background: rgba(59, 131, 249, .15); color: var(--primary); border-left-color: var(--primary); } .sidebar.collapsed .sidebar-item { justify-content: center; gap: 0; padding: 12px 8px; } .sidebar-icon { font-size: 20px; flex-shrink: 0; } .sidebar-label { font-size: 14px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .sidebar.collapsed .sidebar-label { display: none; } .sidebar.collapsed .sidebar-item { position: relative; } .sidebar.collapsed .sidebar-item:hover::after { content: attr(title); position: absolute; left: calc(100% + 8px) ; background: var(--bg-2); color: var(--text-0); padding: 6px 12px; border-radius: 6px; font-size: 12px; font-weight: 600; white-space: nowrap; border: 1px solid var(--border-subtle); z-index: 110; box-shadow: 0 4px 12px rgba(0, 0, 0, .3); } @media (max-width: 768px) { .sidebar { width: 60px; } .sidebar.collapsed { width: 60px; } .sidebar-header { display: none; } .sidebar-item { padding: 12px 8px; gap: 0; justify-content: center; } .sidebar-label { display: none; } } @media (max-width: 480px) { .sidebar { width: 50px; } .sidebar-item { padding: 10px 6px; } .sidebar-icon { font-size: 18px; } .sidebar-tooltip { font-size: 11px; } } :root { --bg-0: #161d2c; --bg-1: #1d2638; --bg-2: #24304a; --text-0: #e6edf6; --text-1: #a9b4c7; --primary: #3b83f9; --primary-hover: #5894ef; --success: #22c55e; --warning: #f59e0b; --danger: #ef4444; --border-subtle: rgba(255, 255, 255, .1); --transition: all .2s cubic-bezier(.4, 0, .2, 1); } [data-theme="light"] { --bg-0: #f8f9fa; --bg-1: #ffffff; --bg-2: #f3f4f6; --bg-3: #e5e7eb; --text-0: #111827; --text-1: #4b5563; --text-2: #6b7280; --primary: #3b82f6; --primary-hover: #2563eb; --success: #16a34a; --warning: #ca8a04; --danger: #dc2626; --border-subtle: rgba(0, 0, 0, .15); --transition: all .2s cubic-bezier(.4, 0, .2, 1); } body { background: var(--bg-0); color: var(--text-0); } .app-layout { display: flex; height: 100vh; flex-direction: column; background: var(--bg-0); } .app-main { flex: 1; margin-top: 64px; margin-left: 240px; overflow-y: auto; overflow-x: hidden; transition: var(--transition); } .app-main.sidebar-collapsed { margin-left: 80px; } .loading-screen { display: flex; align-items: center; justify-content: center; height: 100vh; width: 100%; background: var(--bg-0); color: var(--text-0); font-size: 18px; font-weight: 600; } @media (max-width: 768px) { .app-main { margin-left: 60px; } .app-main.sidebar-collapsed { margin-left: 60px; } } @media (max-width: 640px) { .app-main { margin-left: 0; } } @media (max-width: 480px) { .app-main { margin-left: 50px; } } )})}
