*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.absolute{position:absolute}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.border{border-width:1px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}*,:after,:before{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#f1f5f9;color:#1e293b;display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}@media (min-width:768px){body{flex-direction:row}}.sidebar-backdrop{position:fixed;inset:0;z-index:30;background:rgba(15,23,42,.5);opacity:0;pointer-events:none;transition:opacity .2s ease}body.sidebar-open .sidebar-backdrop{opacity:1;pointer-events:auto}@media (min-width:768px){.sidebar-backdrop{display:none}}#sidebar{width:min(280px,88vw);min-height:100vh;min-height:100dvh;background:#0f172a;color:#94a3b8;display:flex;flex-direction:column;flex-shrink:0;position:fixed;left:0;top:0;z-index:40;height:100vh;height:100dvh;transform:translateX(-100%);transition:transform .2s ease;overflow-y:auto;-webkit-overflow-scrolling:touch}@media (min-width:768px){#sidebar{position:sticky;top:0;width:230px;transform:none}}body.sidebar-open #sidebar{transform:translateX(0)}@media (min-width:768px){body.sidebar-open #sidebar{transform:none}}#sidebar .logo{padding:1.5rem 1.25rem .25rem;display:flex;align-items:center;gap:.625rem}#sidebar .logo svg{width:28px;height:28px;color:#3b82f6}#sidebar .logo span{color:#f8fafc;font-size:1rem;font-weight:700;letter-spacing:-.01em}#sidebar .sub{font-size:.7rem;color:#334155;padding:0 1.25rem .875rem;border-bottom:1px solid #1e293b}#sidebar nav{flex:1;padding:.5rem 0}#sidebar nav a{display:flex;align-items:center;gap:.625rem;padding:.625rem 1.25rem;color:#64748b;text-decoration:none;font-size:.875rem;cursor:pointer;border-left:3px solid transparent;transition:all .15s}#sidebar nav a:hover{color:#cbd5e1;background:#1e293b}#sidebar nav a.active{color:#f8fafc;background:#1e293b;border-left-color:#3b82f6}#sidebar nav a svg{width:17px;height:17px;flex-shrink:0}.nav-section{font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:#475569;padding:.75rem 1.25rem .375rem;margin-top:.5rem;border-top:1px solid #1e293b}#sidebar footer{padding:1rem 1.25rem;font-size:.7rem;color:#334155;border-top:1px solid #1e293b}.nav-badge{margin-left:auto;background:#ef4444;color:#fff;border-radius:9999px;padding:.1rem .45rem;font-size:.65rem;font-weight:700}.nav-badge.green{background:#22c55e}#main{flex:1;display:flex;flex-direction:column;min-width:0;width:100%}#topbar{background:#fff;border-bottom:1px solid #e2e8f0;padding:.875rem 1.5rem;justify-content:space-between;gap:.75rem;position:sticky;top:0;z-index:10;flex-wrap:wrap}#topbar,.topbar-left{display:flex;align-items:center}.topbar-left{gap:.5rem;min-width:0;flex:1}#topbar h2{font-size:1.0625rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topbar-right{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;justify-content:flex-end}.live-dot{width:8px;height:8px;border-radius:50%;background:#22c55e;animation:pulse 2s infinite;flex-shrink:0}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}#content{padding:1.5rem;min-width:0}@media (max-width:639px){#content{padding:1rem .75rem}}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(160px,100%),1fr));gap:1rem;margin-bottom:1.5rem}.card{background:#fff;border-radius:.75rem;padding:1.25rem 1.5rem;border:1px solid #e2e8f0;box-shadow:0 1px 2px rgba(0,0,0,.04)}.card-label{font-size:.72rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.06em;margin-bottom:.5rem}.card-value{font-size:clamp(1.5rem,5vw,2.25rem);font-weight:700;line-height:1}.c-blue{color:#3b82f6}.c-green{color:#22c55e}.c-amber{color:#f59e0b}.c-slate{color:#475569}.c-violet{color:#7c3aed}.panel{background:#fff;border-radius:.75rem;border:1px solid #e2e8f0;box-shadow:0 1px 2px rgba(0,0,0,.04);overflow:hidden;margin-bottom:1.25rem;max-width:100%}.panel-header{padding:.875rem 1.25rem;border-bottom:1px solid #f1f5f9;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem}.panel-header h3{font-size:.9375rem;font-weight:600;color:#1e293b}.rf-pager{padding:.65rem 1.25rem;border-bottom:1px solid #f1f5f9;background:#fafafa;font-size:.8125rem;color:#475569}.rf-pager-row{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:.75rem;margin-bottom:.45rem}.rf-pager-help{flex:1;min-width:min(100%,220px);line-height:1.45;margin:0}.rf-pager-help strong{color:#1e293b;font-weight:600}.rf-pager-help em{font-style:normal;font-weight:600;color:#3b82f6}.rf-pager-actions{display:flex;flex-wrap:wrap;gap:.5rem;flex-shrink:0}.rf-pager-meta{margin:0;font-size:.78rem;color:#64748b;font-variant-numeric:tabular-nums;line-height:1.4}.rf-pager-meta strong{color:#334155;font-weight:600}.rf-pager-meta em{font-style:normal;color:#3b82f6}.tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%;overscroll-behavior-x:contain;scrollbar-gutter:stable}.tbl-wrap::-webkit-scrollbar{height:10px}.tbl-wrap::-webkit-scrollbar-track{background:#f1f5f9;border-radius:5px}.tbl-wrap::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:5px}.tbl-wrap::-webkit-scrollbar-thumb:hover{background:#94a3b8}@media (max-width:639px){.panel .tbl-wrap{margin-left:-.75rem;margin-right:-.75rem;width:calc(100% + 1.5rem)}}table{width:100%;min-width:-moz-max-content;min-width:max-content;border-collapse:separate;border-spacing:0}th{text-align:left;padding:.5rem 1rem;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#94a3b8;background:#f8fafc;border-bottom:1px solid #e2e8f0;white-space:nowrap}td{padding:.75rem 1rem;font-size:.875rem;border-bottom:1px solid #f8fafc;vertical-align:middle}tr:last-child td{border-bottom:none}tbody tr:hover td{background:#fafafa;cursor:pointer}.lte-details-table code,.lte-details-table td,.lte-details-table th{white-space:nowrap}@media (max-width:639px){th{padding:.4rem .5rem;font-size:.65rem}td{padding:.55rem .5rem;font-size:.8125rem}}@media (max-width:767px){.tbl-wrap tbody td:first-child,.tbl-wrap thead th:first-child{position:sticky;left:0;box-shadow:6px 0 12px -8px rgba(15,23,42,.35)}.tbl-wrap thead th:first-child{z-index:3;background:#f8fafc}.tbl-wrap tbody td:first-child{z-index:2;background:#fff}.tbl-wrap tbody tr:hover td:first-child{background:#fafafa}}.dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:.4rem;flex-shrink:0}.dot.on{background:#22c55e;box-shadow:0 0 0 2px #dcfce7}.dot.off{background:#cbd5e1}.status-pill{display:inline-flex;align-items:center;padding:.2rem .6rem;border-radius:9999px;font-size:.75rem;font-weight:600;white-space:nowrap}.status-pill-lg{font-size:.9375rem;padding:.35rem .875rem}.sp-on{background:#f0fdf4;color:#16a34a}.sp-off{background:#f8fafc;color:#94a3b8}.tag{display:inline-block;padding:.2rem .55rem;border-radius:.375rem;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.tag-latest{background:#dbeafe;color:#1d4ed8}.tag-ok{background:#dcfce7;color:#166534}.tag-fail{background:#fee2e2;color:#991b1b}.tag-admin{background:#ede9fe;color:#5b21b6}.tag-viewer{background:#f1f5f9;color:#475569}.btn{display:inline-flex;align-items:center;gap:.35rem;padding:.4375rem .875rem;border-radius:.5rem;border:none;cursor:pointer;font-size:.8125rem;font-weight:500;transition:all .15s;text-decoration:none;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:#3b82f6;color:#fff}.btn-primary:hover:not(:disabled){background:#2563eb}.btn-success{background:#16a34a;color:#fff}.btn-success:hover:not(:disabled){background:#15803d}.btn-danger{background:#fee2e2;color:#dc2626;border:1px solid #fecaca}.btn-danger:hover:not(:disabled){background:#fecaca}.btn-ghost{background:transparent;color:#64748b;border:1px solid #e2e8f0}.btn-ghost:hover:not(:disabled){background:#f8fafc}.btn-sm{padding:.3125rem .625rem;font-size:.75rem;border-radius:.375rem}.form-row{display:flex;gap:.875rem;flex-wrap:wrap;align-items:flex-end}.fg{display:flex;flex-direction:column;gap:.375rem;flex:1;min-width:min(150px,100%)}label{font-size:.8125rem;font-weight:500;color:#374151}input,select{padding:.5rem .75rem;border:1px solid #e2e8f0;border-radius:.5rem;font-size:.875rem;outline:none;transition:border-color .15s;background:#fff;color:#1e293b;width:100%;max-width:100%}input:focus,select:focus{border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,.1)}input[type=file]{padding:.375rem .5rem}.form-pad{padding:1.25rem}.overlay{position:fixed;inset:0;background:rgba(15,23,42,.5);display:flex;align-items:center;justify-content:center;z-index:100;opacity:0;pointer-events:none;transition:opacity .2s;padding:1rem}.overlay.open{opacity:1;pointer-events:all}.modal{background:#fff;border-radius:.75rem;padding:1.5rem;width:100%;max-width:440px;max-height:min(90vh,100dvh);overflow-y:auto;box-shadow:0 25px 50px rgba(0,0,0,.2);transform:translateY(8px);transition:transform .2s}.overlay.open .modal{transform:translateY(0)}.modal h3{font-size:1rem;font-weight:600;margin-bottom:1rem}.modal-footer{display:flex;gap:.625rem;justify-content:flex-end;margin-top:1.25rem;padding-top:1rem;border-top:1px solid #f1f5f9;flex-wrap:wrap}#auth-page{position:fixed;inset:0;z-index:50;overflow-y:auto;-webkit-overflow-scrolling:touch}.auth-page-inner{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:linear-gradient(135deg,#0f172a,#1e293b 50%,#0f172a);padding:2rem;gap:1.25rem}.auth-callout{width:100%;max-width:440px;padding:1.125rem 1.25rem;border-radius:.75rem;background:rgba(30,41,59,.85);border:1px solid #f59e0b;color:#e2e8f0;font-size:.8125rem;line-height:1.45;box-shadow:0 12px 32px rgba(0,0,0,.25)}.auth-callout strong{display:block;color:#fde68a;font-size:.875rem;margin-bottom:.5rem}.auth-callout p{margin:.5rem 0 0;color:#cbd5e1}.auth-callout p em{color:#fbbf24;font-style:normal;font-weight:600}.auth-cli{margin:.75rem 0 0;padding:.65rem .75rem;background:#0f273a;border-radius:.5rem;overflow-x:auto;font-size:.72rem;line-height:1.4;color:#e2e8f0;border:1px solid #334155}.auth-cli code{background:transparent;padding:0;font-size:inherit;color:inherit}.auth-cli-hint{font-size:.72rem!important;color:#94a3b8!important}.auth-cli-hint code{font-size:.68rem;word-break:break-all}.auth-card{background:#fff;border-radius:1rem;padding:2.5rem;width:100%;max-width:400px;box-shadow:0 25px 50px rgba(0,0,0,.3)}.auth-logo{display:flex;align-items:center;gap:.75rem;justify-content:center;margin-bottom:.5rem}.auth-logo svg{width:32px;height:32px;color:#3b82f6}.auth-logo span{font-size:1.25rem;font-weight:700;color:#0f172a;letter-spacing:-.02em}.auth-sub{text-align:center;font-size:.8125rem;color:#94a3b8;margin-bottom:1.75rem}.auth-tabs{display:flex;border-bottom:1px solid #e2e8f0;margin-bottom:1.5rem}.auth-tab{flex:1;padding:.625rem;text-align:center;font-size:.8125rem;font-weight:500;cursor:pointer;color:#94a3b8;border-bottom:2px solid transparent;transition:all .15s}.auth-tab.active{color:#3b82f6;border-bottom-color:#3b82f6}.auth-tab:hover:not(.active){color:#64748b}.auth-submit{width:100%;justify-content:center;padding:.625rem;font-size:.875rem;margin-top:1.25rem}.auth-footer{margin-top:1.5rem;font-size:.75rem}.auth-footer,.auth-page-inner label{color:#475569}.auth-page-inner input{border-color:#cbd5e1}.auth-page-inner input:focus{border-color:#3b82f6}.toast{position:fixed;bottom:1.5rem;right:1.5rem;left:1.5rem;padding:.75rem 1.125rem;border-radius:.625rem;font-size:.875rem;z-index:200;opacity:0;transform:translateY(6px);transition:all .25s;max-width:340px;margin-left:auto;margin-right:auto;pointer-events:none}@media (min-width:480px){.toast{left:auto;margin-left:0;margin-right:0}}.toast.show{opacity:1;transform:translateY(0);pointer-events:all}.toast-ok{background:#166534;color:#fff;border-left:4px solid #22c55e}.toast-err{background:#991b1b;color:#fff;border-left:4px solid #ef4444}.toast-info{background:#1e40af;color:#fff;border-left:4px solid #60a5fa}.chart-wrap{padding:1rem 1.25rem;min-width:0}canvas{display:block;width:100%;max-width:100%;border-radius:.5rem;background:#f8fafc}.back{display:inline-flex;align-items:center;gap:.375rem;color:#64748b;font-size:.875rem;cursor:pointer;margin-bottom:1rem;padding:.25rem 0;background:none;border:none}.back:hover{color:#1e293b}.dev-tabs{display:flex;gap:0;border-bottom:2px solid #e2e8f0;margin-bottom:1.25rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.dev-tab{padding:.625rem 1rem;font-size:.8125rem;font-weight:500;color:#64748b;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;white-space:nowrap;transition:all .15s}.dev-tab:hover{color:#1e293b}.dev-tab.active{color:#3b82f6;border-bottom-color:#3b82f6;font-weight:600}.kv-row{display:flex;gap:.5rem;align-items:center;padding:.375rem 0;flex-wrap:wrap}.kv-row input{flex:1;min-width:0;padding:.375rem .5rem;font-size:.8125rem}.kv-row button{flex-shrink:0}textarea.cfg{width:100%;min-height:120px;font-size:.8rem;padding:.75rem;border:1px solid #e2e8f0;border-radius:.5rem;resize:vertical;max-width:100%}.log-line,textarea.cfg{font-family:SF Mono,Fira Code,monospace}.log-line{font-size:.75rem;padding:.25rem .75rem;border-bottom:1px solid #f8fafc;word-break:break-word}.log-line .lvl{display:inline-block;width:52px;font-weight:700;text-transform:uppercase}.lvl-error{color:#dc2626}.lvl-warning{color:#f59e0b}.lvl-info{color:#3b82f6}.lvl-debug{color:#94a3b8}.empty{text-align:center;padding:3rem 1rem;color:#cbd5e1;font-size:.875rem}code{font-family:SF Mono,Fira Code,monospace;font-size:.8em;background:#f1f5f9;padding:.1em .35em;border-radius:.25rem;word-break:break-word}.presence-panel{margin-bottom:1.25rem}.presence-body{padding:0 1.25rem 1rem}.presence-hint{font-size:.78rem;color:#64748b;line-height:1.45;margin:0 0 .75rem;max-width:42rem}.presence-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:.25rem}.presence-cols{display:flex;flex-direction:row;gap:3px;width:-moz-max-content;width:max-content;min-height:83px}.presence-week{display:grid;grid-template-rows:repeat(7,11px);gap:3px;flex-shrink:0}.presence-cell{width:11px;height:11px;border-radius:2px;flex-shrink:0;box-sizing:border-box}.presence-cell.l0{background:#ebedf0}.presence-cell.l1{background:#9be9a8}.presence-cell.l2{background:#40c463}.presence-cell.l3{background:#30a14e}.presence-cell.l4{background:#216e39}.presence-cell.presence-pad{opacity:.35}.presence-legend{display:flex;align-items:center;flex-wrap:wrap;gap:.35rem;margin-top:.75rem;font-size:.72rem;color:#64748b}.presence-legend .presence-cell{display:inline-block;vertical-align:middle}.presence-day-detail{margin-top:1rem;padding-top:1rem;border-top:1px solid #f1f5f9}.presence-day-detail[hidden]{display:none!important}.presence-day-loading{padding:.75rem 0;font-size:.8125rem;color:#64748b}.presence-day-inner{padding-top:.25rem}.presence-day-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.75rem}.presence-day-title{font-size:.875rem;font-weight:600;color:#1e293b}.presence-day-sub{font-size:.75rem;color:#64748b;margin:.35rem 0 0;max-width:42rem;line-height:1.45}.presence-slot-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:.25rem}.presence-slot-row{display:flex;flex-direction:row;gap:3px;margin-bottom:3px;align-items:center}.presence-slot-h{width:1.75rem;flex-shrink:0;font-size:.65rem;color:#94a3b8;font-variant-numeric:tabular-nums;text-align:right;line-height:1}.presence-slot-cells{display:flex;flex-direction:row;gap:3px;flex-shrink:0}.presence-day-hit{cursor:pointer}.presence-day-hit:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.presence-legend--tight{margin-top:.5rem!important}@media (min-width:768px){.md\:hidden{display:none}}