:root{--bg:#f4f6f9;--panel:#fff;--panel2:#f8fafc;--border:#d9e1ea;--border-strong:#b6c3d1;--text:#1e293b;--muted:#64748b;--accent:#1d4ed8;--accent-hover:#172fb4;--ok:#059669;--ok-bg:#ecfdf5;--warn:#b45309;--warn-bg:#fffbeb;--err:#b91c1c;--err-bg:#fef2f2;--shadow:0 1px 3px #00000014, 0 4px 14px #0000000a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:Inter,Segoe UI,system-ui,-apple-system,sans-serif}*{box-sizing:border-box;margin:0}body{background:var(--bg);color:var(--text);margin:0;font-size:14px;line-height:1.5}#root{min-height:100vh}h1{color:#0f172a;letter-spacing:-.025em;margin-bottom:.5rem;font-size:1.5rem;font-weight:700}h2{color:#0f172a;margin-bottom:.75rem;font-size:1.2rem;font-weight:600}h3{color:#334155;margin:1rem 0 .5rem;font-size:1rem;font-weight:600}p{margin-bottom:.75rem}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.center{justify-content:center;align-items:center;min-height:100vh;display:flex}.layout{min-height:100vh;display:flex}.sidebar{color:#94a3b8;background:#0f172a;flex-shrink:0;width:220px;padding:1.25rem .75rem}.sidebar .brand{color:#fff;letter-spacing:-.02em;margin-bottom:1.5rem;font-size:1rem;font-weight:700}.sidebar a{color:#94a3b8;border-radius:6px;margin-bottom:2px;padding:.55rem .75rem;font-weight:500;transition:background .15s,color .15s;display:block}.sidebar a:hover{color:#e2e8f0;background:#ffffff0f;text-decoration:none}.sidebar a.active{background:var(--accent);color:#fff}.main{flex:1;max-width:1200px;padding:1.75rem 2.25rem}.topbar{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;margin-bottom:1.5rem;padding-bottom:1rem;display:flex}.topbar .who{color:var(--muted);font-size:.85rem}.card{background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:10px;margin-bottom:1rem;padding:1.25rem 1.5rem}.card h2{margin-bottom:1rem}table{border-collapse:collapse;background:var(--panel);width:100%;box-shadow:var(--shadow);border-radius:10px;overflow:hidden}th,td{text-align:left;border-bottom:1px solid var(--border);padding:.7rem 1rem}th{background:var(--panel2);color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:.75rem;font-weight:600}tr:last-child td{border-bottom:none}tbody tr:hover{background:var(--panel2)}button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:.55rem 1.1rem;font-size:.875rem;font-weight:600;transition:background .15s}button:hover:not(:disabled){background:var(--accent-hover)}button:disabled{cursor:not-allowed;background:#94a3b8}button.secondary{color:var(--accent);border:1px solid var(--border-strong);background:#fff}button.secondary:hover:not(:disabled){background:var(--panel2)}button.danger{background:var(--err)}button.danger:hover:not(:disabled){background:#991b1b}label{color:#334155;margin-top:.75rem;font-size:.85rem;font-weight:500;display:block}input,select{border:1px solid var(--border-strong);background:#fff;border-radius:6px;width:100%;max-width:420px;margin-top:.25rem;padding:.55rem .75rem;font-size:.875rem}input:focus,select:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:#0000}fieldset{border:1px solid var(--border);background:var(--panel2);border-radius:8px;margin:.75rem 0;padding:.75rem 1rem}legend{color:#334155;padding:0 .25rem;font-weight:600}.check-row{align-items:center;gap:.5rem;margin:.5rem 0;display:flex}.check-row input{width:auto;max-width:none;margin:0}.badge{text-transform:capitalize;border-radius:9999px;padding:.15rem .65rem;font-size:.75rem;font-weight:600;display:inline-block}.badge.healthy,.badge.ok{background:var(--ok-bg);color:var(--ok)}.badge.warning,.badge.unknown{background:var(--warn-bg);color:var(--warn)}.badge.error,.badge.failed{background:var(--err-bg);color:var(--err)}.badge.success{background:var(--ok-bg);color:var(--ok)}.badge.informational{color:var(--accent);background:#eff6ff}.login-card{background:var(--panel);border:1px solid var(--border);max-width:380px;box-shadow:var(--shadow);border-radius:12px;padding:2rem}.login-card input{max-width:none}.login-card .btn,.login-card button{width:100%;margin-top:1rem}.wizard-step{background:var(--panel);border:1px solid var(--border);max-width:680px;box-shadow:var(--shadow);border-radius:12px;padding:1.75rem}.steps{color:var(--muted);gap:1rem;margin:1rem 0 1.25rem;font-size:.85rem;display:flex}.steps .on{color:var(--accent);font-weight:600}.mode-card{border:2px solid var(--border);cursor:pointer;background:#fff;border-radius:8px;margin:.5rem 0;padding:1rem 1.25rem;transition:border-color .15s,background .15s}.mode-card:hover{border-color:var(--accent);background:#f0f6ff}.mode-card strong{color:#0f172a;margin-bottom:.25rem;display:block}.mode-card p{color:var(--muted);margin:0;font-size:.85rem}.fwd-config{background:var(--panel2);border:1px solid var(--border);border-radius:8px;margin:.5rem 0 .5rem 1.25rem;padding:.75rem 1rem}.error{background:var(--err-bg);color:var(--err);border:1px solid #fecaca;border-radius:8px;margin:.75rem 0;padding:.75rem 1rem;font-size:.875rem}.info{color:#1e40af;background:#eff6ff;border-radius:8px;margin:.75rem 0;padding:.75rem 1rem;font-size:.875rem}pre{color:#e2e8f0;background:#1e293b;border-radius:8px;padding:1rem;font-size:.8rem;line-height:1.4;overflow-x:auto}.muted{color:var(--muted);font-size:.875rem}.modal-backdrop{z-index:100;background:#0f172a8c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--panel);width:560px;max-width:92vw;max-height:86vh;box-shadow:var(--shadow);border-radius:10px;padding:1.25rem 1.5rem;overflow:auto}.modal.wide{width:760px}.modal-head{justify-content:space-between;align-items:center;margin-bottom:.75rem;display:flex}.modal-actions{gap:.5rem;margin-top:.75rem;display:flex}textarea.code{border:1px solid var(--border-strong);resize:vertical;background:var(--panel2);border-radius:6px;width:100%;max-width:none;padding:.6rem;font-family:JetBrains Mono,Menlo,Consolas,monospace;font-size:.8rem}.code.small{font-size:.75rem}.btn-ghost{color:var(--accent);border:1px solid var(--border-strong);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--panel2)}.policies-layout{grid-template-columns:260px 1fr;align-items:start;gap:1rem;display:grid}.policy-list{margin:.75rem 0 0;padding:0;list-style:none}.policy-list button{text-align:left;width:100%;color:var(--text);background:0 0;border:none;border-radius:6px;padding:.5rem .6rem;font-weight:500;display:block}.policy-list button:hover{background:var(--panel2)}.policy-list li.active button{background:var(--accent);color:#fff}.test-result{border-radius:8px;margin-top:.75rem;padding:.75rem}.test-result.ok{background:var(--ok-bg);border:1px solid #a7f3d0}.test-result.fail{background:var(--err-bg);border:1px solid #fecaca}tr.clickable{cursor:pointer}tr.clickable:hover{background:var(--panel2)}tr.warn-row td{background:var(--warn-bg)}.alert{background:var(--warn-bg);color:var(--warn);border:1px solid #fcd34d;border-radius:8px;margin-bottom:1rem;padding:.75rem 1rem}.success{background:var(--ok-bg);color:var(--ok);border:1px solid #a7f3d0;border-radius:8px;margin:.75rem 0;padding:.6rem .9rem}.issue-list{margin:0 0 1rem}.issue{border-radius:8px;align-items:flex-start;gap:.6rem;margin-bottom:.5rem;padding:.6rem .75rem;display:flex}.issue.warn{background:var(--warn-bg);border:1px solid #fcd34d}.issue.fail{background:var(--err-bg);border:1px solid #fecaca}.issue .badge{flex-shrink:0;margin-top:2px}.badge.warn{background:var(--warn-bg);color:var(--warn)}.badge.fail{background:var(--err-bg);color:var(--err)}.badge.ok{background:var(--ok-bg);color:var(--ok)}.small-table th,.small-table td{padding:.45rem .7rem;font-size:.82rem}.res-grid{grid-template-columns:repeat(3,1fr);gap:.75rem;display:grid}.res-card{background:var(--panel2);border:1px solid var(--border);border-radius:8px;padding:.7rem .9rem}.res-card .num{margin-top:.25rem;font-size:1.1rem;font-weight:700}.app{min-height:100vh;display:flex}.content{flex:1;min-width:0;max-width:1400px;padding:1.75rem 2.25rem}.sidebar{flex-direction:column;display:flex}.sidebar nav{flex:1}.sidebar-footer{color:#cbd5e1;border-top:1px solid #ffffff14;margin-top:auto;padding-top:1rem;font-size:.85rem}.sidebar-footer .muted{color:#64748b;font-size:.78rem}.sidebar-footer button{width:100%;margin-top:.75rem}.btn{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:.55rem 1.1rem;font-size:.875rem;font-weight:600;line-height:1.4;text-decoration:none;transition:background .15s;display:inline-block}.btn:hover:not(:disabled){background:var(--accent-hover);color:#fff;text-decoration:none}.btn.primary{background:var(--accent);color:#fff}.btn.small{padding:.3rem .7rem;font-size:.78rem}.cards{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin-bottom:1.25rem;display:grid}.card.stat .num{color:#0f172a;font-size:1.75rem;font-weight:700;line-height:1.2}.card.stat .label{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-top:.15rem;font-size:.75rem;font-weight:600}.num.small{font-size:1.05rem;font-weight:700}.muted.small{font-size:.78rem}.toolbar{flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem;display:flex}.toolbar input,.toolbar select{margin-top:0}.label{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-size:.75rem;font-weight:600}.tag{background:var(--panel2);border:1px solid var(--border);color:var(--muted);border-radius:9999px;margin-right:.25rem;padding:.1rem .5rem;font-size:.72rem;font-weight:600;display:inline-block}.tag.managed{color:var(--accent);background:#eff6ff;border-color:#bfdbfe}.dropdown-wrap{display:inline-block}.dropdown-wrap select{margin-top:0}.login-wrap{justify-content:center;align-items:center;min-height:100vh;padding:1rem;display:flex}.brand.big{color:#0f172a;margin-bottom:1.25rem;font-size:1.15rem}.login-card .brand.big{color:#0f172a}.card.list-pane{min-height:220px}.card.editor-pane{min-height:320px}.card.stat.ok{border-left:4px solid var(--ok)}.card.stat.warn{border-left:4px solid var(--warn)}.card.stat.fail{border-left:4px solid var(--err)}.attention-panel{background:var(--panel);border:1px solid #fcd34d;border-left:4px solid var(--warn);box-shadow:var(--shadow);border-radius:10px;margin-bottom:1.25rem;padding:1rem 1.25rem}.attention-panel h3{align-items:center;gap:.5rem;margin-top:0;display:flex}.attention-panel table{box-shadow:none;border:1px solid var(--border);border-radius:8px}.wave-card{background:var(--panel2);border:1px solid var(--border);border-radius:8px;margin:.6rem 0;padding:.75rem 1rem}.wave-card h4{margin:.25rem 0 .5rem}.wave-card table{box-shadow:none;background:#fff}code.cmd{background:var(--panel2);border:1px solid var(--border);word-break:break-all;border-radius:5px;padding:.15rem .4rem;font-family:JetBrains Mono,Menlo,Consolas,monospace;font-size:.78rem}.badge.accent{color:var(--accent);background:#eff6ff}.api-controls .group-block{margin-bottom:1.25rem}.card.stat.tone-ok{border-left:4px solid var(--ok)}.card.stat.tone-warn{border-left:4px solid var(--warn)}.card.stat.tone-fail{border-left:4px solid var(--err)}.map-card{background:linear-gradient(#fff 0%,#f8fafc 100%)}.map-wrap{border:1px solid var(--border-strong);background:#0b1220;border-radius:10px;position:relative;overflow:hidden}.map-wrap svg{width:100%;height:auto;display:block}.map-wrap path:hover{fill:#2a3c5c}.map-pin .pin-dot{fill:#34d399;stroke:#064e3b;stroke-width:1px;cursor:pointer;animation:2.2s ease-out infinite pinPulse}.map-pin .pin-pulse{fill:#34d3992e;stroke:none;pointer-events:none;animation:2.2s ease-out infinite pinRing}@keyframes pinPulse{0%,to{r:4}50%{r:5.5}}@keyframes pinRing{0%{opacity:.9;transform-box:fill-box;transform-origin:50%;transform:scale(.6)}to{opacity:0;transform-box:fill-box;transform-origin:50%;transform:scale(1.8)}}.map-tooltip{z-index:5;color:#e2e8f0;pointer-events:none;background:#0f172a;border:1px solid #334155;border-radius:8px;max-width:260px;padding:.6rem .8rem;font-size:.8rem;line-height:1.45;position:absolute;top:10px;left:10px;box-shadow:0 6px 20px #00000073}.map-tooltip strong{color:#fff;font-size:.85rem}.map-legend{align-items:center;gap:1.5rem;margin-top:.6rem;font-size:.75rem;display:flex}.legend-dot{background:#34d399;border-radius:50%;width:9px;height:9px;margin-right:.35rem;display:inline-block;box-shadow:0 0 6px #34d399b3}.map-empty{background:var(--warn-bg);border:1px solid #f3e8c8;border-radius:8px;margin-bottom:.9rem;padding:.8rem 1rem;font-size:.85rem}.map-empty p{margin:.35rem 0 0}.hours-chart{align-items:flex-end;gap:4px;height:110px;padding:.5rem .25rem 0;display:flex}.hour-col{flex-direction:column;flex:1;justify-content:flex-end;height:100%;display:flex}.hour-bar{background:var(--accent);border-radius:3px 3px 0 0;min-height:2px;transition:height .3s}.hour-bar[data-empty]{background:var(--border)}.hour-label{text-align:center;color:var(--muted);margin-top:.25rem;font-size:.6rem}.toast{z-index:200;max-width:420px;box-shadow:var(--shadow);border-radius:8px;padding:.75rem 1.1rem;font-size:.875rem;font-weight:500;position:fixed;top:1rem;right:1rem}.toast.ok{background:var(--ok-bg);color:var(--ok);border:1px solid #a7f3d0}.toast.fail{background:var(--err-bg);color:var(--err);border:1px solid #fecaca}.badge.muted{background:var(--panel2);color:var(--muted);border:1px solid var(--border)}.tpl-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.75rem;display:grid}.tpl-card{text-align:left;background:var(--panel2);border:1px solid var(--border);cursor:pointer;color:inherit;font:inherit;border-radius:10px;flex-direction:column;align-items:flex-start;gap:.4rem;padding:.8rem .9rem;transition:border-color .15s,box-shadow .15s;display:flex}.tpl-card:hover{border-color:var(--accent);box-shadow:0 1px 6px #00000014}.tpl-head{justify-content:space-between;align-items:center;gap:.5rem;width:100%;display:flex}.form-row{flex-direction:column;gap:.25rem;margin:.6rem 0;display:flex}.form-row input[type=text],.form-row input[type=number],.form-row input[type=time],.form-row select,.form-row textarea{margin-top:0}.form-row .muted.small{font-size:.72rem}.modal.wide{max-width:640px;max-height:88vh;overflow-y:auto}.preview{white-space:pre-wrap;max-height:220px;overflow:auto}.day-row{flex-wrap:wrap;gap:.4rem;display:flex}.day-chip{border:1px solid var(--border);cursor:pointer;background:var(--panel2);border-radius:9999px;align-items:center;gap:.3rem;padding:.25rem .55rem;font-size:.8rem;display:inline-flex}.day-chip.on{border-color:var(--accent);color:var(--accent);background:#eff6ff;font-weight:600}.day-chip input{width:auto;max-width:none;margin:0}.kv-row{align-items:center;gap:.5rem;margin:.25rem 0;display:flex}.kv-row .tag{text-align:center;min-width:4.5rem}.kv-row input{flex:1;margin-top:0}.cond-table{border-collapse:collapse;width:100%}.cond-table th,.cond-table td{text-align:left;border-bottom:1px solid var(--border);padding:.55rem .7rem;font-size:.85rem}.cond-table th{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-size:.72rem}.btn.danger{color:var(--err);background:#fff;border:1px solid #fecaca}.btn.danger:hover:not(:disabled){background:var(--err-bg);color:var(--err)}.danger-text{color:var(--err)}.detail-table{border-collapse:collapse;width:100%;margin:.25rem 0}.detail-table td{border-bottom:1px solid var(--border,#e2e8f0);vertical-align:top;padding:.3rem .5rem;font-size:.85rem}.detail-table td:first-child{color:#64748b;white-space:nowrap;width:6rem}.entitlement-dialog.modal.wide{flex-direction:column;width:min(820px,96vw);max-width:96vw;max-height:min(92vh,1000px);padding:0;display:flex;overflow:hidden;box-shadow:0 24px 64px #0f172a38}.entitlement-header,.entitlement-footer{background:#fff;flex-shrink:0;justify-content:space-between;align-items:flex-start;gap:1rem;padding:1.3rem 1.7rem;display:flex}.entitlement-header{border-bottom:1px solid var(--border)}.entitlement-header h2{margin:.2rem 0;font-size:1.4rem}.entitlement-header p,.entitlement-section-head p{margin:0}.entitlement-body{min-height:0;padding:1.4rem 1.7rem;overflow-y:auto}.entitlement-eyebrow{color:var(--muted);letter-spacing:.08em;text-transform:uppercase;font-size:.7rem;font-weight:700}.entitlement-section+.entitlement-section{border-top:1px solid var(--border);margin-top:1.6rem;padding-top:1.6rem}.entitlement-section-head{margin-bottom:1rem}.entitlement-section-head h3{color:#0f172a;margin:.2rem 0 .25rem;font-size:1.05rem}.entitlement-section-head-split{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.entitlement-count{min-width:1.35rem;color:var(--accent);vertical-align:middle;background:#eff6ff;border-radius:999px;justify-content:center;align-items:center;padding:0 .35rem;font-size:.75rem;display:inline-flex}.entitlement-overview{grid-template-columns:1.4fr 1fr;gap:1rem;display:grid}.entitlement-field{flex-direction:column;gap:.35rem;min-width:0;display:flex}.entitlement-field label,.entitlement-field-label{color:#334155;margin:0;font-size:.82rem;font-weight:600;display:block}.entitlement-field input,.entitlement-field select,.entitlement-field textarea{border:1px solid var(--border-strong);width:100%;max-width:none;min-height:42px;font:inherit;color:var(--text);background:#fff;border-radius:7px;margin:0;padding:.6rem .75rem}.entitlement-field textarea{resize:vertical;min-height:130px;line-height:1.55}.entitlement-field input:focus-visible,.entitlement-field select:focus-visible,.entitlement-field textarea:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.entitlement-readonly{border:1px solid var(--border);background:var(--panel2);overflow-wrap:anywhere;border-radius:7px;align-items:center;min-height:42px;padding:.6rem .75rem;font-weight:600;display:flex}.entitlement-hint{color:var(--muted);font-size:.76rem;line-height:1.45}.entitlement-status,.entitlement-rules{background:0 0;border:0;min-width:0;margin:1.1rem 0 0;padding:0}.entitlement-status legend,.entitlement-rules legend{color:#334155;padding:0;font-size:.82rem;font-weight:600}.entitlement-status-options{flex-wrap:wrap;gap:.8rem 1.5rem;margin-top:.5rem;display:flex}.entitlement-inline-choice,.entitlement-monitor{cursor:pointer;align-items:center;gap:.6rem;margin:0;display:inline-flex}.entitlement-inline-choice input,.entitlement-rule-choice input,.entitlement-monitor input{width:16px;max-width:none;height:16px;accent-color:var(--accent);flex:none;margin:0}.entitlement-action-card{border:1px solid var(--border);background:#fff;border-radius:10px;margin:.85rem 0;padding:1.25rem;box-shadow:0 1px 3px #0f172a0d}.entitlement-action-head{justify-content:space-between;align-items:center;gap:1rem;display:flex}.entitlement-action-head h4{color:#0f172a;margin:.15rem 0 0;font-size:.96rem}.entitlement-rules{margin:1rem 0 1.15rem}.entitlement-rule-list{grid-template-columns:1fr 1fr;gap:.55rem;margin-top:.5rem;display:grid}.entitlement-rule-choice{border:1px solid var(--border);cursor:pointer;border-radius:8px;align-items:flex-start;gap:.65rem;margin:0;padding:.7rem .75rem;transition:border-color .15s,background .15s;display:flex}.entitlement-rule-choice:hover,.entitlement-rule-choice:focus-within{border-color:var(--accent)}.entitlement-rule-choice.selected{border-color:var(--accent);background:#eff6ff}.entitlement-rule-choice input{margin-top:.18rem}.entitlement-rule-copy{flex-direction:column;gap:.1rem;min-width:0;display:flex}.entitlement-rule-copy strong{color:#0f172a;font-size:.84rem}.entitlement-rule-copy>span{color:var(--muted);font-size:.76rem;font-weight:400;line-height:1.45}.entitlement-connection{grid-template-columns:1fr;gap:1rem;margin-bottom:1rem;display:grid}.entitlement-connection:empty{display:none}.entitlement-connection.with-ports{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}.entitlement-monitor{background:var(--panel2);border:1px solid var(--border);border-radius:8px;margin-top:1rem;padding:.75rem .85rem;display:flex}.entitlement-monitor>span{flex-direction:column;gap:.05rem;display:flex}.entitlement-monitor strong{color:#334155;font-size:.84rem}.entitlement-monitor>span>span{color:var(--muted);font-size:.76rem;font-weight:400}.entitlement-empty{border:1px dashed var(--border-strong);color:var(--muted);border-radius:8px;padding:1rem}.entitlement-footer{border-top:1px solid var(--border);background:var(--panel2);align-items:center}.entitlement-meta{flex-direction:column;gap:.25rem;min-width:0;display:flex}.entitlement-meta .tag{margin-bottom:.2rem}.entitlement-footer-actions{white-space:nowrap;align-items:center;gap:.6rem;display:flex}.entitlement-dialog .btn:focus-visible,.entitlement-dialog .entitlement-inline-choice input:focus-visible,.entitlement-dialog .entitlement-rule-choice input:focus-visible,.entitlement-dialog .entitlement-monitor input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (width<=640px){.entitlement-dialog.modal.wide{max-height:96vh}.entitlement-header,.entitlement-body,.entitlement-footer{padding:1rem}.entitlement-overview,.entitlement-rule-list,.entitlement-connection.with-ports{grid-template-columns:1fr}.entitlement-section-head-split,.entitlement-footer{flex-wrap:wrap}.entitlement-footer-actions{width:100%}.entitlement-footer-actions .btn{text-align:center;flex:1}}
