/* Jenny Inspector 자체 스타일 — KRDS(로컬) 위 최소 레이어. 접두 ji-. */
:root { --ji-primary:#1d3b6e; --ji-primary-strong:#122a52; --ji-ink:#1b1b1b; --ji-muted:#5a5a5a; --ji-line:#d3d8de; --ji-bg:#f4f6f9;
  --ji-good:#2e7d32; --ji-vuln:#c62828; --ji-manual:#b26a00; --ji-na:#607d8b; --ji-error:#6a1b9a; }
* { box-sizing: border-box; }
body { margin:0; color:var(--ji-ink); background:var(--ji-bg); font-family:"Pretendard GOV","Pretendard",system-ui,"Malgun Gothic",sans-serif; line-height:1.6; font-size:15px; }
.ji-skip { position:absolute; left:-9999px; top:0; background:var(--ji-primary-strong); color:#fff; padding:10px 16px; z-index:1000; }
.ji-skip:focus { left:8px; top:8px; }
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible { outline:3px solid #ffbf47; outline-offset:2px; }
.ji-header { background:var(--ji-primary); color:#fff; }
.ji-header-inner { max-width:1200px; margin:0 auto; padding:12px 20px; display:flex; align-items:center; justify-content:space-between; gap:16px; }
.ji-brand { color:#fff; text-decoration:none; font-weight:700; display:inline-flex; gap:10px; align-items:center; }
.ji-brand-mark { background:#fff; color:var(--ji-primary); border-radius:6px; padding:1px 8px; font-weight:800; }
.ji-org { color:#dfe7f3; font-size:14px; }
.ji-header form { margin:0; }
.ji-header button { background:transparent; color:#fff; border:1px solid #9fb3d4; border-radius:6px; padding:4px 10px; cursor:pointer; }
.ji-nav { background:#fff; border-bottom:1px solid var(--ji-line); }
.ji-nav ul { list-style:none; margin:0 auto; padding:0 20px; max-width:1200px; display:flex; gap:4px; flex-wrap:wrap; }
.ji-nav a { display:block; padding:12px 14px; color:var(--ji-ink); text-decoration:none; border-bottom:3px solid transparent; }
.ji-nav a.is-active, .ji-nav a:hover { border-bottom-color:var(--ji-primary); color:var(--ji-primary); font-weight:700; }
.ji-main { max-width:1200px; margin:0 auto; padding:24px 20px 48px; }
.ji-main h1 { font-size:24px; margin:0 0 6px; }
.ji-lead { color:var(--ji-muted); margin:0 0 20px; }
.ji-card { background:#fff; border:1px solid var(--ji-line); border-radius:10px; padding:18px 20px; margin-bottom:18px; }
.ji-card h2 { font-size:18px; margin:0 0 12px; }
.ji-table { width:100%; border-collapse:collapse; background:#fff; font-size:14px; }
.ji-table th, .ji-table td { border:1px solid var(--ji-line); padding:8px 10px; text-align:left; vertical-align:top; }
.ji-table th { background:#eef2f7; font-weight:700; }
.ji-table .num { text-align:center; }
.ji-btn { display:inline-block; padding:7px 14px; border:1px solid var(--ji-primary); color:var(--ji-primary); background:#fff; border-radius:6px; text-decoration:none; cursor:pointer; font-size:14px; font-family:inherit; }
.ji-btn:hover { background:#eef2f7; }
.ji-btn-primary { background:var(--ji-primary); color:#fff; }
.ji-btn-primary:hover { background:var(--ji-primary-strong); }
.ji-btn-danger { border-color:var(--ji-vuln); color:var(--ji-vuln); }
.ji-btn-sm { padding:3px 9px; font-size:13px; }
.ji-actions { display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin:12px 0; }
.ji-inline { display:inline; margin:0; }
.ji-form .ji-field { margin-bottom:14px; }
.ji-form label.ji-label, .ji-label { display:block; font-weight:700; margin-bottom:4px; }
.ji-input { width:100%; max-width:520px; padding:8px 10px; border:1px solid #8a949e; border-radius:6px; font-size:15px; font-family:inherit; }
.ji-help { color:var(--ji-muted); font-size:13px; margin:4px 0 0; }
.ji-grid2 { display:grid; grid-template-columns:repeat(auto-fit, minmax(260px, 1fr)); gap:12px 20px; }
.ji-alert { padding:10px 14px; border-radius:8px; margin-bottom:14px; }
.ji-alert-ok { background:#e8f5e9; border:1px solid #a5d6a7; }
.ji-alert-err { background:#fdecea; border:1px solid #f5b7b1; }
.ji-alert-warn { background:#fff4e5; border:1px solid #f0c27b; }
.ji-chip { display:inline-block; padding:1px 8px; border-radius:10px; font-size:13px; font-weight:700; border:1px solid currentColor; }
.ji-v-GOOD { color:var(--ji-good); } .ji-v-VULN { color:var(--ji-vuln); } .ji-v-MANUAL { color:var(--ji-manual); }
.ji-v-NA { color:var(--ji-na); } .ji-v-ERROR { color:var(--ji-error); }
.ji-st-ok { color:var(--ji-good); } .ji-st-fail { color:var(--ji-vuln); } .ji-st-unknown { color:var(--ji-na); } .ji-st-trace { color:var(--ji-manual); }
.ji-mono { font-family:Consolas,"D2Coding",monospace; font-size:13px; word-break:break-all; }
.ji-pre { white-space:pre-wrap; word-break:break-all; background:#f7f8fa; border:1px solid var(--ji-line); border-radius:6px; padding:10px; font-family:Consolas,"D2Coding",monospace; font-size:13px; max-height:520px; overflow:auto; margin:0; }
.ji-progress { display:grid; gap:12px; }
.ji-prog-row { border:1px solid var(--ji-line); border-radius:8px; padding:10px 12px; background:#fff; }
.ji-prog-head { display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap; }
.ji-bar { height:12px; background:#e3e8ef; border-radius:6px; overflow:hidden; margin:8px 0 4px; }
.ji-bar > span { display:block; height:100%; width:0; background:var(--ji-primary); transition:width .3s; }
.ji-log { max-height:220px; overflow:auto; background:#10161f; color:#d7dee8; font-family:Consolas,monospace; font-size:12.5px; padding:8px 10px; border-radius:6px; white-space:pre-wrap; margin:6px 0 0; }
.ji-summary { display:grid; grid-template-columns:repeat(5, minmax(110px,1fr)); gap:10px; margin-bottom:14px; }
.ji-summary div { background:#fff; border:1px solid var(--ji-line); border-radius:8px; padding:10px; text-align:center; }
.ji-summary strong { display:block; font-size:26px; }
.ji-footer { text-align:center; color:var(--ji-muted); font-size:13px; padding:20px; }
.ji-footer p { margin:2px 0; }
.ji-footer a { color:var(--ji-primary); }
.ji-login { max-width:440px; margin:60px auto; }
dl.ji-dl { display:grid; grid-template-columns:170px 1fr; gap:6px 12px; margin:0; }
dl.ji-dl dt { font-weight:700; } dl.ji-dl dd { margin:0; }
.ji-filter { display:flex; gap:10px; flex-wrap:wrap; align-items:end; margin-bottom:10px; }
.ji-filter label { font-size:13px; font-weight:700; display:block; }
.ji-filter select, .ji-filter input { padding:5px 8px; border:1px solid #8a949e; border-radius:6px; font-family:inherit; }
.ji-confirm-id { max-width:150px; display:inline-block; padding:3px 6px; font-size:13px; }
.ji-chart-narrow { max-width:720px; margin:0 auto; }
.ji-chart-mid { max-width:900px; margin:0 auto; }
.ji-search { border:2px solid var(--ji-primary); border-radius:8px; background:#f2f6fc; padding:10px 14px 4px; margin:0 0 10px; }
.ji-search legend { font-weight:700; color:var(--ji-primary); padding:0 6px; font-size:15px; }
/* 차트 막대 사이 여백: JennyChart 는 막대 간격 2px 고정 → 막대를 가운데 기준 75% 폭으로 줄여 같은 묶음 안에 막대 폭의 약 25~30% 간격을 만든다(묶음 사이는 그보다 넓다) */
.ji-chart .jc-bar { transform-box: fill-box; transform-origin: center; transform: scaleX(0.75); }
.ji-tabs { margin-bottom:16px; }
.ji-tabs .tab-conts { padding-top:12px; }
.ji-tabs .btn-tab[aria-selected=true] { font-weight:700; }
.ji-err-note { color:var(--ji-error); font-size:13px; }

/* ---- v1.0.2: server 모드·계정·규칙 사용 설정·납품본 ---- */
.ji-mode { margin-left:8px; padding:1px 7px; border-radius:8px; font-size:12px; font-weight:700; background:#fff; color:var(--ji-primary); }
.ji-user { margin-left:auto; margin-right:12px; font-size:14px; }
.ji-user a { color:#fff; text-decoration:none; }
.ji-user a:hover { text-decoration:underline; }
.ji-header-inner form { margin-left:0; }
.ji-facts { display:grid; grid-template-columns:max-content 1fr; gap:6px 16px; margin:8px 0; }
.ji-facts dt { font-weight:700; color:#464c53; }
.ji-facts dd { margin:0; word-break:break-all; }
.ji-off td { color:#8a949e; }
.ji-input-sm { padding:4px 8px; font-size:13px; width:auto; }
.ji-inline-details { display:inline-block; vertical-align:middle; }
.ji-inline-details summary { list-style:none; cursor:pointer; }
.ji-inline-details summary::-webkit-details-marker { display:none; }
.ji-inline-form { display:inline-flex; gap:6px; align-items:center; margin:4px 0; }
.ji-table .num { text-align:right; }
