:root{font-family:SF Pro Text,SF Pro Display,Neue Haas Grotesk Text Pro,Helvetica Neue,sans-serif;line-height:1.45;font-weight:500;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;min-width:320px;color:#0f172a}a{color:inherit}h1,h2,h3,h4,h5,h6,p{margin-top:0}:root{--bg: #f3f6fb;--surface: rgba(255, 255, 255, .72);--surface-solid: #ffffff;--surface-soft: #f7f9fc;--surface-border: rgba(15, 23, 42, .08);--surface-border-strong: rgba(15, 23, 42, .14);--text-primary: #0f172a;--text-secondary: #475569;--text-muted: #64748b;--accent: #0a84ff;--accent-soft: rgba(10, 132, 255, .12);--ok: #1e9b5a;--warn: #d97706;--err: #dc2626;--radius-xl: 22px;--radius-lg: 16px;--radius-md: 12px;--shadow-soft: 0 18px 50px -30px rgba(15, 23, 42, .42);--shadow-card: 0 12px 30px -20px rgba(15, 23, 42, .28)}.appShell{color:var(--text-primary);display:grid;grid-template-columns:268px minmax(0,1fr);gap:18px;min-height:100vh;padding:18px;position:relative;background:radial-gradient(90rem 50rem at -8% -12%,#dbeafe 10%,transparent 55%),radial-gradient(72rem 42rem at 108% 18%,#e2e8f0 6%,transparent 62%),radial-gradient(48rem 38rem at 64% 104%,#dbeafe 10%,transparent 68%),var(--bg)}.appAmbient{pointer-events:none;position:absolute;border-radius:999px;filter:blur(4px);opacity:.45;z-index:0}.appAmbientOne{width:360px;height:360px;top:20px;right:20%;background:radial-gradient(circle at 30% 30%,#0a84ff3d,#0a84ff00)}.appAmbientTwo{width:320px;height:320px;bottom:20px;left:20%;background:radial-gradient(circle at 50% 50%,#34d3992e,#34d39900)}.sidebar,.content{position:relative;z-index:1}.sidebar{background:var(--surface);border:1px solid var(--surface-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-soft);backdrop-filter:blur(16px) saturate(1.25);-webkit-backdrop-filter:blur(16px) saturate(1.25);padding:14px;animation:enterUp .45s ease both}.brand{align-items:center;background:linear-gradient(180deg,#ff2020,red);border:1px solid rgba(255,0,0,.45);border-radius:var(--radius-lg);display:flex;flex-direction:column;justify-content:center;margin-bottom:14px;padding:12px 10px;box-shadow:inset 0 1px #ffffff38}.brandLogo{display:block;width:100%;height:66px;object-fit:contain}.brandCaption{color:#fffffff5;font-size:11px;font-weight:700;letter-spacing:.14em;margin-top:8px;text-shadow:0 1px 2px rgba(0,0,0,.18);text-transform:uppercase}.nav{display:grid;gap:8px}.navLink{color:var(--text-secondary);border-radius:var(--radius-md);display:block;font-size:14px;font-weight:600;padding:10px 12px;text-decoration:none;transition:background-color .2s ease,color .2s ease,transform .2s ease}.navLink:hover{color:var(--text-primary);background:#0f172a0f;transform:translate(2px)}.navLinkActive{color:#0b3f78;background:linear-gradient(180deg,#e0efff,#d9ebff);box-shadow:inset 0 0 0 1px #0a84ff33}.navActionDanger{appearance:none;border:1px solid rgba(220,38,38,.38);background:linear-gradient(180deg,#fee2e2,#fecaca);color:#991b1b;border-radius:var(--radius-md);display:block;font-size:14px;font-weight:700;padding:10px 12px;text-align:left;cursor:pointer;transition:filter .2s ease,transform .2s ease}.navActionDanger:hover{filter:brightness(.98);transform:translate(2px)}.navActionDanger:disabled{opacity:.6;cursor:not-allowed;transform:none}.navActionSecondary{appearance:none;border:1px solid var(--surface-border-strong);background:linear-gradient(180deg,#fff,#f3f4f6);color:#334155;border-radius:var(--radius-md);display:block;font-size:14px;font-weight:700;padding:10px 12px;text-align:left;cursor:pointer;transition:filter .2s ease,transform .2s ease}.navActionSecondary:hover{filter:brightness(.98);transform:translate(2px)}.authPage{align-items:center;background:radial-gradient(72rem 34rem at -5% -12%,#dbeafe 12%,transparent 58%),radial-gradient(68rem 36rem at 110% 10%,#e2e8f0 10%,transparent 62%),var(--bg);display:flex;justify-content:center;min-height:100vh;padding:24px}.authCard{width:min(440px,100%);background:var(--surface);border:1px solid var(--surface-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-soft);backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2);padding:26px}.authTitle{margin:0;font-size:28px;letter-spacing:-.02em;color:var(--text-primary)}.authSubtitle{margin:8px 0 20px;color:var(--text-secondary);font-size:14px}.authForm{display:grid;gap:10px}.authLabel{font-size:13px;color:var(--text-secondary);font-weight:600}.authInput{width:100%;border:1px solid var(--surface-border-strong);border-radius:10px;padding:10px 12px;font-size:14px;color:var(--text-primary);background:#fff}.authInput:focus{outline:none;border-color:#0a84ff80;box-shadow:0 0 0 3px #0a84ff24}.authButton{margin-top:6px;appearance:none;border:0;border-radius:10px;padding:11px 14px;background:linear-gradient(180deg,#0f86ff,#0763cf);color:#fff;font-size:14px;font-weight:700;cursor:pointer}.authButton:disabled{opacity:.6;cursor:not-allowed}.authError{margin-bottom:12px;border:1px solid rgba(220,38,38,.24);background:#fee2e2cc;color:#991b1b;border-radius:10px;padding:10px 12px;font-size:13px}.content{min-width:0}.contentInner{background:var(--surface);border:1px solid var(--surface-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-soft);backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2);min-height:calc(100vh - 36px);padding:24px;animation:enterUp .52s ease both}.contentInner>*{animation:fadeLift .4s ease both}.contentInner>*:nth-child(1){animation-delay:.04s}.contentInner>*:nth-child(2){animation-delay:.1s}.pageTitle{color:var(--text-primary);font-size:clamp(24px,2.3vw,34px);font-weight:700;letter-spacing:-.02em;margin:0}.pageHeader{align-items:flex-start;display:flex;gap:16px;justify-content:space-between;margin-bottom:18px}.pageSubtitle{color:var(--text-secondary);margin:8px 0 0;font-size:14px;line-height:1.45}.toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:10px}.toolbarRefreshBtn{align-items:center;display:inline-flex;gap:8px;justify-content:center;min-width:112px}.toolbarRefreshSpinner{border:2px solid rgba(255,255,255,0);border-left-color:currentColor;border-radius:999px;display:inline-block;height:12px;opacity:0;width:12px}.toolbarRefreshBtn.isLoading .toolbarRefreshSpinner{animation:toolbarSpin .8s linear infinite;opacity:.8}@keyframes toolbarSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.gridKpis{display:grid;gap:14px;grid-template-columns:repeat(12,minmax(0,1fr))}.kpiCard{grid-column:span 4;background:var(--surface-solid);border:1px solid var(--surface-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:16px}.kpiLabel{color:var(--text-secondary);font-size:12px;font-weight:600;letter-spacing:.01em;margin:0 0 8px;text-transform:uppercase}.kpiValueRow{align-items:baseline;display:flex;gap:12px;justify-content:space-between}.kpiValue{color:var(--text-primary);font-size:clamp(26px,3vw,36px);font-weight:700;letter-spacing:-.02em;margin:0}.kpiHint{color:var(--text-muted);font-size:13px;margin:8px 0 0}.panel{margin-top:14px;background:var(--surface-solid);border:1px solid var(--surface-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:16px}.panelTitle{color:var(--text-primary);font-size:16px;font-weight:700;margin:0 0 12px}.panelTitleNoMargin{margin:0}.panelHeaderRow{align-items:baseline;display:flex;gap:12px;justify-content:space-between;margin-bottom:12px}.filterInline{align-items:center;display:inline-flex;gap:8px}.textMuted{color:var(--text-secondary)}.textMutedNoMargin{color:var(--text-muted);margin:0}.selectCompact{padding:8px 10px;min-height:36px}.tableWrap{border:1px solid var(--surface-border);border-radius:var(--radius-md);overflow:auto}.table{width:100%;border-collapse:collapse;font-size:13px}.table thead th{background:var(--surface-soft);border-bottom:1px solid var(--surface-border);color:var(--text-secondary);font-size:12px;font-weight:700;letter-spacing:.02em;padding:11px 12px;text-align:left;text-transform:uppercase;white-space:nowrap}.table tbody td{border-bottom:1px solid rgba(15,23,42,.06);color:#1e293b;padding:10px 12px}.table tbody tr:last-child td{border-bottom:0}.table tbody tr:hover td{background:#f8fbff}.tableLight{background:#fff;color:var(--text-primary)}.tableLight thead{color:var(--text-secondary)}.sortBtn{appearance:none;background:transparent;border:0;color:inherit;cursor:pointer;font:inherit;font-weight:700;margin:0;padding:0}.sortBtn:hover{color:#0b3f78}th[aria-sort=ascending] .sortBtn:after,th[aria-sort=descending] .sortBtn:after{color:var(--accent);margin-left:6px}th[aria-sort=ascending] .sortBtn:after{content:"↑"}th[aria-sort=descending] .sortBtn:after{content:"↓"}.mt12{margin-top:12px}.colTime{width:210px}.colLevel{width:90px}.colType{width:170px}.colSource,.colEntity{width:140px}.cellEmpty{color:var(--text-muted);padding:16px}.badge{align-items:center;background:#fff;border:1px solid var(--surface-border);border-radius:999px;color:var(--text-secondary);display:inline-flex;font-size:12px;font-weight:600;gap:8px;padding:7px 11px;white-space:nowrap}.dot{width:7px;height:7px;border-radius:50%;background:#94a3b8}.badgeOk .dot{background:var(--ok)}.badgeWarn .dot{background:var(--warn)}.badgeErr .dot{background:var(--err)}.btn,.select,.input{appearance:none;background:#fff;border:1px solid var(--surface-border-strong);border-radius:11px;color:#1e293b;font-family:inherit;font-size:13px;line-height:1.2;min-height:38px;outline:0}.btn{cursor:pointer;font-weight:650;padding:9px 12px;transition:background-color .2s ease,border-color .2s ease,transform .2s ease}.btn:hover{border-color:#0a84ff73;background:#f8fbff;transform:translateY(-1px)}.btn:active{transform:translateY(0)}.input,.select{padding:9px 12px;width:100%}.input::placeholder{color:#94a3b8}.input:focus,.select:focus,.btn:focus-visible,.sortBtn:focus-visible,.navLink:focus-visible{box-shadow:0 0 0 4px var(--accent-soft);border-color:#0a84ff80}.errorBox{background:#dc262614;border:1px solid rgba(220,38,38,.2);border-radius:var(--radius-md);color:#991b1b;font-size:13px;margin:10px 0 0;padding:12px}.filterBar{display:grid;gap:10px;grid-template-columns:1fr 170px 190px 190px 130px}.mono{font-family:SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px}.pill{align-items:center;border-radius:999px;border:1px solid var(--surface-border-strong);display:inline-flex;font-size:12px;font-weight:650;padding:3px 8px;text-transform:lowercase}.pillOk{color:#166534;background:#16a34a1f;border-color:#16a34a42}.pillWarn{color:#92400e;background:#f59e0b1f;border-color:#f59e0b4d}.pillErr{color:#b91c1c;background:#ef44441f;border-color:#ef44444d}.pillDim{color:#334155;background:#94a3b829;border-color:#94a3b84d}.statusValue{font-weight:700}.statusPresent{color:#166534}.statusMissing{color:#b91c1c}.tableDense thead th{position:sticky;top:0;z-index:1}.tableDense tbody td{padding:9px 12px}.tableDense tbody tr:hover td{background:#f8fbff}.wineThumb{border:1px solid rgba(15,23,42,.12);border-radius:8px;display:inline-block;object-fit:cover;overflow:hidden;vertical-align:middle}.wineThumbSm{height:36px;width:36px}.wineThumbMd{height:46px;width:46px}.wineThumbLg{height:56px;width:56px}.wineThumbPlaceholder{align-items:center;background:#f8fafc;color:#64748b;display:inline-flex;font-size:10px;font-weight:700;justify-content:center;letter-spacing:.02em;text-transform:uppercase}.recommendFilterRow{align-items:end;display:grid;gap:10px;grid-template-columns:minmax(180px,1.2fr) repeat(3,minmax(130px,180px)) auto}.recommendField{display:grid;gap:6px}.recommendLabel{color:var(--text-secondary);font-size:12px;font-weight:650;letter-spacing:.02em;text-transform:uppercase}.recommendTwoCols{display:grid;gap:14px;grid-template-columns:repeat(2,minmax(0,1fr))}.recommendTestGrid{align-items:end;display:grid;gap:10px;grid-template-columns:minmax(280px,1.6fr) minmax(220px,1fr) minmax(140px,.8fr) 120px auto}.recommendFieldWide{grid-column:span 1}.suggestInputWrap{position:relative}.suggestDropdown{background:#fff;border:1px solid var(--surface-border);border-radius:12px;box-shadow:0 12px 32px #0f172a1f;display:grid;left:0;margin-top:6px;max-height:280px;overflow:auto;padding:6px;position:absolute;right:0;top:100%;z-index:20}.suggestOption{appearance:none;background:transparent;border:0;border-radius:8px;color:var(--text-primary);cursor:pointer;font:inherit;padding:9px 10px;text-align:left}.suggestOption:hover,.suggestOptionActive{background:#eef5ff;color:#0b3f78}.recommendSubmitBtn{white-space:nowrap}.recommendPromptChips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.suggestChip{appearance:none;background:#f3f7fd;border:1px solid var(--surface-border);border-radius:999px;color:#0f2946;cursor:pointer;font:inherit;font-size:12px;line-height:1.2;padding:7px 10px;transition:background-color .2s ease,border-color .2s ease}.suggestChip:hover{background:#e8f1ff;border-color:#0a84ff38}.recommendResultStack{display:grid;gap:12px;margin-top:14px}.recommendResultMeta{background:#f8fbff;border:1px solid var(--surface-border);border-radius:12px;color:var(--text-secondary);display:flex;flex-wrap:wrap;gap:10px 16px;padding:10px 12px}.recommendResultMeta strong{color:var(--text-primary)}.recommendResultGrid{display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.recommendResultCard{background:#fff;border:1px solid var(--surface-border);border-radius:14px;box-shadow:var(--shadow-card);padding:12px}.recommendResultCardHead{align-items:center;display:flex;gap:10px;justify-content:space-between}.recommendResultTitleWrap{align-items:center;display:inline-flex;gap:10px;min-width:0}.recommendResultCardHead h3{color:var(--text-primary);font-size:14px;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recommendResultCard p{color:var(--text-secondary);font-size:13px;line-height:1.4;margin:8px 0 0}.recommendResultJson,.recommendRawJson{background:#0f172a;border-radius:10px;color:#dbeafe;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;line-height:1.4;margin:10px 0 0;overflow:auto;padding:10px;white-space:pre-wrap;word-break:break-word}.recommendRawJson,.recommendNoItemsPanel{margin-top:0}.barList{display:grid;gap:10px}.barRow{display:grid;gap:6px}.barHead{align-items:center;color:var(--text-secondary);display:flex;font-size:13px;justify-content:space-between}.barTrack{background:#edf2f8;border-radius:999px;height:8px;overflow:hidden}.barFill{background:linear-gradient(90deg,#0a84ff,#38bdf8);border-radius:999px;height:100%}.barFillAlt{background:linear-gradient(90deg,#22c55e,#34d399)}.topGrid{display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.topCard{border:1px solid var(--surface-border);border-radius:var(--radius-md);padding:12px}.topTitle{color:var(--text-secondary);font-size:13px;font-weight:700;margin:0 0 10px;text-transform:uppercase}.chipList{display:flex;flex-wrap:wrap;gap:8px}.chip{align-items:center;background:#f3f7fd;border:1px solid var(--surface-border);border-radius:999px;color:#0f2946;display:inline-flex;font-size:12px;gap:7px;padding:6px 10px}@media(max-width:1120px){.appShell{grid-template-columns:1fr;gap:14px;padding:14px}.sidebar{padding:10px}.brand{flex-direction:row;justify-content:flex-start;gap:10px;margin-bottom:10px}.brandLogo{width:108px;height:42px}.brandCaption{margin-top:0}.nav{display:flex;gap:8px;overflow:auto;padding-bottom:2px}.navLink{white-space:nowrap}.contentInner{min-height:auto;padding:18px}.gridKpis .kpiCard{grid-column:span 6}.filterBar{grid-template-columns:1fr 1fr 1fr}.recommendFilterRow,.recommendTestGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.recommendSubmitBtn{width:100%}.recommendTwoCols,.topGrid,.recommendResultGrid{grid-template-columns:1fr}}@media(max-width:760px){.pageHeader{flex-direction:column;align-items:stretch}.toolbar{width:100%}.toolbar .btn,.toolbar .badge{flex:1 1 calc(50% - 10px);justify-content:center}.gridKpis .kpiCard{grid-column:span 12}.panelHeaderRow{flex-direction:column;align-items:stretch}.filterInline{width:100%;justify-content:space-between}.filterInline .selectCompact{width:60%}.filterBar{grid-template-columns:1fr}.contentInner{padding:14px}.recommendFilterRow,.recommendTestGrid{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@keyframes enterUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeLift{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
