*,*:before,*:after{box-sizing:border-box}body{margin:0}#app{min-height:100vh}.app-root[data-v-64e81d33]{min-height:100vh;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;background:#e8ecf1;color:#111827}.login-shell[data-v-64e81d33]{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:max(1.25rem,env(safe-area-inset-bottom,0px));background:radial-gradient(ellipse 90% 70% at 50% -15%,rgba(165,180,252,.38),transparent 52%),radial-gradient(ellipse 55% 45% at 100% 0%,rgba(226,232,240,.6),transparent 45%),radial-gradient(ellipse 50% 42% at 0% 100%,rgba(224,231,255,.38),transparent 50%),linear-gradient(168deg,#f6f7fb 0%,#eef0f7 40%,#e9ecf3 100%)}.login-card[data-v-64e81d33]{width:100%;max-width:340px;padding:1.75rem 1.5rem 1.5rem;border-radius:18px;background:rgba(255,255,255,.78);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid rgba(255,255,255,.88);box-shadow:0 0 0 1px #94a3b80f,0 12px 40px #0f172a12,0 4px 12px #0f172a0a}.login-brand[data-v-64e81d33]{display:flex;gap:.75rem;align-items:center;margin-bottom:1.5rem}.login-brand-mark[data-v-64e81d33]{width:36px;height:36px;border-radius:10px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:.6875rem;font-weight:600;letter-spacing:.12em;color:#64748b;background:linear-gradient(165deg,#ffffff 0%,#f4f6fb 100%);border:1px solid rgba(226,232,240,.95);box-shadow:0 1px 3px #0f172a0d}.login-title[data-v-64e81d33]{margin:0;font-size:1.125rem;font-weight:500;letter-spacing:.06em;color:#475569}.login-tagline[data-v-64e81d33]{margin:.2rem 0 0;font-size:.6875rem;font-weight:400;letter-spacing:.14em;color:#94a3b8;text-transform:uppercase}.login-fields[data-v-64e81d33]{margin-bottom:.15rem}.login-field[data-v-64e81d33]{display:flex;flex-direction:column;gap:.3rem;margin-bottom:.75rem}.login-label[data-v-64e81d33]{font-size:.6875rem;font-weight:500;letter-spacing:.06em;color:#94a3b8;text-transform:uppercase}.login-field input[data-v-64e81d33]{padding:.48rem .7rem;border-radius:10px;border:1px solid #e8ecf0;background:rgba(255,255,255,.92);color:#334155;font-size:.875rem;font-weight:400;outline:none;transition:border-color .18s,box-shadow .18s,background .18s}.login-field input[data-v-64e81d33]::placeholder{color:#c4cbd5}.login-field input[data-v-64e81d33]:focus{border-color:#c7d2fe;background:#ffffff;box-shadow:0 0 0 3px #c7d2fe73}.login-captcha[data-v-64e81d33]{display:flex;align-items:center;gap:.6rem;margin-bottom:.75rem}.login-captcha .captcha-img-wrap[data-v-64e81d33]{flex:1;min-height:40px;border-radius:10px;overflow:hidden;border:1px solid #e8ecf0;background:#fafbfc}.login-captcha .captcha-img[data-v-64e81d33]{display:block;width:100%;height:40px;object-fit:cover;image-rendering:crisp-edges}.login-captcha .captcha-placeholder[data-v-64e81d33]{padding:.65rem;font-size:.8125rem;color:#94a3b8}.login-captcha-refresh[data-v-64e81d33]{padding:.35rem .6rem;font-size:.75rem;border-radius:9px;border-color:#e8ecf0;color:#64748b;background:rgba(255,255,255,.75)}.login-captcha-refresh[data-v-64e81d33]:hover:not(:disabled){color:#475569;border-color:#d4dae1}.brand-mark[data-v-64e81d33]{width:44px;height:44px;border-radius:10px;background:linear-gradient(145deg,#64748b 0%,#475569 100%);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.875rem;box-shadow:0 1px 3px #0f172a1f}.brand-mark.sm[data-v-64e81d33]{width:30px;height:30px;font-size:.7rem;border-radius:8px}.btn-primary[data-v-64e81d33]{width:100%;margin-top:.5rem;padding:.65rem 1rem;border:none;border-radius:8px;background:#2563eb;color:#fff;font-weight:600;font-size:.9375rem;cursor:pointer;transition:background .15s}.btn-primary[data-v-64e81d33]:hover:not(:disabled){background:#1d4ed8}.btn-primary[data-v-64e81d33]:active:not(:disabled){background:#1e40af}.btn-primary[data-v-64e81d33]:disabled{opacity:.55;cursor:not-allowed}.btn-primary.sm[data-v-64e81d33]{width:auto;margin-top:0;padding:.4rem .85rem;font-size:.8125rem}.login-submit[data-v-64e81d33]{margin-top:.35rem;padding:.5rem 1rem;border-radius:10px;font-weight:500;font-size:.8125rem;letter-spacing:.1em;background:linear-gradient(175deg,#a5b4fc 0%,#818cf8 45%,#6366f1 100%);box-shadow:0 1px 2px #6366f133,0 4px 14px #6366f11f}.login-submit[data-v-64e81d33]:hover:not(:disabled){background:linear-gradient(175deg,#c4b5fd 0%,#a78bfa 40%,#7c3aed 100%);box-shadow:0 1px 2px #7c3aed38,0 6px 18px #7c3aed24}.login-submit[data-v-64e81d33]:active:not(:disabled){background:linear-gradient(180deg,#7c3aed 0%,#5b21b6 100%);box-shadow:0 1px 2px #0f172a14}.login-error[data-v-64e81d33]{margin-top:.75rem;text-align:center;font-size:.75rem;font-weight:400;color:#e11d48;line-height:1.45}.login-icp-footer[data-v-64e81d33]{margin-top:1rem;text-align:center;font-size:12px;width:100%;max-width:340px}.login-icp-footer a[data-v-64e81d33]{color:#94a3b8;text-decoration:none}.login-icp-footer a[data-v-64e81d33]:hover{color:#64748b;text-decoration:underline}.btn-ghost[data-v-64e81d33]{padding:.4rem .65rem;border-radius:8px;border:1px solid #cbd5e1;background:#ffffff;color:#475569;font-size:.8125rem;cursor:pointer;transition:border-color .15s,color .15s}.btn-ghost[data-v-64e81d33]:hover:not(:disabled){color:#0f172a;border-color:#94a3b8}.btn-ghost.light[data-v-64e81d33]{border-color:#cbd5e1;color:#334155}.console[data-v-64e81d33]{min-height:100vh;display:flex;flex-direction:column;background:#e8ecf1}.topbar[data-v-64e81d33]{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1.25rem;border-bottom:1px solid #d8dee6;background:#ffffff}.topbar-title[data-v-64e81d33]{display:flex;align-items:center;gap:.65rem;font-weight:600;color:#0f172a}.console-body[data-v-64e81d33]{flex:1;display:grid;grid-template-columns:minmax(260px,320px) 1fr;gap:0;min-height:0}@media (max-width: 900px){.console-body[data-v-64e81d33]{grid-template-columns:1fr}}.panel[data-v-64e81d33]{padding:1.25rem 1.5rem;border-right:1px solid #d8dee6;background:#ffffff}.services-panel[data-v-64e81d33],.stats-panel[data-v-64e81d33]{border-right:none;overflow:auto}.stats-head[data-v-64e81d33]{display:flex;align-items:flex-start;gap:1rem;margin-bottom:1.25rem;flex-wrap:wrap}.stats-head-text h2[data-v-64e81d33]{margin:0 0 .35rem}.stats-sub[data-v-64e81d33]{margin:0 0 .35rem;font-size:.875rem;line-height:1.5}.route-hint-wrap[data-v-64e81d33]{display:block;margin-top:.25rem}.route-hint[data-v-64e81d33]{font-size:.8em}.hint[data-v-64e81d33]{margin:0;font-size:.8125rem;color:#64748b}.stats-toolbar[data-v-64e81d33]{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1rem}.granularity-pills[data-v-64e81d33]{display:flex;flex-wrap:wrap;gap:.35rem}.granularity-pills .pill[data-v-64e81d33]{padding:.4rem .75rem;border-radius:999px;border:1px solid #e2e8f0;background:#f8fafc;color:#475569;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s,border-color .15s,color .15s}.granularity-pills .pill[data-v-64e81d33]:hover{border-color:#93c5fd;color:#1e40af}.granularity-pills .pill.active[data-v-64e81d33]{border-color:#2563eb;background:linear-gradient(180deg,#eff6ff 0%,#dbeafe 100%);color:#1e3a8a;box-shadow:0 1px 2px #2563eb26}.stats-summary[data-v-64e81d33]{font-size:.875rem;color:#334155;margin-bottom:.75rem}.chart-card[data-v-64e81d33]{margin-top:.25rem;padding:1rem 1rem .5rem;border-radius:16px;background:linear-gradient(165deg,#f8fafc 0%,#ffffff 45%,#f1f5f9 100%);border:1px solid #e2e8f0;box-shadow:0 1px 3px #0f172a0f,0 4px 14px #0f172a0a}.stats-svg[data-v-64e81d33]{display:block;width:100%;height:auto;min-height:280px;max-height:420px}.stats-svg[data-v-64e81d33] .svg-val{font-size:11px;font-weight:600;fill:#0f172a;font-family:ui-sans-serif,system-ui,sans-serif}.stats-svg[data-v-64e81d33] .svg-x{font-size:10px;fill:#64748b;font-family:ui-sans-serif,system-ui,sans-serif}.empty-stats[data-v-64e81d33]{margin:1rem 0 0;font-size:.875rem}.panel h2[data-v-64e81d33]{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#0f172a}.muted[data-v-64e81d33]{color:#64748b;font-weight:400;font-size:.85em}.mini-form[data-v-64e81d33]{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1.25rem}.mini-form input[data-v-64e81d33]{padding:.5rem .65rem;border-radius:6px;border:1px solid #cbd5e1;background:#ffffff;color:#0f172a;font-size:.875rem}.tenant-chips[data-v-64e81d33]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem}.chip[data-v-64e81d33]{width:100%;text-align:left;padding:.55rem .7rem;border-radius:8px;border:1px solid #e2e8f0;background:#f8fafc;color:#0f172a;cursor:pointer;display:flex;flex-direction:column;gap:.15rem;transition:border-color .15s,background .15s}.chip[data-v-64e81d33]:hover{border-color:#2563eb}.chip.active[data-v-64e81d33]{border-color:#2563eb;background:#eff6ff}.table-wrap[data-v-64e81d33]{overflow:auto;border-radius:8px;border:1px solid #e2e8f0}table[data-v-64e81d33]{width:100%;border-collapse:collapse;font-size:.9rem}th[data-v-64e81d33],td[data-v-64e81d33]{padding:.6rem .75rem;text-align:left;border-bottom:1px solid #e2e8f0}th[data-v-64e81d33]{background:#f8fafc;color:#64748b;font-weight:500;font-size:.8125rem}tbody tr[data-v-64e81d33]:hover{background:#f8fafc}code[data-v-64e81d33]{font-size:.85em;background:#f1f5f9;padding:.15rem .35rem;border-radius:4px;color:#0f172a}.badge[data-v-64e81d33]{display:inline-block;padding:.15rem .45rem;border-radius:4px;font-size:.75rem}.badge.ok[data-v-64e81d33]{background:#dcfce7;color:#15803d}.badge.off[data-v-64e81d33]{background:#f1f5f9;color:#64748b}.badge.err[data-v-64e81d33]{background:#ffe4e6;color:#be123c}.actions[data-v-64e81d33]{white-space:nowrap}.link-btn[data-v-64e81d33]{background:none;border:none;color:#2563eb;cursor:pointer;font-size:.8125rem;margin-right:.5rem;padding:0;text-decoration:none}.link-btn[data-v-64e81d33]:hover{text-decoration:underline}.link-btn[data-v-64e81d33]:disabled{color:#94a3b8;cursor:not-allowed;text-decoration:none}.link-btn.danger[data-v-64e81d33]{color:#dc2626}.exe-rollout-card[data-v-64e81d33]{margin-bottom:1.25rem;padding:1rem 1.1rem;border-radius:12px;border:1px solid #e0e7ff;background:linear-gradient(165deg,#f5f7ff 0%,#ffffff 55%,#f8fafc 100%)}.exe-rollout-head[data-v-64e81d33]{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.75rem}.exe-rollout-label[data-v-64e81d33]{font-size:.8125rem;font-weight:600;color:#3730a3;letter-spacing:.04em}.exe-rollout-desc[data-v-64e81d33]{font-size:.8125rem;line-height:1.5}.exe-rollout-row[data-v-64e81d33]{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem}.exe-rollout-file[data-v-64e81d33]{font-size:.8125rem;color:#475569;max-width:100%}.blocking-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:rgba(248,250,252,.82);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.blocking-overlay .spinner{width:40px;height:40px;border:3px solid #e2e8f0;border-top-color:#2563eb;border-radius:50%;animation:pnsaas-spin .7s linear infinite}@keyframes pnsaas-spin{to{transform:rotate(360deg)}}.rollout-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:1rem;background:rgba(15,23,42,.45);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.rollout-card{width:100%;max-width:420px;padding:1.35rem 1.5rem 1.25rem;border-radius:16px;background:#ffffff;box-shadow:0 0 0 1px #94a3b81f,0 24px 48px #0f172a2e}.rollout-title{margin:0 0 .75rem;font-size:1.05rem;font-weight:600;color:#0f172a}.rollout-step{margin:0 0 1rem;font-size:.875rem;line-height:1.55;color:#334155;min-height:2.75rem}.rollout-bar-wrap{margin-bottom:.75rem}.rollout-bar{height:8px;border-radius:999px;background:#e2e8f0;overflow:hidden}.rollout-bar-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,#6366f1,#2563eb);transition:width .35s ease}.rollout-count{margin:.5rem 0 0;font-size:.8125rem;color:#64748b}.rollout-count strong{color:#1e40af;font-weight:600}.rollout-hint{margin:0 0 .75rem;font-size:.8125rem}.rollout-error{margin:.5rem 0 0;font-size:.8125rem;color:#be123c;line-height:1.45}.rollout-success{margin:.5rem 0 0;font-size:.8125rem;color:#15803d}.rollout-actions{margin-top:1rem;display:flex;justify-content:flex-end;gap:.5rem}.rollout-close{width:auto;margin-top:0}
