:root{--color-bg:#f5f6fa;--color-surface:#fff;--color-border:#e2e5eb;--color-primary:#1f3c88;--color-primary-light:#2c5cc5;--color-text:#1c1f26;--color-muted:#6b7280;--color-positive:#1a9e5f;--color-negative:#c0392b;--color-neutral:#7f8c8d;--color-risk-high:#c0392b;--color-risk-medium:#d68910;--color-risk-low:#2c5cc5}*{box-sizing:border-box}body,html{padding:0;margin:0;background:var(--color-bg);color:var(--color-text);font-family:-apple-system,BlinkMacSystemFont,Pretendard,Malgun Gothic,sans-serif}a{color:inherit;text-decoration:none}.page{max-width:1080px;margin:0 auto;padding:24px}.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;background:var(--color-primary);color:#fff}.topbar a{color:#fff;margin-right:16px;font-size:14px;opacity:.9}.topbar a:hover{opacity:1}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;padding:20px;margin-bottom:16px}.banner-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));grid-gap:12px;gap:12px;margin-bottom:20px}.banner-item{background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;padding:14px;text-align:center}.banner-item .label{font-size:12px;color:var(--color-muted);margin-bottom:6px}.banner-item .value{font-size:22px;font-weight:700}.banner-item.clickable{cursor:pointer;font-family:inherit;width:100%;transition:border-color .15s,box-shadow .15s}.banner-item.clickable.active,.banner-item.clickable:hover{border-color:var(--color-primary-light)}.banner-item.clickable.active{box-shadow:0 0 0 1px var(--color-primary-light)}table{width:100%;border-collapse:collapse;font-size:14px}td,th{text-align:left;padding:10px 8px;border-bottom:1px solid var(--color-border)}th{color:var(--color-muted);font-weight:600;font-size:12px}.issue-table{table-layout:fixed}.issue-table td,.issue-table th{padding:7px 8px;vertical-align:middle}.issue-table th.sortable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.issue-table th.sortable:hover{color:var(--color-primary-light)}.truncate-1{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:600;color:#fff}.badge.positive{background:var(--color-positive)}.badge.negative{background:var(--color-negative)}.badge.neutral{background:var(--color-neutral)}.badge.high{background:var(--color-risk-high)}.badge.medium{background:var(--color-risk-medium)}.badge.low{background:var(--color-risk-low)}.btn{display:inline-block;padding:8px 16px;border-radius:6px;background:var(--color-primary-light);color:#fff;border:none;cursor:pointer;font-size:14px}.btn:hover{background:var(--color-primary)}.btn.secondary{background:transparent;color:var(--color-primary);border:1px solid var(--color-primary-light)}input{width:100%;padding:10px 12px;border:1px solid var(--color-border);border-radius:6px;font-size:14px;margin-bottom:12px}.login-box{max-width:360px;margin:80px auto}.muted{color:var(--color-muted)}.error,.muted{font-size:13px}.error{color:var(--color-negative);margin-bottom:12px}