/* U+CSMA — Unified Dashboard. Shared tokens and components.
   Light/Dark theme via [data-theme] on <html>; default is light (warm white B2B consulting palette),
   toggle switches to a dark operations-console palette. All component colors below reference
   CSS variables so both themes stay consistent and readable (no low-contrast/washed-out text). */
:root {
  color-scheme:light;
  /* Base surfaces */
  --c-bg:#f7f5f2; --c-bg-warm:#efece7; --c-white:#ffffff; --c-surface-2:#f2f0ec; --c-surface-3:#e9e6e0;
  --c-line:#e2ded7; --c-line-strong:#cfc9c0;
  /* Text */
  --c-charcoal:#1c1c22; --c-dark:#3c3d45; --c-gray:#6b6d78; --c-gray-mid:#7d7f8a;
  --c-gray-lighter:#ece9e4;
  /* Brand */
  --c-magenta:#e6007e; --c-magenta-dark:#b8005f; --c-magenta-strong:#96004c;
  --c-magenta-soft:#fbe3ef; --c-magenta-soft2:#f7d5e8;
  /* Semantic */
  --c-success:#0f9d63; --c-success-bg:#e3f6ec; --c-warn:#a8720b; --c-warn-bg:#fbf0d9; --c-warn-border:#eeddaf;
  --c-danger:#d6284f; --c-danger-bg:#fce6ea; --c-info:#1c6fd0; --c-info-bg:#e6f0fc;
  --c-high:#b5590a; --c-high-bg:#fbead6;
  /* Sidebar */
  --c-sidebar-bg:#ffffff; --c-sidebar-border:#e6e2db; --c-sidebar-text:#4a4c55; --c-sidebar-text-strong:#1a1a1f;
  --c-sidebar-text-muted:#6f717b; --c-sidebar-text-faint:#8b8d97;
  --c-sidebar-hover-bg:#f3eff3; --c-sidebar-hover-text:#1a1a1f;
  --c-sidebar-active-bg:#fbe3ef; --c-sidebar-active-text:#b8005f; --c-sidebar-active-icon:#e6007e;
  /* Surfaces with purpose */
  --c-topbar-bg:#ffffff; --c-input-bg:#ffffff; --c-scrollbar-thumb:#d6d1c8;
  --c-chat-user-bg:#efece7; --c-chat-user-text:#1c1c22;
  --c-tag-bg:#f0eee9; --c-tag-text:#54565f;
  --c-chip-bg:#fbe3ef; --c-chip-border:#f1b6d6;
  --c-kpi-tint-border:#f0b7d6; --c-kpi-tint-bg:#fdedf6; --c-kpi-tint-bg2:#fadcec; --c-danger-tint-bg:#fce3e8;
  --c-pbar-fill:#e6007e;
  --c-chart-blue:#1c6fd0; --c-chart-track:#e2ded7;
  --radius-lg:12px; --radius-md:10px; --radius-sm:8px; --radius-pill:999px;
  --shadow-card:none;
  --font:'Pretendard',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --sidebar-width:232px;
}
/* Dark theme — operations-console palette, magenta accent (opt-in via toggle) */
html[data-theme="dark"] {
  color-scheme:dark;
  --c-bg:#0b0d13; --c-bg-warm:#12161f; --c-white:#171b26; --c-surface-2:#1d2330; --c-surface-3:#232b3b;
  --c-line:#2c3547; --c-line-strong:#3a4459;
  --c-charcoal:#f4f6fb; --c-dark:#d7dceb; --c-gray:#aab4c9; --c-gray-mid:#94a0b8;
  --c-gray-lighter:#232b3b;
  --c-magenta:#ff1493; --c-magenta-dark:#ff8fcf; --c-magenta-strong:#d1006f;
  --c-magenta-soft:#3a2036; --c-magenta-soft2:#2a1c2c;
  --c-success:#3ee6a0; --c-success-bg:#123328; --c-warn:#ffcb66; --c-warn-bg:#3a2c14; --c-warn-border:#5a4623;
  --c-danger:#ff7c93; --c-danger-bg:#3a1f2b; --c-info:#7fbcff; --c-info-bg:#1a2c48;
  --c-high:#ffb27a; --c-high-bg:#3a2a1c;
  --c-sidebar-bg:#0e1119; --c-sidebar-border:#232a38; --c-sidebar-text:#b9c0d1; --c-sidebar-text-strong:#f9fafc;
  --c-sidebar-text-muted:#8b93a8; --c-sidebar-text-faint:#767f95;
  --c-sidebar-hover-bg:#1c2230; --c-sidebar-hover-text:#ffffff;
  --c-sidebar-active-bg:#3d2138; --c-sidebar-active-text:#ff8fcf; --c-sidebar-active-icon:#ff5cad;
  --c-topbar-bg:#0e1119; --c-input-bg:#141a26; --c-scrollbar-thumb:#3d4761;
  --c-chat-user-bg:#2a2f3d; --c-chat-user-text:#ffffff;
  --c-tag-bg:#26304a; --c-tag-text:#b7c3dc;
  --c-chip-bg:#33223e; --c-chip-border:#5a3350;
  --c-kpi-tint-border:#7a3a63; --c-kpi-tint-bg:#271c2c; --c-kpi-tint-bg2:#4c2340; --c-danger-tint-bg:#402332;
  --c-pbar-fill:#ff5cad;
  --c-chart-blue:#7fbcff; --c-chart-track:#3a4459;
}
/* Font sizes across this sheet were scaled 1.3x from the original baseline, then reduced 20%
   (nav menu — .nav-item / .nav-group-label / .nav-item i — kept as-is, already reduced separately). */
* {box-sizing:border-box}
html,body {margin:0;padding:0}
html {background:var(--c-bg)}
body {background:var(--c-bg);color:var(--c-charcoal);font-family:var(--font);font-size:13.6px;line-height:1.55;-webkit-font-smoothing:antialiased;transition:background-color .2s,color .2s}
button,input {font:inherit}
button {cursor:pointer}
a {color:inherit;text-decoration:none}
ul {margin:0;padding:0;list-style:none}
button:focus-visible,a:focus-visible,[role=button]:focus-visible,input:focus-visible {outline:2px solid var(--c-magenta);outline-offset:4px}
::selection {background:var(--c-magenta);color:#fff}
::-webkit-scrollbar {width:5px;height:5px}
::-webkit-scrollbar-thumb {background:var(--c-scrollbar-thumb);border-radius:5px}
::-webkit-scrollbar-track {background:transparent}
.app-shell {display:flex;min-height:100vh}
/* Persistent navigation */
.sidebar {width:var(--sidebar-width);flex-shrink:0;background:var(--c-sidebar-bg);border-right:1px solid var(--c-sidebar-border);display:flex;flex-direction:column;position:fixed;inset:0 auto 0 0;z-index:50;color:var(--c-sidebar-text);transition:background-color .2s,border-color .2s}
.brand-block {padding:24px 22px 18px;border-bottom:1px solid var(--c-sidebar-border)}
/* U+CSMA logo: user-supplied raster wordmark (magenta "U+" + gray "CSMA" + subtitle),
   rendered as a plain <img>. Width capped to the sidebar's content box; height auto to
   preserve the source image's aspect ratio. */
.brand-logo {display:block;width:100%;max-width:186px;height:auto}
.brand-tenant {margin-top:18px;padding:10px 11px;display:flex;align-items:center;gap:8px;font-size:12.8px;font-weight:550;color:var(--c-sidebar-text-strong);border:1px solid var(--c-sidebar-border);border-radius:7px;background:var(--c-sidebar-hover-bg)}
.brand-tenant .dot {width:6px;height:6px;flex-shrink:0;background:var(--c-success);border-radius:50%}
/* Multi-tenant selector: replaces the static tenant name with a native <select> styled to
   look like plain sidebar text, with a chevron icon indicating it's interactive. */
.tenant-select-wrap {position:relative}
.tenant-select {appearance:none;-webkit-appearance:none;flex:1;min-width:0;border:0;background:transparent;color:inherit;font:inherit;font-weight:550;padding:0 18px 0 0;cursor:pointer}
.tenant-select:focus-visible {outline:2px solid var(--c-magenta);outline-offset:2px;border-radius:3px}
.tenant-select option {color:var(--c-charcoal);background:var(--c-white)}
.tenant-select-caret {position:absolute;right:11px;top:50%;transform:translateY(-50%);font-size:9px;color:var(--c-sidebar-text-faint);pointer-events:none}
/* "U+ASAP 전체 고객"(Provider scope) 선택 시, 개별 고객 테넌트 목록과 직관적으로 구분되도록
   더 굵은 폰트 굵기 + 마젠타 강조색을 적용한다. 옵션 목록 내부 항목 자체의 강조는
   <option style="font-weight/color">(JS에서 인라인 지정)로 처리하고, 이 클래스는 select가
   닫혀 있을 때(현재 선택값 표시) 보이는 텍스트에 동일한 강조를 적용한다. */
.tenant-select.tenant-select-provider {font-weight:800;color:var(--c-magenta)}
.nav-scroll {flex:1;min-height:0;overflow:auto;padding:10px 12px 24px}
/* Sidebar Visual Hierarchy (14차 개선):
   - Category label(.nav-group-label) = U+ Magenta accent, uppercase, wider letter-spacing
     → reads as a "Group Identifier" one tier above the clickable menu items.
   - Menu name(.nav-item) = neutral high-contrast Charcoal/Off-white (NOT magenta), so it never
     visually competes with the category color — Active state is the only place magenta reappears
     on menu text, keeping Active clearly distinguishable from a plain category label.
   All colors reuse EXISTING tokens (--c-magenta-dark / --c-charcoal / --c-gray-mid / --c-sidebar-*);
   no new brand color introduced, per instruction. */
.nav-group-label {font-size:11px;font-weight:700;color:var(--c-magenta-dark);letter-spacing:1.4px;padding:22px 12px 8px;text-transform:uppercase}
.nav-item {display:flex;align-items:center;gap:11px;position:relative;padding:12px 13px;margin-bottom:4px;border-radius:7px;color:var(--c-charcoal);font-weight:500;font-size:13.6px;letter-spacing:0;cursor:pointer;transition:background .15s,color .15s}
.nav-item i {width:17px;flex-shrink:0;text-align:center;font-size:14.4px;color:var(--c-gray-mid)}
.nav-item:hover {background:var(--c-sidebar-hover-bg);color:var(--c-sidebar-hover-text)}
.nav-item.active {background:var(--c-sidebar-active-bg);color:var(--c-sidebar-active-text);font-weight:700}
.nav-item.active i {color:var(--c-sidebar-active-icon)}
.nav-item.active::before {content:'';position:absolute;width:3px;height:19px;left:0;top:50%;transform:translateY(-50%);border-radius:3px;background:var(--c-magenta)}
/* nav-badge (H01–H08 등 기능 ID) — 카테고리/메뉴명보다 항상 더 약하게 보여야 하므로 계속 숨김 유지.
   숨겨진 상태 자체가 "메뉴명을 방해하지 않는다"는 요구를 충족한다. 필요 시 노출하려면 아래처럼
   Small/Muted/Low-contrast로만 표시할 것(메뉴명보다 절대 강조하지 않음): */
.nav-badge {display:none;font-size:8.4px;font-weight:500;color:var(--c-sidebar-text-faint);background:var(--c-surface-2);border-radius:4px;padding:1px 5px;margin-left:auto}
.sidebar-footer {padding:19px 24px 22px;border-top:1px solid var(--c-sidebar-border);font-size:10.4px;line-height:1.9;color:var(--c-sidebar-text-faint)}
.sidebar-footer-logo {margin-bottom:12px;color:var(--c-sidebar-text-strong)}
.sidebar-footer-logo svg {display:block;height:22px;width:auto}
.main-area {margin-left:var(--sidebar-width);flex:1;min-width:0;display:flex;flex-direction:column}
.topbar {height:60px;flex-shrink:0;background:var(--c-topbar-bg);border-bottom:1px solid var(--c-line);padding:0 30px;display:flex;align-items:center;justify-content:space-between;gap:20px;position:sticky;top:0;z-index:30;transition:background-color .2s,border-color .2s}
.topbar-location {display:flex;align-items:center;gap:15px;font-size:12.8px;min-width:0;white-space:nowrap}
.workspace-label {color:var(--c-gray-mid)}
.breadcrumb-divider {color:var(--c-line-strong)}
#current-view-name {font-weight:600;overflow:hidden;text-overflow:ellipsis;color:var(--c-charcoal)}
.topbar-right {display:flex;align-items:center;gap:17px;flex-shrink:0}
.demo-label {display:flex;align-items:center;gap:6px;font-size:9.2px;letter-spacing:.7px;color:var(--c-gray-mid);white-space:nowrap}
.topbar-icon-btn {width:32px;height:32px;display:grid;place-items:center;border:1px solid var(--c-line);border-radius:7px;background:var(--c-white);color:var(--c-gray-mid)}
.topbar-icon-btn:hover,.topbar-icon-btn[aria-pressed=true] {background:var(--c-magenta-soft);color:var(--c-magenta);border-color:var(--c-magenta-dark)}
.topbar-user {display:flex;align-items:center;gap:10px;padding-left:17px;border-left:1px solid var(--c-line)}
.topbar-user .avatar {width:33px;height:33px;border-radius:50%;background:var(--c-magenta-soft);color:var(--c-magenta-dark);display:grid;place-items:center;font-size:11.2px;font-weight:650}
.topbar-user .name {font-size:12.8px;font-weight:650;color:var(--c-charcoal)}
.topbar-user .role {font-size:10.4px;color:var(--c-gray-mid)}
.menu-toggle {display:none}
.sidebar-backdrop {display:none}
.content {padding:26px 30px 40px;width:100%;max-width:1800px;margin:0 auto}
.view {display:none}
.view.active {display:block;animation:enter-view .2s ease-out}
@keyframes enter-view {from {opacity:.5;transform:translateY(3px)} to {opacity:1;transform:none}}
/* Heading hierarchy */
.section-header {display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:19px}
.capsule-header {display:inline-flex;align-items:center;gap:8px;border-radius:999px;background:var(--c-surface-2);padding:4px 11px 4px 4px;max-width:100%}
.num-circle {width:21px;height:21px;flex-shrink:0;border-radius:50%;display:grid;place-items:center;background:var(--c-white);color:var(--c-magenta-dark);font-size:9.2px;font-weight:700}
.sub-title {font-size:10.4px;font-weight:600;color:var(--c-dark);letter-spacing:.1px}
.header-actions {display:flex;align-items:center;gap:14px}
.snapshot-date {font-size:10.4px;color:var(--c-gray);white-space:nowrap;display:flex;gap:7px;align-items:center;font-variant-numeric:tabular-nums}
.page-title-block {margin:0 0 23px}
.page-eyebrow {font-size:9.2px;font-weight:650;letter-spacing:1.7px;color:var(--c-gray-mid);display:block;margin-bottom:5px}
.page-title {margin:0 0 6px;font-size:28px;font-weight:750;letter-spacing:-.9px;display:flex;align-items:center;gap:13px;flex-wrap:wrap;line-height:1.45;color:var(--c-charcoal)}
.title-status {font-size:10.4px;font-weight:600;color:var(--c-warn);background:var(--c-warn-bg);border:1px solid var(--c-warn-border);border-radius:5px;padding:3px 7px;letter-spacing:0}
.page-desc {font-size:12.8px;line-height:1.75;color:var(--c-gray);font-weight:400;max-width:820px;margin:0}
.btn {display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:9px 13px;border:1px solid var(--c-line-strong);border-radius:7px;background:var(--c-white);color:var(--c-dark);font-size:11.2px;font-weight:600;white-space:nowrap;transition:background .15s}
.btn:hover {background:var(--c-surface-2)}
.btn-primary {background:var(--c-magenta);color:#fff;border-color:var(--c-magenta)}
.btn-primary:hover {background:var(--c-magenta-strong);border-color:var(--c-magenta-strong)}
.btn-sm {padding:6px 10px;font-size:10.4px}
/* Product status row */
.source-strip {display:flex;align-items:center;gap:17px;border:1px solid var(--c-line);border-radius:9px;background:var(--c-white);padding:11px 15px;margin-bottom:18px;flex-wrap:wrap}
.source-strip-label {font-size:11.2px;font-weight:600;color:var(--c-dark);padding-right:14px;border-right:1px solid var(--c-line);display:flex;align-items:center;gap:6px}
.source-strip-label span {font-size:8.4px;border:1px solid var(--c-line-strong);color:var(--c-gray-mid);border-radius:3px;padding:0 3px}
.source-pill {display:inline-flex;align-items:center;gap:6px;border:0;padding:2px 0;background:none;font-size:11.2px;color:var(--c-dark);font-weight:600}
.source-pill>span:last-child {color:var(--c-gray);font-size:9.2px;font-weight:400}
.source-dot {width:5px;height:5px;border-radius:50%;background:var(--c-success);display:inline-block}
.source-warning .source-dot {background:var(--c-warn)}
.source-warning>span:last-child {color:var(--c-warn)}
.source-detail {margin-left:auto;padding:2px;background:none;border:0;color:var(--c-gray);font-size:10.4px}
/* Reusable grid and panels; minmax avoids tables expanding the whole page. */
.grid {display:grid;gap:16px}
.grid-2 {grid-template-columns:repeat(2,minmax(0,1fr))}
.grid-3 {grid-template-columns:repeat(3,minmax(0,1fr))}
.grid-4 {grid-template-columns:repeat(4,minmax(0,1fr))}
.grid-6 {grid-template-columns:repeat(6,minmax(0,1fr))}
.grid>* {min-width:0}
.card {background:var(--c-white);border:1px solid var(--c-line);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:20px;min-width:0;transition:background-color .2s,border-color .2s}
.card-flat {background:var(--c-bg-warm);border:1px solid var(--c-line);border-radius:var(--radius-md);padding:16px;min-width:0}
.section-block {margin-bottom:24px}
.block-title-row {display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:15px}
.block-title {display:flex;align-items:center;gap:7px;font-size:13.6px;font-weight:700;color:var(--c-charcoal);letter-spacing:-.2px;line-height:1.55}
.fid {font-size:8.4px;font-weight:600;padding:2px 5px;background:var(--c-chip-bg);border:1px solid var(--c-chip-border);color:var(--c-magenta-dark);border-radius:4px;white-space:nowrap;letter-spacing:.2px;flex-shrink:0}
.block-sub {font-size:10.4px;line-height:1.6;font-weight:400;color:var(--c-gray);margin-top:4px}
.block-link {border:0;background:transparent;flex-shrink:0;font-size:10.4px;font-weight:550;color:var(--c-magenta-dark);cursor:pointer;padding:3px 0}
.block-link i {font-size:9.2px;margin-left:5px}
.block-link:hover {color:var(--c-magenta)}
/* KPI cards */
.kpi-card {position:relative;overflow:hidden;padding:18px 18px 15px;transition:border-color .15s}
.kpi-card:hover {border-color:var(--c-magenta-dark)}
.kpi-top {display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:8px}
.kpi-label {font-size:11.2px;font-weight:550;color:var(--c-gray)}
.kpi-icon {width:28px;height:28px;flex-shrink:0;display:grid;place-items:center;background:var(--c-surface-2);color:var(--c-dark);border-radius:7px;font-size:12.4px}
.kpi-value {font-size:35.2px;font-weight:650;letter-spacing:-1.2px;line-height:1.3;font-variant-numeric:tabular-nums;color:var(--c-charcoal)}
.kpi-unit {font-size:11.2px;font-weight:450;color:var(--c-gray);margin-left:5px}
.kpi-delta {display:inline-flex;align-items:center;gap:4px;font-size:10.4px;font-weight:500;margin-top:11px}
.kpi-delta i {font-size:8.4px}
.kpi-delta.up {color:var(--c-danger)}.kpi-delta.down {color:var(--c-success)}.kpi-delta.flat {color:var(--c-gray)}
.kpi-foot {border-top:1px solid var(--c-line);padding-top:9px;font-size:9.2px;color:var(--c-gray);margin-top:10px;line-height:1.6;overflow-wrap:anywhere}
#kpi-overview .kpi-card:first-child {border-color:var(--c-kpi-tint-border);background:var(--c-kpi-tint-bg)}
#kpi-overview .kpi-card:first-child .kpi-value {color:var(--c-magenta-dark)}
#kpi-overview .kpi-card:first-child .kpi-icon {background:var(--c-kpi-tint-bg2);color:var(--c-magenta-dark)}
#kpi-overview .kpi-card:nth-child(2) .kpi-icon {background:var(--c-danger-tint-bg);color:var(--c-danger)}
/* Tables and status */
.table-wrap {max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin}
.data-table {width:100%;border-collapse:collapse;font-size:11.2px}
.data-table th {text-align:left;font-size:10.4px;font-weight:500;color:var(--c-gray);background:var(--c-surface-2);border-bottom:1px solid var(--c-line);padding:10px 12px;white-space:nowrap;letter-spacing:.1px}
.data-table th:first-child {border-radius:5px 0 0 5px}
.data-table th:last-child {border-radius:0 5px 5px 0}
.data-table td {padding:13px 12px;white-space:nowrap;border-bottom:1px solid var(--c-line);color:var(--c-dark);font-variant-numeric:tabular-nums}
.data-table tr:last-child td {border-bottom:0}
.data-table tbody tr:hover {background:var(--c-surface-2)}
.cell-strong {font-weight:650;color:var(--c-charcoal)}
.cell-muted {font-size:11.2px;color:var(--c-gray)}
.mono {font-family:'SFMono-Regular',Consolas,monospace;font-size:10.4px;letter-spacing:-.2px}
.badge {display:inline-flex;align-items:center;gap:4px;padding:3px 7px;border-radius:4px;font-size:9.2px;font-weight:500;white-space:nowrap;line-height:1.5}
.badge-critical {background:var(--c-danger-bg);color:var(--c-danger)}
.badge-high {background:var(--c-high-bg);color:var(--c-high)}
.badge-medium {background:var(--c-warn-bg);color:var(--c-warn)}
.badge-low {background:var(--c-success-bg);color:var(--c-success)}
.badge-info {background:var(--c-info-bg);color:var(--c-info)}
.badge-neutral {background:var(--c-gray-lighter);color:var(--c-gray)}
.badge-magenta {background:var(--c-magenta-soft);color:var(--c-magenta-dark)}
.badge-dark {background:var(--c-surface-3);color:var(--c-charcoal)}
.badge-outline {background:var(--c-white);border:1px solid var(--c-line);color:var(--c-gray)}
.dot-ind {display:inline-block;width:5px;height:5px;flex-shrink:0;border-radius:50%}
.dot-critical {background:var(--c-danger)}.dot-high {background:var(--c-high)}.dot-medium {background:var(--c-warn)}.dot-low {background:var(--c-success)}.dot-info {background:var(--c-info)}.dot-gray {background:var(--c-gray-mid)}
.pbar {height:5px;border-radius:4px;background:var(--c-line);width:100%;overflow:hidden}
.pbar>span {display:block;height:100%;border-radius:4px;background:var(--c-pbar-fill)}
#posture-domains>div {margin-bottom:13px!important}
#posture-domains>div:last-child {margin-bottom:0!important}
#posture-domains .cell-muted {font-size:9.2px}
#posture-domains .pbar {height:4px}
.chart-box {position:relative;width:100%;min-width:0}
.chart-box canvas {max-width:100%}
.empty-note {font-size:9.2px;color:var(--c-gray-mid);padding:10px 0 0;line-height:1.7;font-style:normal}
.coverage-row {display:flex;align-items:center;gap:10px;font-size:11.2px;color:var(--c-gray)}
.coverage-row .pbar {width:110px;flex:1}
/* Evidence and timelines */
.timeline {position:relative;padding-left:24px}
.timeline::before {content:'';position:absolute;left:5px;top:6px;bottom:19px;width:1px;background:var(--c-line-strong)}
.tl-item {position:relative;padding-bottom:22px}
.tl-item::before {content:'';position:absolute;left:-23px;top:4px;width:9px;height:9px;background:var(--c-white);border:2px solid var(--c-magenta-dark);border-radius:50%}
.tl-item.tl-muted::before {border-color:var(--c-line-strong)}
.tl-time {font-size:10.4px;color:var(--c-gray-mid);font-variant-numeric:tabular-nums}
.tl-title {font-size:12.4px;font-weight:650;margin:3px 0;color:var(--c-charcoal)}
.tl-desc {font-size:11.2px;color:var(--c-gray)}
.evi-chip {display:inline-flex;align-items:center;gap:5px;background:var(--c-white);border:1px solid var(--c-line-strong);border-radius:4px;padding:3px 6px;font-size:9.2px;color:var(--c-gray);font-weight:400;margin:3px 4px 0 0}
.evi-chip i {font-size:8.4px;color:var(--c-gray-mid)}
#ai-briefing-list .card-flat {background:var(--c-white);position:relative;padding-left:22px}
#ai-briefing-list .card-flat::before {content:'';position:absolute;left:0;top:20px;width:3px;height:25px;border-radius:0 3px 3px 0;background:var(--c-magenta)}
/* Summary bar is an intentional fixed dark/magenta highlight per brand spec — stays dark in both themes for contrast/emphasis. */
.summary-bar {background:#1c1526;color:#fff;display:flex;align-items:center;gap:16px;border-radius:10px;padding:20px 22px;margin-top:8px}
.summary-bar.magenta {background:linear-gradient(135deg,#1c1526,#3a1030)}
.summary-bar .icon {width:36px;height:36px;flex-shrink:0;display:grid;place-items:center;border-radius:8px;background:#47234a;color:#ff8fcf;font-size:15.6px}
.txt-title {font-size:12.4px;font-weight:600;margin-bottom:4px}
.txt-desc {font-size:10.4px;color:#c7c3d1}
.tag-list {display:flex;gap:6px;flex-wrap:wrap}
.tag {display:inline-block;background:var(--c-tag-bg);border-radius:4px;padding:3px 6px;font-size:10.4px;font-weight:450;color:var(--c-tag-text)}
.stage-pill {font-size:9.2px;padding:2px 6px;border-radius:4px;font-weight:600}
.stage-p1 {background:var(--c-success-bg);color:var(--c-success)}.stage-p2 {background:var(--c-info-bg);color:var(--c-info)}.stage-p3 {background:var(--c-warn-bg);color:var(--c-warn)}.stage-p4 {background:var(--c-danger-bg);color:var(--c-danger)}
.col-span-2 {grid-column:span 2}.col-span-3 {grid-column:span 3}.col-span-4 {grid-column:span 4}
.flex-between {display:flex;align-items:center;justify-content:space-between;gap:10px}
.legend-dot-row {display:flex;align-items:center;gap:6px;font-size:11.2px;color:var(--c-gray);margin-right:14px}
/* Theme toggle: icon reflects the theme currently ACTIVE (sun = light active, moon = dark active) */
.theme-toggle {position:relative}
.theme-toggle .fa-sun {display:inline}
.theme-toggle .fa-moon {display:none}
html[data-theme="dark"] .theme-toggle .fa-sun {display:none}
html[data-theme="dark"] .theme-toggle .fa-moon {display:inline}
/* Density toggle: icon reflects the mode currently ACTIVE (list = full view,
   bolt = "크리티컬 요약 보기" active) so the button state is self-explanatory
   without relying on the tooltip alone. */
.density-toggle .fa-list {display:inline}
.density-toggle .fa-bolt {display:none}
.density-toggle[aria-pressed="true"] .fa-list {display:none}
.density-toggle[aria-pressed="true"] .fa-bolt {display:inline}
.density-toggle[aria-pressed="true"] {background:var(--c-magenta-soft);color:var(--c-magenta-dark);border-color:var(--c-magenta-dark)}
/* Copilot */
.chat-shell {display:flex;flex-direction:column;height:640px}
.chat-window {flex:1;min-height:150px;overflow:auto;display:flex;flex-direction:column;gap:15px;padding:10px 3px}
.msg {max-width:85%;padding:16px 18px;border-radius:12px;font-size:12.4px;line-height:1.8;overflow-wrap:anywhere}
/* Question (user) vs answer (bot) are intentionally colored differently so the two roles
   are distinguishable at a glance: user = magenta brand-tint bubble, bot = neutral white/gray card. */
.msg-user {align-self:flex-end;background:var(--c-magenta-soft);color:var(--c-magenta-dark);border:1px solid var(--c-magenta-soft2);border-bottom-right-radius:3px}
.msg-bot {align-self:flex-start;background:var(--c-white);border:1px solid var(--c-line);border-bottom-left-radius:3px;color:var(--c-charcoal)}
.msg-meta {display:flex;gap:8px;flex-wrap:wrap;font-size:9.2px;color:var(--c-gray);margin-top:10px}
.chat-suggest {display:flex;gap:7px;flex-wrap:wrap;margin:12px 0 5px}
.chip-suggest {border:1px solid var(--c-line);background:var(--c-white);border-radius:6px;padding:7px 10px;font-size:10.4px;cursor:pointer;color:var(--c-dark)}
.chip-suggest:hover {background:var(--c-magenta-soft);border-color:var(--c-magenta-dark);color:var(--c-magenta-dark)}
.chat-input-row {display:flex;gap:10px;margin-top:12px}
.chat-input-row input {flex:1;min-width:0;border:1px solid var(--c-line-strong);border-radius:8px;padding:12px 14px;font-size:12.4px;background:var(--c-input-bg);color:var(--c-charcoal)}
.send-btn {width:42px;height:42px;flex-shrink:0;border-radius:8px;background:var(--c-magenta);border:0;color:#fff;display:grid;place-items:center}
.subnav-tabs {display:flex;gap:6px;margin-bottom:18px;border-bottom:1px solid var(--c-line)}
.subnav-tab {padding:10px 4px;margin-right:18px;font-size:12.4px;color:var(--c-gray-mid);border-bottom:2px solid transparent;cursor:pointer}
.subnav-tab.active {color:var(--c-charcoal);border-bottom-color:var(--c-magenta)}
/* Data Density Toggle ("크리티컬 요약 보기") — actually removes low-value content
   from view (not just tighter padding): explanatory/descriptive text that doesn't
   change minute-to-minute is hidden outright, and non-urgent table rows/cards are
   collapsed by js/density.js (see .density-more-btn below). Combined, this reduces
   the amount of on-screen text well beyond simple spacing changes. */
body.compact .card {padding:14px}
body.compact .section-block {margin-bottom:16px}
body.compact .data-table td {padding:9px 11px}
body.compact .kpi-card {padding:15px}
body.compact .kpi-card {padding-bottom:12px}
body.compact .page-desc,
body.compact .block-sub,
body.compact .empty-note,
body.compact .kpi-foot,
body.compact .detail-link-hint,
body.compact .source-strip-label span,
body.compact .txt-desc,
body.compact .tl-item.tl-muted,
body.compact .cell-muted:not(td):not(.detail-kv-label) {display:none}
body.compact .kpi-value {font-size:29.6px}
body.compact .summary-bar .txt-desc {display:none}
/* "+N건 더보기" toggle rows/blocks injected by js/density.js when compact mode
   collapses non-urgent (정상/낮은 우선순위) rows or cards. */
.density-more-row td {padding:10px 12px!important}
.density-more-btn {display:block;width:100%;text-align:center;border:1px dashed var(--c-line-strong);background:var(--c-bg-warm);color:var(--c-magenta-dark);font-size:11.2px;font-weight:650;padding:9px;border-radius:7px;margin-top:8px}
.density-more-btn:hover {background:var(--c-magenta-soft);border-color:var(--c-magenta-dark)}
.density-more-row .density-more-btn {margin-top:0;border-radius:5px}
@media (min-width:1500px) {.content {padding:30px 40px}.topbar {padding:0 40px}.page-title {font-size:31.2px}.card {padding:23px}.kpi-card {padding:22px}.kpi-value {font-size:39.2px}}
@media (max-width:1200px) {
 .topbar {padding:0 22px}.content {padding:23px 22px 35px}.source-strip {gap:13px}
 .grid-3 {grid-template-columns:repeat(2,minmax(0,1fr))}
 .grid-6 {grid-template-columns:repeat(3,minmax(0,1fr))}
 .kpi-card {padding:15px}.kpi-value {font-size:31.2px}.kpi-unit {font-size:10.4px}
 .demo-label {display:none}.snapshot-date {font-size:9.2px}
}
@media (max-width:980px) {
 .sidebar {transform:translateX(-100%);transition:transform .2s}
 .sidebar.open {transform:translateX(0)}
 .main-area {margin-left:0}
 .menu-toggle {display:grid;place-items:center;width:32px;height:32px;border:1px solid var(--c-line);border-radius:6px;background:var(--c-white);color:var(--c-dark)}
 .sidebar-backdrop:not([hidden]) {display:block;position:fixed;inset:0;background:#11182766;z-index:45;border:0;cursor:default}
 .sidebar:not(.open) {visibility:hidden}
 .sidebar.open {visibility:visible}
 body.nav-open {overflow:hidden}
}
@media (max-width:700px) {
 .content {padding:20px 16px 28px}.topbar {height:61px;padding:0 16px;gap:8px}
 .workspace-label,.breadcrumb-divider {display:none}.topbar-location {gap:10px;font-size:11.2px}
 .topbar-right {gap:10px}.topbar-user {padding-left:10px}.topbar-user>div:last-child {display:none}
 .section-header {align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:18px}
 .header-actions {width:100%;justify-content:space-between}.snapshot-date {font-size:10.4px}
 .page-title {font-size:26.4px;gap:9px}.page-title-block {margin-bottom:19px}.page-desc {font-size:12.4px}
 .source-strip {padding:12px;gap:10px 16px}.source-strip-label {width:100%;border:0;padding:0;margin-bottom:2px}.source-detail {display:none}
 .source-pill {width:calc(50% - 8px);font-size:11.2px}
 .grid {gap:12px}.grid-2,.grid-3 {grid-template-columns:minmax(0,1fr)}
 .grid-4,.grid-6 {grid-template-columns:repeat(2,minmax(0,1fr))}
 .card {padding:17px}.kpi-card {padding:13px}.kpi-value {font-size:32px}.kpi-top {align-items:flex-start}
 .kpi-label {font-size:11.2px}.kpi-icon {width:24px;height:24px;font-size:10.4px}.kpi-foot {font-size:9.2px}.kpi-delta {font-size:9.2px}
 .section-block {margin-bottom:23px}.block-title-row {flex-wrap:wrap;margin-bottom:13px}.block-title {font-size:13.6px}
 .block-sub {font-size:10.4px}.badge {font-size:9.2px}.summary-bar {padding:18px;align-items:flex-start;gap:12px}
 .txt-title {font-size:12.4px;line-height:1.7}.txt-desc {line-height:1.8}
 .flex-between {flex-wrap:wrap}.col-span-2,.col-span-3,.col-span-4 {grid-column:auto}
 .chat-shell {height:auto;min-height:650px}.chat-window {max-height:480px}.msg {max-width:96%}
 .chat-input-row input {font-size:16.4px}.chat-suggest {max-height:155px;overflow:auto}
 #risk-user-list .card-flat>div {flex-wrap:wrap}
 #network-impact .grid-3 {grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (prefers-reduced-motion:reduce) {* {animation:none!important;transition:none!important;scroll-behavior:auto!important}}

/* ==========================================================================
   Detail Drawer — shared "click any KPI/insight to see the breakdown" panel.
   Opens as a right-side sheet so users keep visual context with the dashboard
   underneath; the breakdown numbers are built to reconcile to the summary value.
   ========================================================================== */
.detail-backdrop {position:fixed;inset:0;z-index:90;background:#11182766;border:0;cursor:default;padding:0}
.detail-drawer {position:fixed;top:0;right:0;bottom:0;z-index:95;width:480px;max-width:92vw;background:var(--c-white);border-left:1px solid var(--c-line);box-shadow:-14px 0 34px rgba(20,16,30,.16);display:flex;flex-direction:column;transform:translateX(0);transition:background-color .2s,border-color .2s}
.detail-drawer[hidden],.detail-backdrop[hidden] {display:none}
.detail-drawer-head {display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:22px 22px 16px;border-bottom:1px solid var(--c-line);flex-shrink:0}
.detail-eyebrow {font-size:9.2px;font-weight:650;letter-spacing:1.3px;color:var(--c-magenta-dark);text-transform:uppercase;margin-bottom:5px}
.detail-title {margin:0 0 6px;font-size:18.4px;font-weight:750;letter-spacing:-.4px;color:var(--c-charcoal);line-height:1.4}
.detail-subtitle {font-size:11.6px;color:var(--c-gray);line-height:1.6}
.detail-close {width:30px;height:30px;flex-shrink:0;display:grid;place-items:center;border:1px solid var(--c-line);border-radius:7px;background:var(--c-white);color:var(--c-gray-mid)}
.detail-close:hover {background:var(--c-surface-2);color:var(--c-charcoal)}
.detail-drawer-body {flex:1;overflow:auto;padding:20px 22px 30px}
/* Formula banner: shows how the summary number is derived from the rows below it. */
.detail-formula {display:flex;align-items:center;gap:10px;background:var(--c-magenta-soft);border:1px solid var(--c-magenta-soft2);border-radius:9px;padding:13px 15px;margin-bottom:18px;font-size:12px;color:var(--c-magenta-dark);font-weight:600;line-height:1.7}
.detail-formula i {flex-shrink:0;font-size:14px}
.detail-section {margin-bottom:20px}
.detail-section:last-child {margin-bottom:0}
.detail-section-label {font-size:10.4px;font-weight:650;color:var(--c-gray-mid);letter-spacing:.5px;text-transform:uppercase;margin-bottom:10px}
.detail-row {display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 0;border-bottom:1px solid var(--c-line)}
.detail-row:last-child {border-bottom:0}
.detail-row-main {min-width:0}
.detail-row-title {font-size:12.8px;font-weight:650;color:var(--c-charcoal)}
.detail-row-sub {font-size:10.8px;color:var(--c-gray);margin-top:2px;line-height:1.6}
.detail-row-value {flex-shrink:0;text-align:right;font-weight:800;font-size:15.2px;color:var(--c-magenta-dark);font-variant-numeric:tabular-nums}
.detail-row-value small {display:block;font-size:9.6px;font-weight:500;color:var(--c-gray-mid);margin-top:1px}
.detail-kv-grid {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.detail-kv {background:var(--c-bg-warm);border:1px solid var(--c-line);border-radius:9px;padding:12px 13px}
.detail-kv-label {font-size:10px;color:var(--c-gray);margin-bottom:5px}
.detail-kv-value {font-size:16.8px;font-weight:750;color:var(--c-charcoal);font-variant-numeric:tabular-nums}
.detail-note {font-size:10.8px;color:var(--c-gray);line-height:1.75;background:var(--c-bg-warm);border:1px solid var(--c-line);border-radius:8px;padding:11px 13px;margin-top:6px}
.detail-evidence {display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
/* Clickable dashboard elements: subtle affordance so users discover the drill-down. */
[data-dtype] {cursor:pointer;transition:background-color .12s,box-shadow .12s}
.kpi-card[data-dtype]:hover {box-shadow:0 0 0 2px var(--c-magenta-dark) inset}
.data-table tbody tr[data-dtype]:hover {background:var(--c-magenta-soft)}
div[data-dtype]:hover {background:var(--c-magenta-soft)}
.card-flat[data-dtype]:hover {background:var(--c-white);box-shadow:0 0 0 1.5px var(--c-magenta-dark) inset}
#posture-domains>div[data-dtype] {cursor:pointer;border-radius:8px;padding:8px;margin:0 -8px 8px!important}
#posture-domains>div[data-dtype]:hover {background:var(--c-magenta-soft)}
.detail-row[data-dtype]:hover {background:var(--c-magenta-soft);cursor:pointer;margin:0 -22px;padding:11px 22px;border-radius:6px}
.detail-link-hint {font-size:9.2px;color:var(--c-gray-mid);display:inline-flex;align-items:center;gap:4px;margin-left:6px}
.kpi-card[data-dtype] {padding-bottom:15px}
.kpi-card[data-dtype] .kpi-foot::after {content:'상세 보기 →';display:block;margin-top:5px;color:var(--c-magenta-dark);font-weight:650}
@media (max-width:700px) {
 .detail-drawer {width:100vw;max-width:100vw}
 .detail-kv-grid {grid-template-columns:1fr}
}
body.detail-open {overflow:hidden}

/* ==========================================================================
   Provider Console (P01–P10) — scope switching, nav groups, breadcrumb,
   period filter, risk distribution bars, threat cards, service health rows.
   Dashboard Scope is toggled via [data-scope="provider"] on <html>
   (set before first paint by the inline FOUC-avoidance script in <head>).
   ========================================================================== */
/* Nav group visibility follows the active scope: Customer Portal nav items
   are hidden while in Provider scope, and vice versa. */
html:not([data-scope="provider"]) .nav-provider {display:none}
html[data-scope="provider"] .nav-customer {display:none}
.nav-group-label {display:flex;align-items:center;justify-content:space-between}
/* Provider console badge chips (P01, P02–P03, ...) reuse the same visual
   language as the Customer Portal's H/U/A/D/I/N/O badges (.nav-badge is
   hidden by default site-wide; kept consistent, no new visual language). */
/* Scope indicator dot: success-green = Customer tenant, magenta = Provider. */
#scope-dot {background:var(--c-success)}
html[data-scope="provider"] #scope-dot {background:var(--c-magenta)}
/* Provider view panels: same `.view` container, but internally split into
   named panels toggled by the Provider nav item's `data-panel` attribute
   (js/interface.js) — only one panel is visible at a time. */
.provider-panel {display:none}
.provider-panel.active {display:block;animation:enter-view .2s ease-out}
/* Period filter (24H/7D/30D) — P06 Global Security Trend */
.period-filter {display:inline-flex;gap:4px;background:var(--c-surface-2);border-radius:8px;padding:3px;flex-shrink:0}
.period-btn {border:0;background:transparent;padding:6px 12px;border-radius:6px;font-size:10.8px;font-weight:600;color:var(--c-gray-mid);cursor:pointer;transition:background .15s,color .15s}
.period-btn:hover {color:var(--c-charcoal)}
.period-btn.active {background:var(--c-white);color:var(--c-magenta-dark);box-shadow:0 1px 2px rgba(20,16,30,.08)}
/* P03 Customer Risk Distribution — horizontal bar rows, clickable to filter */
.risk-dist-row {display:flex;align-items:center;gap:10px;padding:9px 0;cursor:pointer;border-radius:6px;transition:background .12s}
.risk-dist-row:hover {background:var(--c-surface-2)}
.risk-dist-row.active {background:var(--c-magenta-soft)}
.risk-dist-label {width:64px;flex-shrink:0;font-size:11.6px;font-weight:650}
.risk-dist-bar-wrap {flex:1;min-width:0;height:9px;border-radius:5px;background:var(--c-surface-3);overflow:hidden}
.risk-dist-bar {display:block;height:100%;border-radius:5px}
.risk-dist-count {width:34px;flex-shrink:0;text-align:right;font-weight:700;font-size:12.4px;font-variant-numeric:tabular-nums}
/* P04 Cross-Tenant Threat Intelligence cards */
.threat-card {background:var(--c-bg-warm);border:1px solid var(--c-line);border-radius:var(--radius-md);padding:14px 16px;margin-bottom:10px;cursor:pointer;transition:border-color .15s}
.threat-card:hover {border-color:var(--c-magenta-dark)}
.threat-card:last-child {margin-bottom:0}
.threat-card-top {display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:6px}
.threat-card-title {font-size:12.4px;font-weight:700;color:var(--c-charcoal);line-height:1.5}
.threat-card-meta {display:flex;flex-wrap:wrap;gap:10px;font-size:10.4px;color:var(--c-gray);margin-top:6px}
.threat-trend-up {color:var(--c-danger);font-weight:650}
/* P05 Service Health rows */
.svc-health-row {display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0;border-bottom:1px solid var(--c-line)}
.svc-health-row:last-child {border-bottom:0}
.svc-health-name {font-size:12px;font-weight:650;color:var(--c-charcoal)}
.svc-health-count {font-size:11.2px;color:var(--c-gray);font-variant-numeric:tabular-nums}
#provider-ai-briefing .card-flat {background:var(--c-white);position:relative;padding-left:22px}
#provider-ai-briefing .card-flat::before {content:'';position:absolute;left:0;top:20px;width:3px;height:25px;border-radius:0 3px 3px 0;background:var(--c-magenta)}
.data-table tbody tr[data-goto-tenant] {cursor:pointer}
@media (max-width:700px) {
 .period-filter {padding:2px}
 .period-btn {padding:5px 9px;font-size:9.6px}
 .provider-breadcrumb-link,#provider-breadcrumb-link,#provider-breadcrumb-divider {display:none}
}

/* ==========================================================================
   Incremental Update — Decision Queue, Trust Status, Policy Center, Registry,
   Reports, Capability matrix cells, Detail Drawer Graph Tab. Reuses existing
   tokens/components (.card, .card-flat, .badge-*, .data-table, .tag) — no new
   color palette, just a few structural helper classes.
   ========================================================================== */
.decision-status-recommended {background:var(--c-info-bg);color:var(--c-info)}
.decision-status-pending_approval {background:var(--c-warn-bg);color:var(--c-warn)}
.decision-status-approved {background:var(--c-info-bg);color:var(--c-info)}
.decision-status-executing {background:var(--c-magenta-soft);color:var(--c-magenta-dark)}
.decision-status-verifying {background:var(--c-magenta-soft);color:var(--c-magenta-dark)}
.decision-status-completed {background:var(--c-success-bg);color:var(--c-success)}
.decision-status-failed {background:var(--c-danger-bg);color:var(--c-danger)}
.trust-component-row {display:flex;align-items:center;gap:10px;padding:7px 0}
.trust-component-label {width:150px;flex-shrink:0;font-size:11.6px;color:var(--c-dark);font-weight:550}
.trust-component-score {width:34px;flex-shrink:0;text-align:right;font-weight:700;font-size:11.6px}
.capability-cell {display:flex;flex-direction:column;gap:2px;line-height:1.4}
.capability-cell-provider {font-size:10.4px;font-weight:650;color:var(--c-charcoal)}
.capability-cell-status {font-size:9.6px}
.capability-cell-status.is-active {color:var(--c-success)}
.capability-cell-status.is-inactive {color:var(--c-gray-mid)}
.opportunity-card {background:var(--c-bg-warm);border:1px solid var(--c-line);border-radius:var(--radius-md);padding:14px 16px;margin-bottom:10px}
.opportunity-card:last-child {margin-bottom:0}
.opportunity-gap-tag {display:inline-block;background:var(--c-magenta-soft);color:var(--c-magenta-dark);border-radius:4px;padding:3px 7px;font-size:10px;font-weight:600;margin:2px 4px 0 0}
.roadmap-planned {color:var(--c-gray-mid);font-style:normal}
.report-card {display:flex;flex-direction:column;gap:10px}
.report-card .btn {align-self:flex-start}
/* Detail Drawer Graph Tab */
.detail-tabs {display:flex;gap:4px;padding:0 22px;border-bottom:1px solid var(--c-line);flex-shrink:0}
.detail-tabs[hidden] {display:none}
.detail-tab {border:0;background:transparent;padding:11px 4px;margin-right:16px;font-size:11.6px;font-weight:600;color:var(--c-gray-mid);border-bottom:2px solid transparent;cursor:pointer}
.detail-tab.active {color:var(--c-charcoal);border-bottom-color:var(--c-magenta)}
.graph-node-group {margin-bottom:14px}
.graph-node-root {font-weight:800;font-size:14px;color:var(--c-charcoal);margin-bottom:10px;display:flex;align-items:center;gap:8px}
.graph-node-list {display:flex;flex-wrap:wrap;gap:8px}
.graph-node {display:inline-flex;align-items:center;gap:6px;background:var(--c-bg-warm);border:1px solid var(--c-line);border-radius:8px;padding:8px 12px;font-size:11.6px;font-weight:600;color:var(--c-dark);cursor:pointer;transition:border-color .15s}
.graph-node:hover {border-color:var(--c-magenta-dark);color:var(--c-magenta-dark)}
.copilot-action-cta {display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--c-magenta-soft);border:1px solid var(--c-magenta-soft2);border-radius:9px;padding:11px 13px;margin-top:10px}
.copilot-action-cta button {flex-shrink:0}
.registry-provider-list {margin-top:4px}
.registry-provider-list .tag {margin:2px 4px 2px 0}
/* Registry rows and Policy Posture rows become clickable Detail Drawer triggers,
   reusing the existing [data-dtype] hover affordance defined above. */
#tbl-registry tbody tr[data-dtype],
#tbl-policy-posture tbody tr[data-dtype] {cursor:pointer}

/* ==========================================================================
   Reports Center — dedicated detail MODAL (not a Detail Drawer, not a view
   navigation). Opens as a centered overlay so it feels like a distinct
   "report window" the user can review and print, separate from the live
   dashboard views. Reuses existing tokens only (no new color palette).
   ========================================================================== */
.report-modal-backdrop {position:fixed;inset:0;z-index:110;background:#11182780;border:0;cursor:default;padding:0}
.report-modal-backdrop[hidden] {display:none}
.report-modal {position:fixed;top:4vh;left:50%;transform:translateX(-50%);z-index:115;width:min(920px,92vw);max-height:92vh;background:var(--c-white);border:1px solid var(--c-line);border-radius:var(--radius-lg);box-shadow:0 24px 60px rgba(20,16,30,.28);display:flex;flex-direction:column;overflow:hidden}
.report-modal[hidden] {display:none}
.report-modal-head {display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:22px 26px;border-bottom:1px solid var(--c-line);flex-shrink:0}
.report-modal-eyebrow {font-size:9.6px;font-weight:650;letter-spacing:1.3px;color:var(--c-magenta-dark);text-transform:uppercase;margin-bottom:6px}
.report-modal-title {margin:0 0 6px;font-size:20px;font-weight:750;letter-spacing:-.4px;color:var(--c-charcoal)}
.report-modal-subtitle {font-size:11.6px;color:var(--c-gray);line-height:1.6}
.report-modal-actions {display:flex;align-items:center;gap:8px;flex-shrink:0}
.report-modal-close {width:32px;height:32px;flex-shrink:0;display:grid;place-items:center;border:1px solid var(--c-line);border-radius:7px;background:var(--c-white);color:var(--c-gray-mid)}
.report-modal-close:hover {background:var(--c-surface-2);color:var(--c-charcoal)}
.report-modal-body {flex:1;overflow:auto;padding:24px 26px 30px}
.report-modal-body .detail-kv-grid {grid-template-columns:repeat(3,minmax(0,1fr))}
.report-section-title {font-size:11.2px;font-weight:700;color:var(--c-charcoal);letter-spacing:.2px;margin:22px 0 10px}
.report-section-title:first-child {margin-top:0}
body.report-open {overflow:hidden}
@media (max-width:700px) {
 .report-modal {top:0;left:0;transform:none;width:100vw;max-width:100vw;height:100vh;max-height:100vh;border-radius:0}
 .report-modal-body .detail-kv-grid {grid-template-columns:1fr 1fr}
}
@media print {
 body>*:not(.report-modal) {display:none!important}
 .report-modal {position:static;box-shadow:none;border:0;width:100%;max-width:100%;max-height:none}
 .report-modal-actions {display:none}
}

/* ==========================================================================
   Digital Experience Management (DEM) 고도화 — Site×App Matrix, End-to-End
   Path, Root Cause/Change/Blast Radius/Action 패널 등. 기존 토큰(.card,
   .card-flat, .badge-*, --c-success/--c-warn/--c-danger/--c-magenta 등)만
   재사용하며 새로운 색상 팔레트는 추가하지 않습니다. 상태 의미:
   정상=Green(--c-success) 주의=Amber(--c-warn) 위험=Red(--c-danger)
   미측정=Gray(--c-gray-mid) U+ASAP 강조=Magenta(--c-magenta).
   ========================================================================== */
/* Row1 Executive KPI + Attribution Bar */
.dem-attribution-bar {display:flex; align-items:center; gap:0; height:26px; border-radius:6px; overflow:hidden; background:var(--c-surface-2)}
.dem-attribution-seg {height:100%; display:flex; align-items:center; justify-content:center; font-size:9.6px; font-weight:700; color:#fff; white-space:nowrap; overflow:hidden}
.dem-attribution-legend {display:flex; flex-wrap:wrap; gap:14px; margin-top:10px; font-size:10.8px; color:var(--c-gray)}
.dem-attribution-legend .dot {width:8px; height:8px; border-radius:2px; display:inline-block; margin-right:5px; vertical-align:-1px}

/* Row3 Site × Application Experience Matrix */
.dem-matrix-wrap {overflow-x:auto}
.dem-matrix {border-collapse:separate; border-spacing:6px; width:100%}
.dem-matrix th {font-size:10.4px; font-weight:650; color:var(--c-gray); text-align:center; padding:4px 6px; white-space:nowrap}
.dem-matrix th:first-child {text-align:left}
.dem-matrix td.dem-matrix-sitelabel {font-size:11.6px; font-weight:700; color:var(--c-charcoal); white-space:nowrap; padding-right:10px}
.dem-matrix-cell {width:78px; height:52px; border-radius:8px; display:flex; flex-direction:column; align-items:center; justify-content:center; cursor:pointer; transition:transform .1s, box-shadow .1s; font-variant-numeric:tabular-nums}
.dem-matrix-cell:hover {transform:translateY(-1px); box-shadow:0 3px 10px rgba(20,16,30,.16)}
.dem-matrix-cell.selected {box-shadow:0 0 0 2.5px var(--c-charcoal) inset}
.dem-matrix-cell .score {font-size:15.2px; font-weight:800; line-height:1.2}
.dem-matrix-cell .label {font-size:8.4px; font-weight:650; margin-top:1px; letter-spacing:.2px}
.dem-cell-good {background:var(--c-success-bg); color:var(--c-success)}
.dem-cell-fair {background:var(--c-warn-bg); color:var(--c-warn)}
.dem-cell-poor {background:var(--c-danger-bg); color:var(--c-danger)}
.dem-cell-critical {background:var(--c-danger); color:#fff}
.dem-cell-unmeasured {background:var(--c-gray-lighter); color:var(--c-gray-mid)}
.dem-matrix-hint {font-size:10.4px; color:var(--c-gray-mid); margin-top:10px}

/* Row4 End-to-End Experience Path (flow diagram) */
.dem-path-flow {display:flex; align-items:stretch; gap:0; overflow-x:auto; padding:6px 0 10px}
.dem-path-seg {flex-shrink:0; width:132px; border-radius:10px; padding:12px 10px; cursor:pointer; border:1.5px solid var(--c-line); background:var(--c-bg-warm); transition:border-color .12s, box-shadow .12s}
.dem-path-seg:hover {box-shadow:0 3px 10px rgba(20,16,30,.12)}
.dem-path-seg.selected {box-shadow:0 0 0 2px var(--c-charcoal) inset}
.dem-path-seg .seg-icon {width:26px; height:26px; border-radius:7px; display:grid; place-items:center; font-size:11.6px; margin-bottom:8px}
.dem-path-seg .seg-name {font-size:10.8px; font-weight:700; color:var(--c-charcoal); white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.dem-path-seg .seg-score {font-size:19.2px; font-weight:800; margin-top:4px; font-variant-numeric:tabular-nums}
.dem-path-seg .seg-status {font-size:9.2px; font-weight:650; margin-top:1px}
.dem-path-seg .seg-metric {font-size:9.2px; color:var(--c-gray); margin-top:6px; line-height:1.6}
.dem-path-seg.dem-seg-good {border-color:var(--c-line)}
.dem-path-seg.dem-seg-good .seg-icon {background:var(--c-success-bg); color:var(--c-success)}
.dem-path-seg.dem-seg-good .seg-score {color:var(--c-success)}
.dem-path-seg.dem-seg-fair .seg-icon {background:var(--c-warn-bg); color:var(--c-warn)}
.dem-path-seg.dem-seg-fair .seg-score {color:var(--c-warn)}
.dem-path-seg.dem-seg-fair {border-color:var(--c-warn-border)}
.dem-path-seg.dem-seg-poor .seg-icon {background:var(--c-danger-bg); color:var(--c-danger)}
.dem-path-seg.dem-seg-poor .seg-score {color:var(--c-danger)}
.dem-path-seg.dem-seg-poor {border-color:var(--c-danger); background:var(--c-danger-bg)}
.dem-path-arrow {flex-shrink:0; width:22px; display:flex; align-items:center; justify-content:center; color:var(--c-line-strong); font-size:12px}
.dem-path-deviation {margin-top:20px}
.dem-path-deviation-card {display:inline-flex; flex-direction:column; gap:2px; background:var(--c-danger-bg); border:1px solid var(--c-danger); border-radius:8px; padding:10px 13px; margin:0 10px 10px 0}
.dem-path-deviation-card .dev-title {font-size:11.6px; font-weight:800; color:var(--c-danger)}
.dem-path-deviation-card .dev-line {font-size:10.4px; color:var(--c-dark)}

/* Confidence / Cause Badges — 반드시 Correlation ≠ Root Cause 구분 유지 */
.dem-cause-badge {display:inline-flex; align-items:center; gap:4px; padding:3px 8px; border-radius:4px; font-size:9.2px; font-weight:700; white-space:nowrap}
.dem-cause-possible {background:var(--c-gray-lighter); color:var(--c-gray)}
.dem-cause-likely {background:var(--c-warn-bg); color:var(--c-warn)}
.dem-cause-confirmed {background:var(--c-danger-bg); color:var(--c-danger)}
.dem-confidence-badge {display:inline-flex; align-items:center; gap:5px; padding:4px 9px; border-radius:5px; font-size:10.4px; font-weight:700}
.dem-confidence-low {background:var(--c-gray-lighter); color:var(--c-gray)}
.dem-confidence-medium {background:var(--c-warn-bg); color:var(--c-warn)}
.dem-confidence-high {background:var(--c-magenta-soft); color:var(--c-magenta-dark)}

/* Row5 Root Cause / Transaction Breakdown / Business Impact */
.dem-rootcause-row {display:flex; align-items:center; gap:10px; padding:10px 0; border-bottom:1px solid var(--c-line)}
.dem-rootcause-row:last-child {border-bottom:0}
.dem-rootcause-rank {width:22px; height:22px; border-radius:50%; background:var(--c-surface-2); color:var(--c-dark); font-size:10.4px; font-weight:800; display:grid; place-items:center; flex-shrink:0}
.dem-rootcause-main {flex:1; min-width:0}
.dem-rootcause-title {font-size:12px; font-weight:700; color:var(--c-charcoal)}
.dem-rootcause-contrib-bar {height:5px; border-radius:3px; background:var(--c-surface-3); margin-top:6px; overflow:hidden}
.dem-rootcause-contrib-bar>span {display:block; height:100%; background:var(--c-magenta); border-radius:3px}
.dem-rootcause-pct {flex-shrink:0; font-size:14.4px; font-weight:800; color:var(--c-charcoal); width:44px; text-align:right}

.dem-txn-row {display:flex; align-items:center; gap:10px; padding:8px 0}
.dem-txn-label {width:130px; flex-shrink:0; font-size:11px; color:var(--c-dark); font-weight:550}
.dem-txn-bar-wrap {flex:1; min-width:0; height:10px; border-radius:5px; background:var(--c-surface-2); position:relative; overflow:hidden}
.dem-txn-bar {display:block; height:100%; border-radius:5px; background:var(--c-chart-blue)}
.dem-txn-bar.is-slow {background:var(--c-danger)}
.dem-txn-value {width:64px; flex-shrink:0; text-align:right; font-size:11.2px; font-weight:700; font-variant-numeric:tabular-nums}
.dem-txn-deviation {width:56px; flex-shrink:0; text-align:right; font-size:10px; font-weight:650}

.dem-impact-score-wrap {display:flex; align-items:baseline; gap:8px; margin:4px 0 12px}
.dem-impact-score {font-size:40px; font-weight:800; line-height:1; font-variant-numeric:tabular-nums}
.dem-impact-score-label {font-size:12px; font-weight:700; padding:3px 9px; border-radius:5px}

/* Row6 Network/ISP Path, Endpoint/Wi-Fi, SASE Security */
.dem-hop-chain {display:flex; flex-direction:column; gap:0}
.dem-hop {display:flex; align-items:center; gap:10px; padding:7px 0}
.dem-hop-dot {width:9px; height:9px; border-radius:50%; flex-shrink:0; background:var(--c-success)}
.dem-hop.is-problem .dem-hop-dot {background:var(--c-danger)}
.dem-hop-name {flex:1; min-width:0; font-size:11.2px; font-weight:600; color:var(--c-charcoal)}
.dem-hop.is-problem .dem-hop-name {color:var(--c-danger); font-weight:750}
.dem-hop-latency {flex-shrink:0; font-size:10.8px; font-variant-numeric:tabular-nums; color:var(--c-gray)}
.dem-hop.is-problem .dem-hop-latency {color:var(--c-danger); font-weight:700}
.dem-hop-connector {width:9px; margin-left:4px; height:14px; border-left:1.5px dashed var(--c-line-strong)}

.dem-endpoint-metric-row {display:flex; align-items:center; justify-content:space-between; padding:7px 0; border-bottom:1px solid var(--c-line); font-size:11.6px}
.dem-endpoint-metric-row:last-child {border-bottom:0}
.dem-endpoint-metric-row .m-label {color:var(--c-gray)}
.dem-endpoint-metric-row .m-value {font-weight:700; color:var(--c-charcoal); font-variant-numeric:tabular-nums}
.dem-endpoint-metric-row .m-value.is-warn {color:var(--c-warn)}
.dem-endpoint-metric-row .m-value.is-danger {color:var(--c-danger)}

.dem-sase-hop-row {display:flex; align-items:center; justify-content:space-between; padding:6px 0; font-size:11.2px}
.dem-sase-hop-row .hop-name {color:var(--c-dark)}
.dem-sase-hop-row .hop-ms {font-weight:700; color:var(--c-charcoal); font-variant-numeric:tabular-nums}
.dem-sase-hop-row .hop-ms.is-high {color:var(--c-warn)}

/* Row7 Change Intelligence Timeline */
.dem-change-timeline {position:relative; padding-left:26px}
.dem-change-timeline::before {content:''; position:absolute; left:5px; top:6px; bottom:6px; width:1px; background:var(--c-line-strong)}
.dem-change-item {position:relative; padding-bottom:16px; cursor:pointer}
.dem-change-item:last-child {padding-bottom:0}
.dem-change-item::before {content:''; position:absolute; left:-26px; top:3px; width:9px; height:9px; border-radius:50%; background:var(--c-white); border:2px solid var(--c-line-strong)}
.dem-change-item.is-candidate::before {border-color:var(--c-magenta)}
.dem-change-item.is-degradation::before {border-color:var(--c-danger); background:var(--c-danger)}
.dem-change-item-top {display:flex; align-items:center; gap:8px; flex-wrap:wrap}
.dem-change-time {font-size:10.4px; color:var(--c-gray-mid); font-variant-numeric:tabular-nums; width:46px; flex-shrink:0}
.dem-change-title {font-size:12px; font-weight:700; color:var(--c-charcoal)}
.dem-change-conf-row {display:flex; gap:14px; margin-top:6px; font-size:10px; color:var(--c-gray); flex-wrap:wrap}
.dem-change-conf-row b {color:var(--c-dark); font-weight:700}

/* Row8 Blast Radius + Peer Comparison */
.dem-blast-kv {display:flex; align-items:center; justify-content:space-between; padding:8px 0; border-bottom:1px solid var(--c-line); font-size:11.6px}
.dem-blast-kv:last-child {border-bottom:0}
.dem-blast-kv .k {color:var(--c-gray)}
.dem-blast-kv .v {font-weight:700; color:var(--c-charcoal)}
.dem-peer-row {display:flex; align-items:center; justify-content:space-between; padding:7px 0; border-bottom:1px solid var(--c-line); font-size:11.2px}
.dem-peer-row:last-child {border-bottom:0}
.dem-peer-row .p-label {color:var(--c-gray)}
.dem-peer-row .p-value {font-weight:650}
.dem-peer-row.is-diff .p-value {color:var(--c-danger); font-weight:800}
.dem-peer-diff-note {margin-top:10px; background:var(--c-danger-bg); border:1px solid var(--c-danger); border-radius:8px; padding:10px 12px; font-size:11.2px; color:var(--c-danger); font-weight:700}

/* Row9 Recommended Action cards */
.dem-action-card {background:var(--c-bg-warm); border:1px solid var(--c-line); border-radius:var(--radius-md); padding:15px 16px; margin-bottom:12px}
.dem-action-card:last-child {margin-bottom:0}
.dem-action-top {display:flex; align-items:center; gap:8px; margin-bottom:6px}
.dem-action-num {width:22px; height:22px; border-radius:50%; background:var(--c-magenta); color:#fff; font-size:10px; font-weight:800; display:grid; place-items:center; flex-shrink:0}
.dem-action-title {font-size:12.8px; font-weight:700; color:var(--c-charcoal)}
.dem-action-meta {display:flex; gap:16px; margin:8px 0 10px; flex-wrap:wrap; font-size:10.8px}
.dem-action-meta .am-label {color:var(--c-gray-mid); display:block; font-size:9.6px}
.dem-action-meta .am-value {font-weight:700; color:var(--c-charcoal)}
.dem-action-btns {display:flex; gap:8px; flex-wrap:wrap}
.dem-risk-low {color:var(--c-success)}
.dem-risk-medium {color:var(--c-warn)}
.dem-risk-high {color:var(--c-danger)}

/* Row10 Action Verification — Before/After */
.dem-verify-cols {display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:12px}
.dem-verify-col {background:var(--c-bg-warm); border:1px solid var(--c-line); border-radius:var(--radius-md); padding:16px}
.dem-verify-col.after {border-color:var(--c-success); background:var(--c-success-bg)}
.dem-verify-label {font-size:10px; font-weight:700; color:var(--c-gray-mid); letter-spacing:.5px; text-transform:uppercase; margin-bottom:10px}
.dem-verify-metric {display:flex; align-items:center; justify-content:space-between; padding:5px 0; font-size:11.6px}
.dem-verify-metric .v-label {color:var(--c-gray)}
.dem-verify-metric .v-value {font-weight:700; color:var(--c-charcoal); font-variant-numeric:tabular-nums}
.dem-verify-arrow {font-size:20px; color:var(--c-line-strong); text-align:center}
.dem-verify-recovered-badge {display:inline-flex; align-items:center; gap:6px; background:var(--c-success-bg); color:var(--c-success); border:1px solid var(--c-success); border-radius:6px; padding:8px 14px; font-size:12.4px; font-weight:800; margin-top:14px}

/* Toggle / Filter chips (Synthetic/Real User, Time Range, Site/App Filter) */
.dem-toolbar {display:flex; align-items:center; justify-content:space-between; gap:14px; flex-wrap:wrap; margin-bottom:18px}
.dem-toggle-group {display:inline-flex; gap:4px; background:var(--c-surface-2); border-radius:8px; padding:3px}
.dem-toggle-btn {border:0; background:transparent; padding:7px 14px; border-radius:6px; font-size:11.2px; font-weight:650; color:var(--c-gray-mid); cursor:pointer}
.dem-toggle-btn.active {background:var(--c-white); color:var(--c-magenta-dark); box-shadow:0 1px 2px rgba(20,16,30,.08)}
.dem-filter-chip-row {display:flex; gap:6px; flex-wrap:wrap}
.dem-filter-chip {border:1px solid var(--c-line); background:var(--c-white); border-radius:999px; padding:6px 12px; font-size:10.8px; font-weight:600; color:var(--c-dark); cursor:pointer}
.dem-filter-chip.active {background:var(--c-magenta); color:#fff; border-color:var(--c-magenta)}
.dem-section-flow-label {display:flex; align-items:center; gap:8px; font-size:10.4px; font-weight:700; color:var(--c-gray-mid); letter-spacing:.4px; text-transform:uppercase; margin:0 0 14px}
.dem-section-flow-label i {color:var(--c-magenta)}
.dem-narrative-strip {display:flex; align-items:center; gap:10px; flex-wrap:wrap; font-size:11.2px; color:var(--c-dark); background:var(--c-bg-warm); border:1px solid var(--c-line); border-radius:9px; padding:12px 16px; margin-bottom:18px}
.dem-narrative-strip .step {font-weight:700; color:var(--c-charcoal)}
.dem-narrative-strip .sep {color:var(--c-line-strong)}
.dem-legacy-toggle {display:flex; align-items:center; gap:8px; cursor:pointer; font-size:11.2px; font-weight:650; color:var(--c-gray-mid); padding:10px 0}
.dem-legacy-toggle i {transition:transform .15s}
.dem-legacy-toggle.open i {transform:rotate(90deg)}
.dem-legacy-body {display:none}
.dem-legacy-body.open {display:block}

@media (max-width:980px) {
 .dem-verify-cols {grid-template-columns:1fr}
 .dem-verify-arrow {transform:rotate(90deg)}
}
@media (max-width:700px) {
 .dem-path-flow {gap:0}
 .dem-path-seg {width:112px}
 .dem-matrix-cell {width:64px; height:46px}
}
