:root{--bg-dark: #0f172a;--bg-card: #1e293b;--bg-card-hover: #334155;--text-main: #f8fafc;--text-sub: #94a3b8;--accent-blue: #38bdf8;--accent-indigo: #818cf8;--accent-green: #34d399;--accent-yellow: #fbbf24;--accent-red: #f87171;--border-color: #334155;--font-family: "Inter", "Noto Sans KR", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif}*{box-sizing:border-box;margin:0;padding:0}body{background-color:var(--bg-dark);color:var(--text-main);font-family:var(--font-family);-webkit-font-smoothing:antialiased;line-height:1.5;min-height:100vh}button{font-family:inherit;cursor:pointer;border:none;outline:none}a{color:inherit;text-decoration:none}.login-container{min-height:100vh;display:flex;justify-content:center;align-items:center;padding:24px;background:radial-gradient(circle at 50% 20%,#1e293b,#0f172a 70%)}.login-card{width:100%;max-width:440px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:16px;padding:36px 32px;box-shadow:0 20px 25px -5px #00000080,0 8px 10px -6px #00000080}.login-header{text-align:center;margin-bottom:28px}.login-icon-wrap{width:56px;height:56px;margin:0 auto 16px;background:linear-gradient(135deg,#38bdf826,#818cf826);border:1px solid rgba(56,189,248,.3);border-radius:14px;display:flex;align-items:center;justify-content:center}.login-title{font-size:22px;font-weight:700;background:linear-gradient(135deg,#38bdf8,#818cf8);-webkit-background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:6px}.login-subtitle{font-size:13px;color:var(--text-sub)}.form-group{margin-bottom:18px}.form-label{display:block;font-size:13px;font-weight:500;color:#cbd5e1;margin-bottom:6px}.input-wrap{position:relative;display:flex;align-items:center}.input-icon{position:absolute;left:12px;color:var(--text-sub)}.form-input{width:100%;padding:11px 12px 11px 40px;background:#0f172a;border:1px solid var(--border-color);border-radius:8px;color:var(--text-main);font-size:14px;outline:none;transition:all .2s ease}.form-input:focus{border-color:var(--accent-blue);box-shadow:0 0 0 2px #38bdf833}.login-btn{width:100%;padding:12px;background:linear-gradient(135deg,#38bdf8,#3b82f6);color:#0f172a;font-weight:600;font-size:15px;border-radius:8px;transition:all .2s ease;display:flex;justify-content:center;align-items:center;gap:8px;margin-top:24px}.login-btn:hover{opacity:.92;transform:translateY(-1px);box-shadow:0 4px 12px #38bdf84d}.error-banner{background:#f871711f;border:1px solid rgba(248,113,113,.3);color:var(--accent-red);padding:10px 14px;border-radius:8px;font-size:13px;margin-bottom:16px;display:flex;align-items:center;gap:8px}.dev-guide-box{margin-top:24px;padding:14px;background:#38bdf80f;border:1px dashed rgba(56,189,248,.3);border-radius:10px;text-align:center}.dev-guide-title{font-size:12px;font-weight:600;color:var(--accent-blue);margin-bottom:6px}.dev-guide-account{font-size:13px;color:#e2e8f0;font-family:monospace;background:#0f172a99;padding:4px 8px;border-radius:6px;display:inline-block;margin-bottom:8px}.dev-fill-btn{padding:4px 10px;background:var(--bg-card-hover);color:var(--text-sub);font-size:11px;border-radius:6px;transition:all .2s}.dev-fill-btn:hover{color:var(--text-main);background:#475569}.container{max-width:1440px;margin:0 auto;padding:24px}.header{display:flex;justify-content:space-between;align-items:center;padding-bottom:20px;border-bottom:1px solid var(--border-color);margin-bottom:20px;flex-wrap:wrap;gap:16px}.logo-area{display:flex;align-items:center;gap:12px}.logo-title{font-size:22px;font-weight:700;background:linear-gradient(135deg,#38bdf8,#818cf8);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.header-right{display:flex;align-items:center;gap:12px}.header-badge{display:flex;align-items:center;gap:6px;padding:6px 12px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:8px;font-size:13px;color:#cbd5e1}.grafana-btn{display:flex;align-items:center;gap:6px;padding:6px 12px;background:#fb923c26;border:1px solid rgba(251,146,60,.3);color:#fb923c;border-radius:8px;font-size:13px;font-weight:500;transition:all .2s}.grafana-btn:hover{background:#fb923c40;transform:translateY(-1px)}.logout-btn{display:flex;align-items:center;gap:6px;padding:6px 12px;background:#f871711a;border:1px solid rgba(248,113,113,.25);color:var(--accent-red);border-radius:8px;font-size:13px;font-weight:500;transition:all .2s}.logout-btn:hover{background:#f8717133}.global-filter-bar{background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px;padding:16px 20px;margin-bottom:24px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;box-shadow:0 4px 6px -1px #0003}.filter-left-group{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.filter-item{display:flex;align-items:center;gap:8px}.filter-label{font-size:13px;font-weight:600;color:var(--text-sub);display:flex;align-items:center;gap:4px;white-space:nowrap}.filter-select{padding:8px 12px;background:#0f172a;color:var(--text-main);border:1px solid var(--border-color);border-radius:8px;font-size:13px;font-weight:500;outline:none;cursor:pointer;transition:all .2s ease;min-width:140px}.filter-select:focus{border-color:var(--accent-blue);box-shadow:0 0 0 2px #38bdf833}.filter-right-group{display:flex;align-items:center;gap:10px}.timeseries-link-btn{display:flex;align-items:center;gap:6px;padding:7px 14px;background:linear-gradient(135deg,#f97316,#ea580c);color:#fff;border-radius:8px;font-size:13px;font-weight:600;box-shadow:0 2px 8px #f9731659;transition:all .2s ease;white-space:nowrap}.timeseries-link-btn:hover{background:linear-gradient(135deg,#fb923c,#f97316);transform:translateY(-1px);box-shadow:0 4px 12px #f9731673}.timeseries-link-btn.disabled,.timeseries-link-btn:disabled{background:#334155!important;color:#64748b!important;cursor:not-allowed!important;box-shadow:none!important;transform:none!important;opacity:.6}.nav-tabs-wrapper{background:#131d31;border:1px solid var(--border-color);border-radius:12px;padding:6px;margin-bottom:20px;display:flex;gap:6px;overflow-x:auto;box-shadow:0 4px 6px -1px #0003}.nav-tab-item{flex:1;min-width:170px;padding:11px 16px;border-radius:8px;background:transparent;color:var(--text-sub);font-weight:500;font-size:14px;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;border:1px solid transparent;white-space:nowrap;position:relative}.nav-tab-item:hover{color:#f1f5f9;background:#1e293b99}.nav-tab-item.active{background:#1e293b;color:#38bdf8;font-weight:600;border:1px solid rgba(56,189,248,.4);box-shadow:0 4px 12px #00000059,0 0 10px #38bdf826}.nav-tab-badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:9999px;background:#94a3b826;color:#94a3b8;transition:all .2s ease}.nav-tab-item.active .nav-tab-badge{background:#38bdf833;color:#38bdf8}.nav-tab-badge.badge-danger{background:#f8717126;color:#f87171}.nav-tab-item.active .nav-tab-badge.badge-danger{background:#f8717140;color:#fca5a5;box-shadow:0 0 6px #f871714d}.nav-tab-badge.badge-ai{background:#818cf826;color:#a5b4fc}.nav-tab-item.active .nav-tab-badge.badge-ai{background:#818cf840;color:#c7d2fe}.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:20px;margin-bottom:24px}.stat-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px;padding:20px;display:flex;flex-direction:column;gap:8px}.stat-title{font-size:13px;color:var(--text-sub);font-weight:500}.stat-value{font-size:28px;font-weight:700;color:var(--text-main)}.badge{display:inline-block;padding:4px 10px;border-radius:9999px;font-size:12px;font-weight:600}.badge-green{background:#34d39926;color:var(--accent-green)}.badge-yellow{background:#fbbf2426;color:var(--accent-yellow)}.badge-red{background:#f8717126;color:var(--accent-red)}.table-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px;padding:20px;margin-bottom:24px;overflow-x:auto}.table{width:100%;border-collapse:collapse;margin-top:12px}.table th,.table td{padding:12px 16px;text-align:left;border-bottom:1px solid var(--border-color);font-size:14px}.table th{color:var(--text-sub);font-weight:600}.pre-box{background:#0f172a;padding:16px;border-radius:8px;font-family:monospace;font-size:13px;color:#e2e8f0;white-space:pre-wrap;word-break:break-word;max-height:400px;overflow-y:auto}.spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
