:root{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:#0f172a;background:#f1f5f9;line-height:1.5}*{box-sizing:border-box}body{margin:0}a{color:#0369a1}button,input,select,textarea{font:inherit}.card{background:#fff;border-radius:10px;padding:1.25rem;box-shadow:0 1px 3px #0f172a14}.row{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.badge{display:inline-block;padding:.15rem .5rem;border-radius:999px;font-size:.8rem;font-weight:600}.badge-online{background:#dcfce7;color:#166534}.badge-offline{background:#fee2e2;color:#991b1b}.badge-check-warning{background:#ffedd5;color:#c2410c}.badge-unknown{background:#e2e8f0;color:#334155}table{width:100%;border-collapse:collapse;font-size:.9rem}th,td{text-align:left;padding:.5rem .35rem;border-bottom:1px solid #e2e8f0}th{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:#64748b}.btn{cursor:pointer;border:none;border-radius:8px;padding:.45rem .85rem;font-weight:600;background:#0ea5e9;color:#fff}.btn.secondary{background:#e2e8f0;color:#0f172a}.btn.danger{background:#ef4444}.btn:disabled{opacity:.55;cursor:not-allowed}input,select,textarea{border:1px solid #cbd5e1;border-radius:8px;padding:.45rem .6rem;min-width:0}.grid-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.75rem;margin-bottom:1rem}.stat{background:#fff;border-radius:10px;padding:.85rem;box-shadow:0 1px 3px #0f172a0f}.stat strong{display:block;font-size:1.4rem}.layout{max-width:1200px;margin:0 auto;padding:1rem}.topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.muted{color:#64748b;font-size:.85rem}#root{min-height:100vh}.lfm-app{display:flex;min-height:100vh;background:#e8eef4}.sidebar{width:260px;flex-shrink:0;background:#222d32;color:#c8cdd3;display:flex;flex-direction:column;min-height:100vh;position:sticky;top:0;align-self:flex-start;max-height:100vh;overflow-y:auto}.sidebar-brand{padding:1.1rem 1rem 1rem;border-bottom:1px solid rgb(255 255 255 / .08);font-size:.95rem;line-height:1.35;color:#f1f5f9}.sidebar-nav{display:flex;flex-direction:column;padding:.5rem 0;gap:.15rem}.sidebar-nav-sub{padding-top:.15rem;padding-bottom:.5rem;border-bottom:1px solid rgb(255 255 255 / .06)}.sidebar-divider{height:1px;margin:.35rem 0;background:#ffffff14}.sidebar-link{display:block;padding:.55rem 1rem .55rem .85rem;margin:0 .5rem;border-radius:6px;color:#cbd5e1;text-decoration:none;font-weight:600;font-size:.9rem;border-left:3px solid transparent}.sidebar-link:hover{background:#ffffff0f;color:#f8fafc}.sidebar-link.is-active{background:#0ea5e938;color:#fff;border-left-color:#0ea5e9}.sidebar-link-sub{font-weight:500;font-size:.85rem;padding-left:1.25rem}.sidebar-settings-head{padding:.35rem .5rem 0}.sidebar-settings-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.5rem .75rem;margin:0;border:none;border-radius:6px;background:#ffffff0a;color:#e2e8f0;font:inherit;font-weight:700;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;cursor:pointer}.sidebar-settings-toggle:hover{background:#ffffff14}.sidebar-chevron{font-size:.7rem;opacity:.85}.sidebar-spacer{flex:1;min-height:.75rem}.sidebar-footer{padding:1rem .85rem 1.1rem;border-top:1px solid rgb(255 255 255 / .1);margin-top:auto}.sidebar-user-email{font-size:.8rem;word-break:break-word;color:#f1f5f9;font-weight:600;line-height:1.3}.sidebar-user-role{font-size:.75rem;margin-top:.2rem;margin-bottom:.65rem;text-transform:capitalize}.btn-sidebar-logout{width:100%;background:#ffffff1a;color:#f1f5f9}.btn-sidebar-logout:hover{background:#ffffff29}.lfm-main{flex:1;min-width:0;display:flex;flex-direction:column}.content-topbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1.5rem;padding:.85rem 1.25rem;background:#fff;border-bottom:1px solid #dce3eb;box-shadow:0 1px 2px #0f172a0a}.content-title{margin:0;font-size:1.35rem;font-weight:700;color:#0f172a}.page-breadcrumb{font-size:.85rem;color:#64748b}.page-breadcrumb a{color:#0369a1;text-decoration:none;font-weight:600}.page-breadcrumb a:hover{text-decoration:underline}.bc-sep{margin:0 .35rem;color:#94a3b8}.bc-muted{color:#94a3b8}.content-body{flex:1;padding:1.25rem;max-width:1280px;width:100%;margin:0 auto}.content-body--wide{max-width:none;width:100%;margin:0;align-self:stretch}.miniserver-card{width:100%;max-width:none}.miniserver-table-wrap{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.miniserver-table{width:100%}.btn-outline-version{display:inline-flex;align-items:center;justify-content:center;min-width:5.25rem;padding:.3rem .65rem;border-radius:8px;font:inherit;font-size:.85rem;font-weight:600;font-variant-numeric:tabular-nums;border:2px solid #cbd5e1;background:transparent;color:#64748b;line-height:1.2;box-sizing:border-box}button.btn-outline-version{cursor:default}button.btn-outline-version.btn-outline-version--behind{cursor:pointer}.btn-outline-version--unknown{border-color:#94a3b8;color:#64748b}.btn-outline-version--current{border-color:#22c55e;color:#15803d}.btn-outline-version--behind{border-color:#ea580c;color:#c2410c}.btn-outline-version--ahead{border-color:#3b82f6;color:#1d4ed8}.btn-outline-version--loxapp-pending{border-color:#ea580c;color:#c2410c}button.btn-outline-version--loxapp-pending{cursor:pointer}.btn-outline-version--loxapp-readonly{cursor:default}.btn-outline-version--credentials-invalid{border-color:#dc2626;color:#b91c1c}button.btn-outline-version--credentials-invalid{cursor:pointer}.backup-progress-block{margin:.85rem 0 0}.backup-progress-meta{font-size:.82rem;font-weight:600;color:#334155;margin-bottom:.45rem;display:flex;flex-wrap:wrap;gap:.25rem;align-items:baseline}.backup-progress-folder{font-weight:500;color:#64748b}.backup-progress-outer{height:12px;border-radius:8px;background:#e2e8f0;overflow:hidden;box-shadow:inset 0 1px 2px #0f172a0f}.backup-progress-inner{height:100%;border-radius:8px;min-width:0;background:repeating-linear-gradient(110deg,#0ea5e9,#0ea5e9 8px,#38bdf8 8px,#38bdf8 16px);background-size:24px 100%;animation:backup-progress-stripes .65s linear infinite;transition:width .2s ease-out}@keyframes backup-progress-stripes{0%{background-position:0 0}to{background-position:24px 0}}.backup-progress-detail{font-size:.8rem;margin-top:.45rem;line-height:1.45}.backup-dismiss-hint{margin:.75rem 0 0;padding:.65rem .75rem;border-radius:8px;background:#e0f2fe;border:1px solid #7dd3fc;color:#0c4a6e;font-size:.88rem;line-height:1.45}.backup-folder-stats{margin:.75rem 0 0;padding:.55rem .65rem;border-radius:8px;background:#f8fafc;border:1px solid #e2e8f0;font-size:.82rem}.backup-folder-stats-title{font-weight:600;margin-bottom:.4rem}.backup-folder-stats-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem .65rem}.backup-folder-stats-cell{display:flex;justify-content:space-between;gap:.35rem}.backup-folder-stats-name{font-weight:600;color:#475569}.backup-folder-stats-values{display:flex;flex-direction:column;align-items:flex-end;gap:.1rem;font-size:.78rem;line-height:1.25;text-align:right}@media(max-width:520px){.backup-folder-stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.dash-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1rem}.dash-tile{border-radius:10px;padding:1.1rem 1.15rem;color:#fff;min-height:96px;display:flex;flex-direction:column;justify-content:space-between;box-shadow:0 4px 14px #0f172a1f}.dash-tile-label{font-size:.82rem;font-weight:600;opacity:.92}.dash-tile-value{display:block;font-size:2rem;font-weight:800;line-height:1.1;letter-spacing:-.02em}.dash-tile-total{background:linear-gradient(135deg,#0284c7,#0ea5e9)}.dash-tile-online{background:linear-gradient(135deg,#15803d,#22c55e)}.dash-tile-offline{background:linear-gradient(135deg,#b91c1c,#ef4444)}.dash-tile-unknown{background:linear-gradient(135deg,#475569,#64748b)}.dash-tile-contract{background:linear-gradient(135deg,#c2410c,#f97316)}@media(max-width:900px){.lfm-app{flex-direction:column}.sidebar{width:100%;position:relative;max-height:none;min-height:unset}.sidebar-spacer{display:none}}.layout-boot{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1rem}.auth-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1rem;background:#f1f5f9}.mfa-enroll-block{border:1px solid #e2e8f0;border-radius:8px;padding:.75rem;background:#f8fafc}.mfa-qr-svg{max-width:220px;margin:0 auto .5rem}.mfa-qr-svg svg{width:100%;height:auto;display:block}.mfa-copy-block{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.75rem}.mfa-copy-field{width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.78rem;line-height:1.35;resize:vertical;min-height:3rem}.modal-root{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:1rem}.modal-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;border:none;cursor:pointer;background:#0f172a73}.modal-backdrop-static{cursor:default;pointer-events:auto}.modal-panel{position:relative;z-index:1;width:100%;max-width:520px;max-height:min(90vh,720px);overflow:auto;margin:0}.modal-head{display:flex;justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.75rem}.modal-close{flex-shrink:0;min-width:2.25rem;padding:.25rem .5rem;font-size:1.25rem;line-height:1}.modal-body{padding-top:.25rem}.modal-panel--config-check{max-width:480px}.modal-panel--loxone-info{max-width:min(96vw,920px);width:100%;max-height:90vh;display:flex;flex-direction:column}.modal-panel--loxone-info .modal-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.loxone-info-layout{display:flex;flex-direction:column;gap:.75rem;flex:1;min-height:0}.loxone-info-requestrow{flex:0 0 auto;display:flex;gap:.5rem;align-items:stretch}.loxone-info-requestrow input{width:100%}.loxone-info-response-wrap{flex:1 1 66%;min-height:220px;display:flex;flex-direction:column}.loxone-info-response{flex:1;min-height:0;margin:0;padding:.75rem .85rem;background:#0f172a;color:#e2e8f0;border-radius:8px;overflow:auto;font-size:.8rem;line-height:1.45;white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;border:1px solid #334155}.check-log-table-wrap{max-height:min(60vh,480px);overflow:auto;border:1px solid #e2e8f0;border-radius:8px}.check-log-table{width:100%;font-size:.85rem}.check-log-table th{position:sticky;top:0;background:#f8fafc;z-index:1}.admin-menu-root{display:inline-flex;vertical-align:middle}.admin-menu-summary{display:inline-flex;align-items:center;gap:.35rem;-webkit-user-select:none;user-select:none}.admin-menu-summary:after{content:"▾";font-size:.65rem;opacity:.75}.admin-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background:transparent}.admin-menu-panel{padding:.35rem;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 8px 24px #0f172a1f}.admin-menu-panel--floating{position:fixed;z-index:1050}.admin-menu-item{display:block;width:100%;text-align:left;padding:.45rem .65rem;margin:0;border:none;border-radius:6px;background:transparent;color:#0f172a;font:inherit;font-size:.88rem;font-weight:500;cursor:pointer}.admin-menu-item:hover{background:#f1f5f9}.polling-intervals-page{display:flex;flex-direction:column;gap:1rem;min-height:calc(100vh - 9rem)}.polling-intervals-top{flex:0 0 auto}.polling-tabs{display:flex;gap:.35rem;margin:1rem 0 .75rem;border-bottom:1px solid #e2e8f0}.polling-tab{padding:.5rem .85rem;border:none;border-radius:8px 8px 0 0;background:#f1f5f9;color:#475569;font:inherit;font-weight:600;cursor:pointer}.polling-tab.is-active{background:#fff;color:#0f172a;box-shadow:0 -1px #fff;margin-bottom:-1px;border:1px solid #e2e8f0;border-bottom-color:#fff}.polling-tab-panel{padding-top:.5rem}.polling-subhead{margin:0 0 .35rem;font-size:1rem;font-weight:700;color:#0f172a}.polling-field{display:flex;flex-direction:column;gap:.25rem;font-size:.88rem;font-weight:600;color:#334155}.polling-field select{min-width:12rem}.polling-dl{display:grid;gap:.75rem;margin:1rem 0 0}.polling-dl>div{margin:0}.polling-dl dt{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:#64748b;margin:0 0 .2rem}.polling-dl dd{margin:0;font-size:.95rem}.polling-log-card{flex:1 1 50%;display:flex;flex-direction:column;min-height:14rem}.polling-log-pre{flex:1;margin:0;padding:.75rem;background:#0f172a;color:#e2e8f0;border-radius:8px;font-size:.78rem;line-height:1.45;overflow:auto;white-space:pre-wrap;word-break:break-word}
