.rpt .grade-letter {font-family: var(--serif); font-style: italic; font-size: 42px; line-height: 1;}
.rpt .grade-sub {font-family: var(--mono); font-size: 12px; color: var(--ink-3); letter-spacing: 0.06em; margin-top: 2px;}
.rpt .hero-body {flex: 1; min-width: 240px;}
.rpt .hero-repo {font-family: var(--mono); font-size: clamp(20px, 2.8vw, 24px); font-weight: 600;
      letter-spacing: -0.02em; color: var(--ink); line-height: 1.1;}
.rpt .hero-sub {display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 8px;
      font-size: 14px; color: var(--ink-3);}
.rpt .hero-sub .chip {display: inline-flex; align-items: center; gap: 5px; font-family: var(--mono); font-size: 12px;
      color: var(--accent); background: var(--accent-soft); border: 1px solid var(--border-2);
      padding: 2px 8px; border-radius: var(--r-sm);}
.rpt .hero-sub .chip-gone {color: var(--ok); background: transparent;
      border-color: color-mix(in srgb, var(--ok) 40%, transparent); cursor: help;}
.rpt .hero-sub .dot {color: var(--ink-4);}
.rpt .vd-eyebrow {flex-basis: 100%; display: flex; align-items: center; gap: 12px;
      font-family: var(--mono); font-size: 12px; letter-spacing: .01em; text-transform: none; color: var(--ink-3);}
.rpt .vd-eyebrow b {color: var(--gc, var(--accent)); font-weight: 600;}
.rpt .vd-eyebrow::after {content: ""; flex: 1; height: 1px; background: var(--border);}
.rpt .vd-gauge {position: relative; width: 150px; height: 150px; flex-shrink: 0;}
.rpt .vd-gauge svg {width: 100%; height: 100%; display: block; overflow: visible;}
.rpt .vd-track {fill: none; stroke-width: 13; stroke-linecap: round;
      stroke: color-mix(in srgb, var(--gc, var(--accent)) 16%, transparent);}
.rpt .vd-arc {fill: none; stroke-width: 13; stroke-linecap: round; stroke: var(--gc, var(--accent));
      filter: drop-shadow(0 0 7px color-mix(in srgb, var(--gc, var(--accent)) 50%, transparent));
      animation: vdDraw 1.2s cubic-bezier(.22, 1, .36, 1) .18s backwards;}
@keyframes vdDraw { from { stroke-dashoffset: 377px; } }
@media (prefers-reduced-motion: reduce) {
.rpt .vd-arc {animation: none;}
}
.rpt .vd-core {position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center;}
.rpt .vd-core .grade-letter {font-size: 54px;}
.rpt .vd-line {font-family: var(--serif); font-style: italic; font-size: clamp(16px, 2.5vw, 21px);
      line-height: 1.3; color: var(--ink-2); margin-top: 8px; max-width: 42ch;}
@media (max-width: 671.98px) {
.rpt .vd-gauge {width: 120px; height: 120px;}
.rpt .vd-core .grade-letter {font-size: 42px;}
}
@keyframes sevRise { from { opacity: 0; transform: translateY(9px); } }
.rpt .sev-dot {width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; background: var(--ink-4);}
@keyframes sevFill { from { width: 0; } }
.rpt .section-head {display: flex; align-items: baseline; gap: 10px; margin: 40px 0 12px;}
.rpt .section-head h2 {font-family: var(--serif); font-size: 28px; font-weight: 400; letter-spacing: -0.01em; color: var(--ink);}
.rpt .section-head .ct {font-family: var(--mono); font-size: 12px; color: var(--ink-4);}
.rpt .section-divider {height: 1px; background: var(--border); margin: 0 0 16px;}
.rpt .sev-group {margin-bottom: 6px;}
.rpt .sev-group-header {display: flex; align-items: center; gap: 12px; padding: 11px 16px;
      background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md);
      cursor: pointer; user-select: none; transition: background .12s;}
.rpt .sev-group-header:hover {background: var(--surface-2);}
.rpt .sev-group-header[aria-expanded="true"] {border-radius: var(--r-md) var(--r-md) 0 0; border-bottom-color: transparent;}
.rpt .sev-group-dot {width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0;}
.rpt .sev-group-label {font-family: var(--mono); font-size: 12px; font-weight: 600; letter-spacing: .01em; text-transform: none;}
.rpt .sev-group-count {font-family: var(--mono); font-size: 12px; color: var(--ink-4); margin-left: auto;}
.rpt .sev-group-chevron {color: var(--ink-4); transition: transform .18s ease;}
.rpt .sev-group-header[aria-expanded="true"] .sev-group-chevron {transform: rotate(180deg);}
.rpt .findings-list {border: 1px solid var(--border); border-top: none; border-radius: 0 0 var(--r-md) var(--r-md);
      overflow: hidden; display: none;}
.rpt .findings-list.open {display: block;}
.rpt .minor-wrap {margin-top: 14px;}
.rpt .minor-toggle {display: flex; align-items: center; gap: 11px; width: 100%; padding: 13px 16px;
      background: var(--surface); border: 1px dashed var(--border-2); border-radius: var(--r-md);
      cursor: pointer; text-align: left; transition: border-color .14s ease, background .14s ease;}
.rpt .minor-toggle:hover {border-color: var(--ink-4); background: var(--surface-2);}
.rpt .minor-ic {display: inline-flex; color: var(--ink-3); transition: transform .2s ease;}
.rpt .minor-ic svg {width: 16px; height: 16px;}
.rpt .minor-toggle[aria-expanded="true"] .minor-ic {transform: rotate(180deg);}
.rpt .minor-label {font-family: var(--mono); font-size: 12px; font-weight: 600; letter-spacing: .03em; color: var(--ink-2);}
.rpt .minor-hint {font-family: var(--mono); font-size: 12px; color: var(--ink-4); text-transform: none; letter-spacing: .01em; margin-left: auto;}
.rpt .minor-body {display: none; margin-top: 8px;}
.rpt .minor-body.open {display: block;}
@media (max-width: 671.98px) {
.rpt .minor-hint {display: none;}
}
.rpt .finding-row {border-bottom: 1px solid var(--border); background: var(--bg);
      transition: background .1s;}
.rpt .finding-row:last-child {border-bottom: none;}
.rpt .finding-summary {display: flex; align-items: flex-start; gap: 14px; padding: 14px 16px;
      cursor: pointer; transition: background .1s;}
.rpt .finding-summary:hover {background: var(--surface);}
.rpt .finding-icon {flex-shrink: 0; margin-top: 2px;}
.rpt .finding-main {flex: 1; min-width: 0;}
.rpt .finding-rule {font-family: var(--mono); font-size: 12px; font-weight: 600; color: var(--ink);}
.rpt .finding-loc {font-family: var(--mono); font-size: 12px; color: var(--accent); margin-top: 3px;
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%;}
.rpt .finding-loc:has(.occ-count) {display: flex; gap: 8px; align-items: baseline; white-space: normal;}
.rpt .occ-count {color: var(--ink-3); flex-shrink: 0;}
.rpt .vd-half-sub {color: var(--ink-3); font-weight: 400; margin-left: 4px;}
.rpt .finding-msg {font-size: 14px; color: var(--ink-3); margin-top: 5px; line-height: 1.45;}
.rpt .finding-badge {font-family: var(--mono); font-size: 12px; letter-spacing: .01em; text-transform: capitalize;
      padding: 2px 7px; border-radius: 4px; border: 1px solid; flex-shrink: 0; margin-top: 2px;}
.rpt .finding-badge.critical {color: var(--crit); background: var(--crit-bg); border-color: var(--crit-line);}
.rpt .finding-badge.high {color: var(--high); background: var(--high-bg); border-color: var(--high-line);}
.rpt .finding-badge.medium {color: var(--med);  background: var(--med-bg);  border-color: var(--med-line);}
.rpt .finding-badge.low {color: var(--low);  background: var(--low-bg);  border-color: var(--border);}
.rpt .finding-row.kb-on {background: var(--surface); box-shadow: inset 3px 0 0 var(--accent);}
.rpt .finding-row.kb-on .finding-rule {color: var(--accent);}
.rpt .kb-hint {display: flex; align-items: center; gap: 9px; margin: 0 0 14px;
      font-family: var(--mono); font-size: 12px; letter-spacing: .04em; color: var(--ink-4);}
.rpt .kb-hint kbd {font-family: var(--mono); font-size: 12px; color: var(--ink-2);
      background: var(--surface-2); border: 1px solid var(--border-2); border-bottom-width: 2px;
      border-radius: 4px; padding: 1px 6px;}
@media (max-width: 671.98px) {
.rpt .kb-hint {display: none;}
}
.rpt .finding-detail {display: none; padding: 0 16px 16px 56px;}
.rpt .finding-detail.open {display: block;}
@media (max-width: 671.98px) {
.rpt .finding-detail {padding-left: 16px;}
}
.rpt .finding-age {font-family: var(--mono); font-size: 12px; color: var(--ink-4);
      margin-top: 4px; line-height: 1.45;}
.rpt .ev-ledger {margin-top: 14px; border-top: 1px solid var(--border);}
.rpt .ev-group {padding: 11px 0; border-bottom: 1px solid var(--border);}
.rpt .ev-group:last-child {border-bottom: none; padding-bottom: 0;}
.rpt .ev-group-head {font-family: var(--mono); font-size: 12px; color: var(--ink-3);
      margin-bottom: 8px;}
.rpt .ev-row {display: grid; grid-template-columns: 136px minmax(0, 1fr); gap: 4px 14px;
      align-items: baseline; padding: 2px 0;}
.rpt .ev-k {font-family: var(--mono); font-size: 12px; color: var(--ink-4);}
.rpt .ev-v {font-size: 12px; line-height: 1.5; color: var(--ink-2); overflow-wrap: anywhere;}
.rpt .ev-v.ev-mono {font-family: var(--mono); font-size: 12px;}
.rpt .ev-list {margin: 3px 0 0; padding-left: 17px;}
.rpt .ev-list li {font-size: 12px; line-height: 1.55; color: var(--ink-2); margin-top: 3px;}
.rpt .ev-model {font-family: var(--mono); font-size: 12px; color: var(--ink-4); margin-top: 9px;}
@media (max-width: 671.98px) {
.rpt .ev-row {grid-template-columns: minmax(0, 1fr); gap: 1px;}
}
.rpt .find-legend {display: flex; flex-wrap: wrap; gap: 6px 18px; align-items: baseline;
      margin: 0 0 14px;}
.rpt .find-legend p {margin: 0; display: flex; flex-wrap: wrap; gap: 7px; align-items: baseline;
      font-size: 12px; line-height: 1.5; color: var(--ink-3);}
.rpt .lg-plain {font-family: var(--mono); font-size: 12px; color: var(--ink-4);
      border: 1px dashed var(--border-2); border-radius: 4px; padding: 1px 7px;}
.rpt .finding-suggestion {background: var(--bg-warm); border: 1px solid var(--border-2); border-radius: var(--r-md);
      padding: 14px 16px; font-family: var(--mono); font-size: 12px; line-height: 1.65;
      color: var(--ink-2); white-space: pre-wrap; word-break: break-word; max-height: 240px;
      overflow-y: auto;}
.rpt .finding-suggestion-head {font-size: 12px; font-family: var(--mono); color: var(--ink-4);
      letter-spacing: .01em; text-transform: none; margin-bottom: 8px;}
.rpt .finding-chevron {box-sizing: border-box; width: 26px; height: 26px; padding: 5px;
      color: var(--ink-3); background: var(--bg-warm); border: 1px solid var(--border-2);
      border-radius: var(--r-sm); opacity: 1; flex-shrink: 0; margin-top: 0;
      transition: color .14s ease, background .14s ease, border-color .14s ease, transform .18s ease;}
.rpt .finding-summary:hover .finding-chevron, .rpt .finding-summary:focus-visible .finding-chevron,
.rpt .rpt-frow:hover .rpt-open, .rpt .rpt-frow:focus-visible .rpt-open {
      color: var(--accent); background: var(--accent-soft); border-color: var(--accent);}
.rpt .finding-summary[aria-expanded="true"] .finding-chevron {transform: rotate(180deg);}
.rpt .fix-locked {display: flex; align-items: flex-start; gap: 10px;
      padding: 13px 16px; border: 1px dashed var(--border-2); border-radius: var(--r-md);
      background: color-mix(in srgb, var(--accent) 4%, transparent);
      font-size: 14px; line-height: 1.55; color: var(--ink-3);}
.rpt .fix-locked svg {width: 15px; height: 15px; flex-shrink: 0; margin-top: 1px; color: var(--accent); opacity: .85;}
.rpt .fix-locked a {color: var(--accent); text-decoration: underline; text-underline-offset: 3px;}
.rpt .clean-scan {padding: 32px 28px; background: var(--surface);
      border: 1px solid var(--border-2); border-radius: var(--r-xl);}
.rpt .cs-lead {font-size: 20px; font-weight: 600; color: var(--ink); letter-spacing: -0.01em; margin-bottom: 22px;}
.rpt .cs-verified {display: flex; flex-direction: column; gap: 1px; margin-bottom: 28px;
      background: var(--border-2); border: 1px solid var(--border-2); border-radius: var(--r-lg); overflow: hidden;}
.rpt .cs-row {display: flex; align-items: center; gap: 12px; padding: 13px 16px; background: var(--bg-warm);}
.rpt .cs-check {color: var(--ok); flex-shrink: 0;}
.rpt .cs-cat {font-size: 14px; font-weight: 600; color: var(--ink); min-width: 108px;}
.rpt .cs-detail {font-size: 14px; color: var(--ink-3);}
.rpt .cs-badge {padding-top: 4px;}
.rpt .cs-badge h3 {font-size: 16px; font-weight: 700; color: var(--ink); margin-bottom: 4px;}
.rpt .cs-badge-sub {font-size: 14px; color: var(--ink-3); margin-bottom: 14px; max-width: 460px; line-height: 1.5;}
.rpt .cs-rescan {margin-top: 18px; font-size: 14px; color: var(--ink-4);}
.rpt .cs-limit {margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--border);
      font-size: 14px; line-height: 1.6; color: var(--ink-4); max-width: 520px;}
.rpt .badge-section {margin-top: 44px;}
.rpt .badge-snippet {border: 1px solid var(--border-2); border-radius: var(--r-lg); overflow: hidden;}
.rpt .badge-snippet-head {display: flex; align-items: center; justify-content: space-between; gap: 12px;
      padding: 11px 14px; background: var(--surface); border-bottom: 1px solid var(--border-2);}
.rpt .badge-preview {display: block;}
.rpt .badge-fmts {display: flex; gap: 8px;}
.rpt .fmt-chip {font-family: var(--mono); font-size: 12px; font-weight: 500; letter-spacing: .01em;
      text-transform: capitalize; padding: 6px 12px; border-radius: var(--r-sm); cursor: pointer;
      border: 1px solid var(--border-2); background: none; color: var(--ink-3);
      transition: color .14s ease, border-color .14s ease, background .14s ease;}
.rpt .fmt-chip:hover {color: var(--accent); border-color: var(--accent);}
.rpt .fmt-chip.on {color: var(--accent); background: var(--accent-soft); border-color: var(--accent);}
.rpt .fmt-chip .fc-face {display: inline-flex; align-items: center; gap: 5px;}
.rpt .fmt-chip .fc-done {display: none;}
.rpt .fmt-chip.copied .fc-default {display: none;}
.rpt .fmt-chip.copied .fc-done {display: inline-flex; color: var(--ok);}
.rpt .badge-snippet-code {font-family: var(--mono); font-size: 12px; line-height: 1.6; color: var(--ink-2);
      background: var(--bg-warm); padding: 16px 18px; margin: 0;
      overflow-x: auto; white-space: pre-wrap; word-break: break-all;}
.rpt .prompt-section {margin-top: 44px;}
.rpt .prompt-intro {font-size: 14px; color: var(--ink-3); margin-bottom: 18px; max-width: none; line-height: 1.55;}
.rpt .platform-pills {display: flex; flex-wrap: wrap; gap: 7px; margin-bottom: 0;}
.rpt .platform-pill {height: 34px; padding: 0 14px; border: 1px solid var(--border-2); border-radius: var(--r-sm);
      background: var(--surface); color: var(--ink-3); font-family: var(--mono); font-size: 12px;
      font-weight: 500; cursor: pointer; transition: all .14s ease; white-space: nowrap;}
.rpt .platform-pill:hover {border-color: var(--accent); color: var(--ink); background: var(--accent-soft);}
.rpt .platform-pill[aria-pressed="true"] {background: var(--accent); color: var(--cream); border-color: var(--accent);}
.rpt .platform-select {font: inherit; font-size: 14px; color: var(--ink-2);
      background: transparent; border: 1px solid var(--border-2);
      border-radius: var(--r-sm); padding: 5px 30px 5px 14px; cursor: pointer;
      appearance: none; -webkit-appearance: none;
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23a89f91' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
      background-repeat: no-repeat; background-position: right 12px center;}
.rpt .platform-select:hover, .rpt .platform-select:focus {border-color: var(--accent); color: var(--ink); outline: none;}
.rpt .platform-locked {display: inline-flex; align-items: center; gap: 6px; text-decoration: none;
      color: var(--ink-3); background-image: none; padding-right: 14px;}
.rpt .platform-locked:hover, .rpt .platform-locked:focus-visible {border-color: var(--accent); color: var(--accent); background: var(--accent-soft); outline: none;}
.rpt .platform-locked svg {flex-shrink: 0; opacity: .85;}
@media (max-width: 671.98px) {
.rpt .platform-pills {gap: 6px;}
.rpt .platform-pill, .rpt .platform-select {font-size: 14px; padding-top: 6px; padding-bottom: 6px;}
}
.rpt .prompt-header {position: relative;   
      display: flex; align-items: center; justify-content: space-between; gap: 12px;
      padding: 12px 16px; background: var(--surface); border: 1px solid var(--border-2);
      border-radius: var(--r-lg) var(--r-lg) 0 0; margin-top: 10px;}
.rpt .prompt-dots {display: flex; gap: 5px;}
.rpt .prompt-dots span {width: 10px; height: 10px; border-radius: 50%;}
.rpt .prompt-dots .d1 {background: #f87171;}
.rpt .prompt-dots .d2 {background: #fbbf24;}
.rpt .prompt-dots .d3 {background: #34d399;}
.rpt .prompt-clip {position: relative;}
.rpt .prompt-reveal:not(.open) .prompt-clip {max-height: 300px; overflow: hidden;}
.rpt .prompt-reveal.open .prompt-clip {max-height: min(65vh, 760px); overflow-y: auto;}
.rpt .prompt-reveal:not(.open) .prompt-clip::after {content: ""; position: absolute; inset: auto 0 0 0; height: 80px; pointer-events: none;
      background: linear-gradient(to bottom, transparent, var(--bg-warm));}
.rpt .prompt-toggle {display: flex; align-items: center; justify-content: center; gap: 7px;
      width: 100%; padding: 10px 16px; cursor: pointer;
      font-family: var(--mono); font-size: 12px; letter-spacing: .01em;
      text-transform: none; color: var(--ink-3);
      background: var(--surface); border: 1px solid var(--border-2); border-top: none;
      border-radius: 0 0 var(--r-lg) var(--r-lg);}
.rpt .prompt-toggle:hover {color: var(--ink-2); background: var(--surface-2);}
.rpt .prompt-toggle svg {width: 13px; height: 13px; transition: transform .18s ease;}
.rpt .prompt-reveal.open .prompt-toggle svg {transform: rotate(180deg);}
@media (prefers-reduced-motion: reduce) {
.rpt .prompt-toggle svg {transition: none;}
}
.rpt .cm-face {display: inline-flex; align-items: center; gap: 8px;}
.rpt .cm-done {display: none;}
.rpt .copied .cm-default {display: none;}
.rpt .copied .cm-done {display: inline-flex;}
.rpt .cm-check {animation: cmpop .4s cubic-bezier(.22,1.5,.4,1);}
@keyframes cmpop { 0% { transform: scale(.3); opacity: .2; } 55% { transform: scale(1.18); } 100% { transform: scale(1); } }
.rpt .copy-mega {position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 7px;
      height: 34px; padding: 0 15px; cursor: pointer;
      font-family: var(--mono); font-size: 12px; font-weight: 500; letter-spacing: 0;
      color: var(--ink); border: 1.5px solid transparent; border-radius: var(--r-md);
      background: linear-gradient(var(--bg-warm), var(--bg-warm)) padding-box,
                  linear-gradient(115deg, #ff00ff, #00ffff, #8a2be2, #ff00ff) border-box;
      background-size: 100% 100%, 280% 100%; background-position: 0 0, 0 0;
      animation: iridBorder 3.5s linear infinite;
      transition: transform .12s ease, filter .16s ease;}
@keyframes iridBorder { to { background-position: 0 0, 280% 0; } }
.rpt .copy-mega:hover {filter: brightness(1.12);}
.rpt .copy-mega:active {transform: translateY(1px) scale(.98);}
.rpt .copy-mega svg {width: 15px; height: 15px; flex-shrink: 0;}
.rpt .copy-mega.copied {animation: none; color: var(--ok);
      
      background: linear-gradient(rgba(52,211,153,.14), rgba(52,211,153,.14)) padding-box,
                  linear-gradient(rgba(52,211,153,.5), rgba(52,211,153,.5)) border-box;}
.rpt .copy-mega-sm {height: 30px; padding: 0 13px; font-size: 12px; gap: 6px;}
.rpt .copy-mega-sm svg {width: 13px; height: 13px;}
@media (max-width: 671.98px) {
.rpt .copy-mega-sm {padding: 0 10px;}
.rpt .copy-mega-sm .cm-face {gap: 0; font-size: 0;}
.rpt .copy-mega-sm .cm-face svg {font-size: 12px;}
}
.rpt .prompt-title {flex: 1 1 auto; min-width: 0;
      display: flex; align-items: center; justify-content: center; gap: 9px;
      pointer-events: none;}
.rpt .prompt-file {font-family: var(--mono); font-size: 12px; letter-spacing: .01em;
      color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;}
.rpt .prompt-mark {--spark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2l1.7 5.5L19 9l-5.3 1.5L12 16l-1.7-5.5L5 9l5.3-1.5z'/%3E%3Cpath d='M19 13.5l.8 2.4L22 16.7l-2.2.7L19 20l-.8-2.6L16 16.7l2.2-.8z'/%3E%3C/svg%3E");
      position: relative; flex: none;
      width: 24px; height: 24px;
      pointer-events: none;
      background:
        linear-gradient(115deg, transparent 38%, rgba(255,255,255,.92) 50%, transparent 62%),
        linear-gradient(115deg, #ff00ff, #00ffff, #8a2be2);
      background-size: 260% 100%, 100% 100%;
      background-position: -130% 0, 0 0;   
      background-repeat: no-repeat;
      
      opacity: .85;
      
      animation:
        markGlint 8s cubic-bezier(.645, .045, .355, 1) infinite,
        markSwell 8s cubic-bezier(.165, .84, .44, 1) infinite;
      -webkit-mask: var(--spark) center / contain no-repeat;
              mask: var(--spark) center / contain no-repeat;}
@keyframes markGlint {
      0%, 88% { background-position: -130% 0, 0 0; }
      100%    { background-position:  130% 0, 0 0; }
    }
@keyframes markSwell {
      0%, 86%, 100% { transform: scale(1); }
      94%           { transform: scale(1.06); }
    }
@media (prefers-reduced-motion: reduce) {
.rpt .prompt-mark {animation: none;}
}
@media (max-width: 671.98px) {
.rpt .prompt-mark {display: none;}
.rpt .prompt-file {font-size: 12px;}
}
@media (max-width: 380px) {
.rpt .prompt-title {display: none;}
}
.rpt .toast {position: fixed; left: 50%; bottom: 90px; transform: translateX(-50%) translateY(18px);
      display: flex; align-items: center; gap: 10px; max-width: calc(100vw - 40px);
      padding: 12px 18px; background: var(--white); border: 1px solid var(--border-2);
      border-radius: var(--r-lg); box-shadow: var(--shadow-pop); font-size: 14px; color: var(--ink);
      opacity: 0; visibility: hidden; pointer-events: none; z-index: 300;
      transition: opacity .2s ease, transform .28s cubic-bezier(.22,1,.36,1), visibility .2s;}
.rpt .toast.show {opacity: 1; visibility: visible; transform: translateX(-50%) translateY(0);}
.rpt .toast svg {width: 17px; height: 17px; color: var(--ok); flex-shrink: 0;}
.rpt .toast b {color: var(--accent); font-weight: 600;}
@media (prefers-reduced-motion: reduce) {
.rpt .cm-check, .rpt .copy-mega {animation: none;}
.rpt .copy-mega:active {transform: none;}
.rpt .toast, .rpt .toast.show {transition: opacity .2s ease, visibility .2s; transform: translateX(-50%);}
}
@keyframes rise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
.rpt #prompt-area {transition: opacity .15s ease;}
.rpt #prompt-area.prompt-loading {opacity: .4; pointer-events: none;}
.rpt .anim {opacity: 0; animation: rise .45s cubic-bezier(.2,.9,.3,1) forwards;}
.rpt .d1 {animation-delay: .03s;}
.rpt .d2 {animation-delay: .08s;}
.rpt .d3 {animation-delay: .13s;}
.rpt .d4 {animation-delay: .18s;}
@media (prefers-reduced-motion: reduce) {
.rpt .anim {animation: none; opacity: 1;}
}
@media (max-width: 671.98px) {
.rpt .finding-loc {max-width: 220px;}
}
@media (max-width: 671.98px) {
.rpt .grade-letter {font-size: 32px;}
}
.rpt .rtabs {display: flex; gap: 2px; margin: 28px 0 2px; border-bottom: 1px solid var(--border);}
.rpt .rtab {background: none; border: none; padding: 11px 16px; font-family: var(--mono); font-size: 12px;
      letter-spacing: .01em; text-transform: none; color: var(--ink-3); cursor: pointer; position: relative;
      transition: color .15s ease;}
.rpt .rtab:hover {color: var(--ink-2);}
.rpt .rtab.active {color: var(--ink);}
.rpt .rtab.active::after {content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--accent);}
.rpt .rtab-n {color: var(--ink-4); margin-left: 3px;}
.rpt .tab-panel {display: none;}
.rpt .tab-panel.active {display: block;}
@keyframes rb-rule { to { transform: scaleY(1); } }
.rpt .htable {width: 100%; border-collapse: collapse; margin-top: 4px;}
/* On a phone the history table scrolls inside itself, never the page. */
@media (max-width: 671.98px) {
  .rpt .htable { display: block; position: relative; overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .rpt .htable th.c, .rpt .htable td.c { width: 56px; }
  .rpt .htable tbody td { padding: 12px 8px; }
}
.rpt .htable thead th {font-family: var(--mono); font-size: 12px; font-weight: 500; letter-spacing: .01em;
      text-transform: none; color: var(--ink-3); text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--border);}
.rpt .htable th.c, .rpt .htable td.c {text-align: center; width: 82px;}
.rpt .htable tbody td {padding: 13px 12px; border-bottom: 1px solid var(--border);}
.rpt .hrow {transition: background .12s ease;}
.rpt .hrow:not(.is-current) {cursor: pointer;}
.rpt .hrow:not(.is-current):hover {background: var(--surface);}
.rpt .hrow.is-current {background: var(--surface-2);}
.rpt .hwhen {font-family: var(--mono); font-size: 14px; color: var(--ink);}
.rpt .hago {font-size: 12px; color: var(--ink-4); margin-top: 2px;}
.rpt .hgrade {font-family: var(--serif); font-style: italic; font-size: 20px;}
.rpt .hscore {font-family: var(--mono); font-size: 12px; color: var(--ink-3); margin-left: 6px;}
.rpt .htable td.c.crit, .rpt .htable td.c.high, .rpt .htable td.c.med {font-family: var(--mono); font-weight: 600;}
.rpt .htable td.c.crit {color: var(--crit);}
.rpt .htable td.c.high {color: var(--high);}
.rpt .htable td.c.med {color: var(--med);}
.rpt .hcur {font-family: var(--mono); font-size: 12px; letter-spacing: .01em; text-transform: none; color: var(--accent);
      border: 1px solid var(--border-2); border-radius: 4px; padding: 2px 7px;}
.rpt .inv-prov {background: var(--surface); border: 1px solid var(--border);
      border-radius: var(--r-lg); padding: 22px 24px 6px; margin-top: 24px;}
.rpt .inv-prov-top {display: flex; align-items: flex-start; justify-content: space-between;
      gap: 20px; flex-wrap: wrap;}
.rpt .inv-subject {font-family: var(--serif); font-size: 28px; line-height: 1.2; color: var(--ink);
      letter-spacing: -0.01em; word-break: break-word; min-width: 0;}
.rpt .inv-subject .at {font-style: italic; color: var(--ink-3);}
.rpt .inv-sha {font-family: var(--mono); font-size: 14px; color: var(--accent);}
.rpt .inv-format {display: inline-flex; align-items: baseline; gap: 7px; font-family: var(--mono);
      font-size: 12px; letter-spacing: .01em; text-transform: none; color: var(--ink-3);
      background: var(--bg); border: 1px solid var(--border-2); border-radius: var(--r-sm);
      padding: 6px 11px; white-space: nowrap; flex: none;}
.rpt .inv-format b {color: var(--ink); font-weight: 600; letter-spacing: 0.06em;}
.rpt .inv-meta {display: grid; gap: 0 32px; margin: 18px 0 0; padding-top: 4px;
      border-top: 1px solid var(--border); grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));}
.rpt .inv-meta div {display: flex; gap: 9px; align-items: baseline; min-width: 0; padding: 13px 0;}
.rpt .inv-meta dt {font-family: var(--mono); font-size: 12px; letter-spacing: .01em;
      text-transform: none; color: var(--ink-4); flex: none;}
.rpt .inv-meta dd {margin: 0; font-family: var(--mono); font-size: 12px; color: var(--ink-2);
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.rpt .inv-scope {position: relative; margin: 22px 0 0; padding: 16px 0 16px 20px;}
.rpt .inv-scope::before {content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 2px;
      background: var(--accent); opacity: .55;}
.rpt .inv-scope h3 {margin: 0 0 7px; font-family: var(--mono); font-size: 12px; letter-spacing: .01em;
      text-transform: none; color: var(--accent); font-weight: 500;}
.rpt .inv-scope-grid {display: grid; gap: 26px 40px; align-items: start;
      grid-template-columns: minmax(0, 1fr);}
@media (min-width: 1056px) {
.rpt .inv-scope-grid {grid-template-columns: minmax(0, 1.05fr) minmax(280px, 0.95fr);}
}
.rpt .inv-scope p {margin: 0 0 9px; font-size: 14px; line-height: 1.62; color: var(--ink-2); max-width: 68ch;}
.rpt .inv-scope p:last-child {margin-bottom: 0;}
.rpt .inv-scope b {color: var(--ink); font-weight: 600;}
.rpt .inv-scope a {color: var(--accent); text-decoration: underline; text-underline-offset: 2px;}
.rpt .inv-ledger {border: 1px solid var(--border); border-radius: var(--r-lg); overflow: hidden;}
.rpt .inv-led-h {font-family: var(--mono); font-size: 12px; letter-spacing: .01em; text-transform: none;
      color: var(--ink-4); padding: 10px 16px; background: var(--surface); border-bottom: 1px solid var(--border);}
.rpt .inv-led-row {display: flex; gap: 11px; align-items: flex-start; padding: 11px 16px;
      border-bottom: 1px solid var(--border); font-size: 14px; line-height: 1.5; color: var(--ink-2);}
.rpt .inv-led-row:last-child {border-bottom: none;}
.rpt .inv-led-row svg {width: 14px; height: 14px; flex: none; margin-top: 2px;}
.rpt .inv-led-row.yes svg {color: var(--ok);}
.rpt .inv-led-row.no {color: var(--ink-3);}
.rpt .inv-led-row.no svg {color: var(--ink-4);}
.rpt .inv-led-row small {display: block; margin-top: 3px; font-size: 12px; color: var(--ink-4);
      font-family: var(--mono);}
.rpt .inv-stats {display: grid; gap: 1px; margin: 26px 0 0; background: var(--border);
      border: 1px solid var(--border); border-radius: var(--r-lg); overflow: hidden;
      grid-template-columns: repeat(auto-fit, minmax(158px, 1fr));}
.rpt .inv-stat {background: var(--bg); padding: 17px 18px 16px;}
.rpt .inv-stat-n {font-family: var(--serif); font-size: 32px; line-height: 1; color: var(--ink);
      font-variant-numeric: lining-nums tabular-nums;}
.rpt .inv-stat-n .unit {font-family: var(--mono); font-size: 12px; color: var(--ink-4); margin-left: 5px;}
.rpt .inv-stat-l {margin-top: 9px; font-family: var(--mono); font-size: 12px; letter-spacing: .01em;
      text-transform: none; color: var(--ink-3);}
.rpt .inv-stat-s {margin-top: 5px; font-size: 12px; color: var(--ink-4); line-height: 1.45;}
.rpt .inv-eco {margin-top: 26px;}
.rpt .inv-eco-bar {display: flex; height: 6px; border-radius: 3px; overflow: hidden; background: var(--surface-2);}
.rpt .inv-eco-seg {height: 100%;}
.rpt .inv-eco-key {display: flex; flex-wrap: wrap; gap: 6px 20px; margin-top: 12px;}
.rpt .inv-eco-item {display: inline-flex; align-items: center; gap: 8px; font-family: var(--mono);
      font-size: 12px; color: var(--ink-3);}
.rpt .inv-eco-item i {width: 8px; height: 8px; border-radius: 2px; flex: none;}
.rpt .inv-eco-item b {color: var(--ink-2); font-weight: 500;}
.rpt .inv-dupes {margin-top: 30px; border: 1px solid var(--high-line); border-radius: var(--r-lg);
      background: var(--high-bg); padding: 17px 19px 15px;}
.rpt .inv-dupes-h {display: flex; align-items: center; gap: 8px; font-family: var(--mono); font-size: 12px;
      letter-spacing: .01em; text-transform: none; color: var(--high);}
.rpt .inv-dupes-h svg {width: 13px; height: 13px; flex: none;}
.rpt .inv-dupes p {margin: 9px 0 13px; font-size: 14px; line-height: 1.6; color: var(--ink-2); max-width: 74ch;}
.rpt .inv-dupe-list {display: flex; flex-wrap: wrap; gap: 7px;}
.rpt .inv-dupe {display: inline-flex; align-items: baseline; gap: 8px; font-family: var(--mono); font-size: 12px;
      background: var(--bg); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 5px 10px;}
.rpt .inv-dupe b {color: var(--ink); font-weight: 600;}
.rpt .inv-dupe span {color: var(--ink-4);}
.rpt .inv-dupe-more {align-self: center; font-family: var(--mono); font-size: 12px; color: var(--ink-4);}
.rpt .inv-sec-h {display: flex; align-items: baseline; justify-content: space-between; gap: 16px;
      flex-wrap: wrap; margin: 36px 0 0; padding-bottom: 11px; border-bottom: 1px solid var(--border);}
.rpt .inv-sec-h h3 {margin: 0; font-family: var(--serif); font-size: 20px; font-weight: 400; color: var(--ink);}
.rpt .inv-sec-h .n {font-family: var(--mono); font-size: 12px; color: var(--ink-4); margin-left: 8px;}
.rpt .inv-search {position: relative;}
.rpt .inv-search svg {position: absolute; left: 11px; top: 50%; transform: translateY(-50%);
      width: 14px; height: 14px; color: var(--ink-4); pointer-events: none;}
.rpt .inv-search input {font-family: var(--mono); font-size: 12px; color: var(--ink);
      background: var(--btn-face); border: 1px solid var(--border); border-radius: var(--r-sm);
      padding: 8px 12px 8px 32px; width: 230px; max-width: 100%; transition: border-color .15s ease;}
.rpt .inv-search input:focus {outline: none; border-color: var(--accent);}
.rpt .inv-search input::placeholder {color: var(--ink-4);}
.rpt .inv-lic-grid {display: flex; flex-direction: column; gap: 2px; margin-top: 4px;}
.rpt .inv-lic-row {display: grid; grid-template-columns: minmax(120px, 210px) 1fr 52px;
      align-items: center; gap: 16px; padding: 9px 0; border-bottom: 1px solid var(--border);}
.rpt .inv-lic-row:last-child {border-bottom: none;}
.rpt .inv-lic-name {font-family: var(--mono); font-size: 12px; color: var(--ink-2);
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.rpt .inv-lic-bar {height: 5px; border-radius: 3px; background: var(--surface-2); overflow: hidden;}
.rpt .inv-lic-bar i {display: block; height: 100%; background: var(--accent); opacity: .8; border-radius: 3px;}
.rpt .inv-lic-n {font-family: var(--mono); font-size: 12px; color: var(--ink-3); text-align: right;
      font-variant-numeric: lining-nums tabular-nums;}
.rpt .inv-lic-row.muted .inv-lic-name {color: var(--ink-4); font-style: italic;}
.rpt .inv-lic-row.muted .inv-lic-bar i {background: var(--ink-4); opacity: .45;}
.rpt .inv-lic-note {margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border);
      font-size: 12px; line-height: 1.6; color: var(--ink-4); max-width: 78ch;}
.rpt .inv-lic-note b {color: var(--ink-3); font-weight: 500;}
.rpt .inv-oblig {margin-top: 30px; border: 1px solid var(--border); border-radius: var(--r-lg);
      overflow: hidden;}
.rpt .inv-oblig-h {display: flex; align-items: baseline; justify-content: space-between; gap: 14px;
      flex-wrap: wrap; padding: 13px 18px; background: var(--surface);
      border-bottom: 1px solid var(--border);}
.rpt .inv-oblig-h h3 {margin: 0; font-family: var(--mono); font-size: 12px; letter-spacing: .01em;
      text-transform: none; color: var(--high); font-weight: 500;}
.rpt .inv-oblig-h .n {font-family: var(--mono); font-size: 12px; color: var(--ink-4);}
.rpt .inv-oblig-row {display: grid; gap: 4px 16px; padding: 14px 18px;
      border-bottom: 1px solid var(--border); grid-template-columns: minmax(0, 1fr);}
@media (min-width: 672px) {
.rpt .inv-oblig-row {grid-template-columns: minmax(150px, 210px) minmax(0, 1fr); align-items: start;}
}
.rpt .inv-oblig-row:last-child {border-bottom: none;}
.rpt .inv-oblig-id {display: flex; align-items: center; gap: 9px; flex-wrap: wrap;}
.rpt .inv-oblig-id b {font-family: var(--mono); font-size: 12px; color: var(--ink); font-weight: 600;
      word-break: break-word;}
.rpt .inv-tier {font-family: var(--mono); font-size: 12px; letter-spacing: .01em; text-transform: capitalize;
      border: 1px solid; border-radius: 3px; padding: 2px 6px; white-space: nowrap;}
.rpt .inv-tier.restricted {color: var(--high); border-color: var(--high-line); background: var(--high-bg);}
.rpt .inv-tier.network {color: var(--high); border-color: var(--high-line); background: var(--high-bg);}
.rpt .inv-tier.strong {color: var(--med); border-color: var(--border-2);}
.rpt .inv-tier.weak {color: var(--ink-4); border-color: var(--border);}
.rpt .inv-oblig-note {font-size: 14px; line-height: 1.6; color: var(--ink-2); max-width: 74ch;}
.rpt .inv-oblig-pkgs {margin-top: 6px; font-family: var(--mono); font-size: 12px; color: var(--ink-4);
      line-height: 1.7; word-break: break-word;}
.rpt .inv-oblig-foot {padding: 12px 18px; background: var(--surface); border-top: 1px solid var(--border);
      font-size: 12px; line-height: 1.6; color: var(--ink-4);}
.rpt .inv-lic-mark {display: inline-block; width: 6px; height: 6px; border-radius: 50%;
      margin-right: 7px; vertical-align: middle; background: var(--high);}
.rpt .inv-lic-mark.strong {background: var(--med);}
.rpt .inv-lic-mark.weak {background: var(--ink-4);}
.rpt .inv-tools {display: flex; align-items: center; gap: 10px; flex-wrap: wrap;}
.rpt .inv-copy {display: inline-flex; align-items: center; gap: 7px; font-family: var(--mono);
      font-size: 12px; color: var(--ink-3); background: var(--btn-face);
      border: 1px solid var(--border); border-radius: var(--r-sm); padding: 8px 12px;
      cursor: pointer; transition: border-color .15s ease, color .15s ease; white-space: nowrap;}
.rpt .inv-copy:hover {border-color: var(--accent); color: var(--accent);}
.rpt .inv-copy svg {width: 13px; height: 13px;}
.rpt .inv-none {margin-top: 26px; padding: 22px 20px; border: 1px solid var(--border);
      border-radius: var(--r-lg); background: var(--surface);}
.rpt .inv-none h3 {margin: 0 0 8px; font-family: var(--serif); font-size: 20px; font-weight: 400; color: var(--ink);}
.rpt .inv-none p {margin: 0; font-size: 14px; line-height: 1.62; color: var(--ink-3); max-width: 72ch;}
.rpt .inv-none .rempty {padding: 0; max-width: none;}
.rpt .inv-none .rempty h2 {margin: 0 0 8px; font-family: var(--serif); font-size: 20px; font-weight: 400; color: var(--ink);}
.rpt .inv-none .rempty p {margin: 0 0 14px;}
.rpt .inv-none .rempty + p {margin-top: 14px;}
.rpt .inv-trunc {margin-top: 13px; font-size: 12px; color: var(--ink-4); line-height: 1.55;}
.rpt .inv-trunc b {color: var(--ink-3); font-weight: 500;}
.rpt .inv-wrap {overflow-x: auto; border-bottom: 1px solid var(--border);}
.rpt .itable tbody tr:last-child td {border-bottom: none;}
.rpt .itable {width: 100%; border-collapse: collapse; min-width: 620px;}
.rpt .itable thead th {font-family: var(--mono); font-size: 12px; font-weight: 500; letter-spacing: .01em;
      text-transform: none; color: var(--ink-3); text-align: left; padding: 11px 12px 10px;
      border-bottom: 1px solid var(--border); white-space: nowrap;}
.rpt .itable tbody td {padding: 11px 12px; border-bottom: 1px solid var(--border); font-size: 14px; vertical-align: baseline;}
.rpt .itable tbody tr:hover {background: var(--surface);}
.rpt .inv-name {font-family: var(--mono); font-size: 14px; color: var(--ink); word-break: break-all;}
.rpt .inv-ver {font-family: var(--mono); font-size: 12px; color: var(--ink-2); white-space: nowrap;}
.rpt .inv-eco-cell, .rpt .inv-lic {font-family: var(--mono); font-size: 12px; color: var(--ink-3);}
.rpt .inv-lic.none {color: var(--ink-4); font-style: italic;}
.rpt .inv-dep {font-family: var(--mono); font-size: 12px; letter-spacing: .01em; text-transform: capitalize;
      border: 1px solid var(--border); border-radius: 3px; padding: 2px 6px; color: var(--ink-4); white-space: nowrap;}
.rpt .inv-dep.direct {color: var(--accent); border-color: rgba(201,164,91,.35);}
.rpt .inv-empty {padding: 30px 12px; text-align: center; font-size: 14px; color: var(--ink-4);}
.rpt .inv-dl {display: flex; align-items: center; justify-content: space-between; gap: 18px;
      flex-wrap: wrap; margin-top: 26px;}
.rpt .inv-dl-t {font-size: 14px; color: var(--ink-3); line-height: 1.55; max-width: 62ch;}
.rpt .inv-dl-t b {color: var(--ink-2); font-weight: 500;}
@media (max-width: 671.98px) {
.rpt .inv-subject {font-size: 20px;}
.rpt .inv-stat-n {font-size: 28px;}
.rpt .inv-search input {width: 100%;}
.rpt .inv-sec-h {gap: 12px;}
}
.rpt .sb-btn.locked {border-style: dashed; color: var(--ink-4); background: transparent;}
.rpt .sb-btn.locked:hover {border-style: solid;
      border-color: var(--accent); color: var(--accent); background: var(--accent-soft);}
.rpt .sb-btn.locked svg {opacity: .8;}
@keyframes badgeFlash {
      0%   { box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent) 55%, transparent); }
      45%  { box-shadow: 0 0 0 5px color-mix(in srgb, var(--accent) 26%, transparent); }
      100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent) 0%, transparent); }
    }
.rpt .badge-flash {animation: badgeFlash 1.25s cubic-bezier(.22,1,.36,1); border-radius: var(--r-lg);}
@media (prefers-reduced-motion: reduce) {
.rpt .badge-flash {animation: none;}
}
.rpt .sticky-bar {position: fixed; bottom: 32px; left: 50%; z-index: 60;
      width: max-content; max-width: calc(100vw - 28px);
      display: flex; align-items: center; gap: 12px; padding: 10px 14px;
      background: var(--popover); backdrop-filter: blur(30px);
      border: 1px solid var(--border-2); border-radius: var(--r-sm); box-shadow: var(--shadow-pop);
      transform: translateX(-50%) translateY(150%);
      transition: transform .35s cubic-bezier(0.2, 0.9, 0.3, 1.1);}
.rpt .sticky-bar.show {transform: translateX(-50%) translateY(0);}
.rpt .sb-grade {display: inline-flex; align-items: center; gap: 8px; font-family: var(--mono);
      font-size: 12px; color: var(--ink-3);}
.rpt .sb-grade b {font-family: var(--serif); font-style: italic; font-size: 20px;}
.rpt .sb-actions {margin-left: auto; display: flex; gap: 8px;}
.rpt .sb-btn {display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 11px;
      border: 1px solid var(--border-2); border-radius: var(--r-sm); background: var(--btn-face);
      color: var(--ink-2); font-family: var(--mono); font-size: 12px; font-weight: 500;
      cursor: pointer; transition: border-color .14s ease, color .14s ease, background .14s ease;}
.rpt .sb-btn:hover {border-color: var(--accent); color: var(--accent); background: var(--surface-2);}
.rpt .sb-btn.danger:hover {border-color: var(--crit); color: var(--crit);
      background: color-mix(in srgb, var(--crit) 9%, transparent);}
.rpt .sb-btn.primary {background: var(--accent); color: var(--cream); border-color: transparent;}
.rpt .sb-btn {position: relative; flex-shrink: 0;}
.rpt .sb-btn svg {width: 13px; height: 13px; flex-shrink: 0;}
@media (max-width: 671.98px) {
.rpt .sb-btn span {position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
        overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;}
.rpt .sb-btn {padding: 0 10px;}
}
.rpt .sb-badge-locked {border-style: dashed; color: var(--ink-4); background: transparent;}
.rpt .sb-badge-locked:hover {border-style: solid; border-color: var(--ink-3); color: var(--ink-2);
      background: transparent;}
.rpt .sb-badge-earned {position: relative; overflow: hidden;
      border-color: color-mix(in srgb, var(--accent) 55%, transparent);
      color: var(--accent); background: var(--accent-soft);}
.rpt .sb-badge-earned:hover {background: var(--accent); color: var(--cream);
      border-color: var(--accent);
      box-shadow: 0 10px 26px -12px color-mix(in srgb, var(--accent) 70%, transparent);}
.rpt .sb-badge-earned svg {transition: transform .35s cubic-bezier(.22,1,.36,1);}
.rpt .sb-badge-earned:hover svg {transform: rotate(-9deg) scale(1.14);}
.rpt .sb-badge-earned::before {content: ""; position: absolute; inset: 0; pointer-events: none;
      background: linear-gradient(115deg, transparent 35%, rgba(232,230,218,.45) 50%, transparent 65%);
      transform: translateX(-130%); animation: badgeSheen 6s ease-in-out 1.5s infinite;}
@keyframes badgeSheen { 0%,64% { transform: translateX(-130%); } 88%,100% { transform: translateX(130%); } }
@media (prefers-reduced-motion: reduce) {
.rpt .sb-badge-earned::before {animation: none;}
.rpt .sb-badge-earned svg {transition: none;}
}
.rpt .modal-overlay {position: fixed; inset: 0; z-index: 200; display: none;
      align-items: center; justify-content: center; padding: 24px;
      background: rgba(2,4,8,.62); backdrop-filter: blur(3px);}
.rpt .modal-overlay.open {display: flex;}
.rpt .modal-card {width: 100%; max-width: 520px;
      
      background: var(--popover); backdrop-filter: blur(30px) saturate(140%); -webkit-backdrop-filter: blur(30px) saturate(140%);
      border: 1px solid var(--border-2); border-radius: var(--r-xl); box-shadow: var(--shadow-pop);
      padding: 24px; position: relative;}
.rpt .modal-card h3 {font-size: 16px; font-weight: 700; color: var(--ink); margin-bottom: 5px;}
.rpt .modal-sub {font-size: 14px; color: var(--ink-3); margin-bottom: 16px; line-height: 1.5; max-width: 440px;}
.rpt .modal-close {position: absolute; top: 14px; right: 14px; width: 30px; height: 30px;
      display: flex; align-items: center; justify-content: center; border: 1px solid var(--border-2);
      border-radius: var(--r-md); background: var(--surface); color: var(--ink-3); cursor: pointer;}
.rpt .modal-close:hover {color: var(--ink); border-color: var(--accent);}
.rpt .to-top {position: fixed; bottom: 22px; right: 22px; z-index: 55; width: 42px; height: 42px;
      display: flex; align-items: center; justify-content: center; border-radius: 50%;
      background: var(--surface); border: 1px solid var(--border-2); color: var(--ink-2);
      box-shadow: var(--shadow-md); cursor: pointer; opacity: 0; visibility: hidden;
      transform: translateY(8px); transition: opacity .2s ease, transform .2s ease, visibility .2s;}
.rpt .to-top.show {opacity: 1; visibility: visible; transform: none;}
.rpt .to-top:hover {color: var(--accent); border-color: var(--accent);}
.rpt .sc-open {display: inline-flex; align-items: center; gap: 6px; align-self: flex-start;
      margin-left: auto; padding: 6px 10px; cursor: pointer;
      background: transparent; border: 1px solid transparent; border-radius: var(--r-md);
      font-family: var(--mono); font-size: 12px; letter-spacing: .01em;
      text-transform: none; color: var(--accent); white-space: nowrap;}
.rpt .sc-open:hover {color: var(--accent-lift); border-color: var(--accent);
      background: var(--accent-soft);}
.rpt .sc-open svg {width: 12px; height: 12px; transition: transform .18s ease;}
.rpt .sc-open[aria-expanded="true"] svg {transform: rotate(180deg);}
@media (prefers-reduced-motion: reduce) {
.rpt .sc-open svg {transition: none;}
}
@media (max-width: 671.98px) {
.rpt .sc-open {margin-left: 0; margin-top: 4px;}
}
.rpt .score-calc {margin: 14px 0 0; border: 1px solid var(--border); border-radius: var(--r-md);
      background: var(--surface);}
.rpt .score-calc[hidden] {display: none;}
.rpt .sc-body {padding: 16px 18px 18px;}
.rpt .sc-lede {margin: 0 0 14px; font-size: 14px; line-height: 1.6; color: var(--ink-3);}
.rpt .sc-ledger {width: 100%; border-collapse: collapse; font-family: var(--mono);
      font-size: 12px; color: var(--ink-2);}
.rpt .sc-ledger th {font-weight: 500; font-size: 12px; letter-spacing: .01em;
      text-transform: none; color: var(--ink-4); text-align: right;
      padding: 0 0 7px 14px; border-bottom: 1px solid var(--border);}
.rpt .sc-ledger th:first-child, .rpt .sc-ledger td:first-child {text-align: left; padding-left: 0;}
.rpt .sc-ledger td {padding: 7px 0 7px 14px; text-align: right;}
.rpt .sc-ledger tbody tr + tr td {border-top: 1px solid var(--border-2);}
.rpt .sc-sev {display: inline-flex; align-items: center; gap: 7px;}
.rpt .sc-sev i {width: 7px; height: 7px; border-radius: 50%; background: currentColor;
      flex-shrink: 0;}
.rpt .sc-ledger .sc-sub {color: var(--ink); font-weight: 600;}
.rpt .sc-n {color: var(--ink-4); font-weight: 400;}
.rpt .sc-to {color: var(--ink-4); font-weight: 400; margin: 0 5px;}
.rpt .sc-ledger tfoot td {padding-top: 9px; border-top: 1px solid var(--border);}
.rpt .sc-ledger tfoot .sc-label {color: var(--ink-3); text-align: left;}
.rpt .sc-ledger tfoot .sc-total {color: var(--accent); font-weight: 600;}
.rpt .sc-discount td {color: var(--ink-3);}
.rpt .sc-formula {margin-top: 16px; padding: 13px 15px; border-radius: var(--r-md);
      background: var(--bg-warm); border: 1px solid var(--border-2);
      font-family: var(--mono); font-size: 12px; line-height: 1.7; color: var(--ink-2);
      display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 9px;}
.rpt .sc-formula > span {white-space: nowrap;}
.rpt .sc-formula b {color: var(--accent); font-weight: 600;}
.rpt .sc-why {margin: 13px 0 0; font-size: 14px; line-height: 1.6; color: var(--ink-3);}
.rpt .sc-half {white-space: nowrap;}
.rpt .sc-i {position: relative; display: inline-flex; vertical-align: middle; margin-left: 5px; color: var(--ink-4); cursor: help;}
.rpt .sc-i svg {width: 12px; height: 12px;}
.rpt .sc-i:hover, .rpt .sc-i:focus {color: var(--accent); outline: none;}
.rpt .sc-pop {position: absolute; top: calc(100% + 9px); right: 0; transform: translateY(-4px);
      width: 270px; padding: 11px 13px; background: var(--popover); backdrop-filter: blur(25px);
      border: 1px solid var(--border-2); border-radius: var(--r-md); box-shadow: var(--shadow-pop); z-index: 60;
      font-family: var(--sans); font-size: 14px; line-height: 1.55; font-weight: 400; letter-spacing: normal;
      text-transform: none; text-align: left; color: var(--ink-2); white-space: normal;
      opacity: 0; visibility: hidden; pointer-events: none; transition: opacity .15s ease, transform .15s ease, visibility .15s;}
.rpt .sc-i:hover .sc-pop, .rpt .sc-i:focus .sc-pop {opacity: 1; visibility: visible; transform: translateY(0);}
.rpt .vd-split {display: flex; align-items: baseline; gap: 9px; margin-top: 9px;
      font-family: var(--mono); font-size: 12px; letter-spacing: .01em;
      text-transform: none; color: var(--ink-4);}
.rpt .vd-split b {font-family: var(--serif); font-style: italic; font-size: 16px;
      letter-spacing: 0; color: var(--ink-2); margin-left: 3px;}
@media (prefers-reduced-motion: reduce) {
.rpt .sc-pop {transition: opacity .15s ease, visibility .15s; transform: none;}
}
.rpt .sc-next {margin-top: 16px; padding-top: 15px; border-top: 1px solid var(--border);}
.rpt .sc-next-stat {margin: 0; font-size: 14px; line-height: 1.55; color: var(--ink-2);}
.rpt .sc-next-stat + .sc-next-stat {margin-top: 8px;}
.rpt .sc-next-stat em {font-family: var(--serif); font-style: italic; font-size: 16px;
      color: var(--accent); font-weight: 600;}
.rpt .sc-next-tail {margin-left: 7px; font-size: 14px; color: var(--ink-4);}
.rpt .fp-chip {display: inline-flex; align-items: center; vertical-align: middle;
      margin-left: 8px; font-family: var(--mono); font-size: 12px; font-weight: 600;
      letter-spacing: .01em; text-transform: capitalize; padding: 2px 7px;
      border-radius: var(--r-sm); border: 1px solid var(--border-2); white-space: nowrap;}
.rpt .fp-chip.fp-high {color: var(--accent); background: var(--accent-soft);}
.rpt .fp-chip.fp-med {color: var(--ink-2); background: var(--surface-2);}
.rpt .fp-chip.fp-low {color: var(--ink-3); background: transparent; border-style: dashed;}
.rpt .fp-chip.fp-confirmed {color: var(--cream); background: var(--accent); border-color: var(--accent);}
.rpt .fp-chip.fp-corroborated {color: var(--ink-2); background: var(--surface-2);}
.rpt .fp-chip.fp-ruled-out {color: var(--ink-4); background: transparent; border-style: dashed;
      text-decoration: line-through;}
.rpt .fp-reason {margin-top: 6px; font-family: var(--mono); font-size: 12px; line-height: 1.5;
      color: var(--ink-3);}
.rpt .fp-reason-k {color: var(--ink-4); text-transform: none; letter-spacing: .01em;
      font-size: 12px; margin-right: 8px;}
/* A likely false positive used to render at 60% opacity, about 2.5:1, below
   WCAG AA. Its AI line now says "likely false positive" in words, so only the
   message steps back one ink, and every part still reads at 4.5:1 or more. */
.rpt .finding-row.fp-dim .finding-msg {color: var(--ink-3);}
.rpt .fp-why {border-left: 2px solid var(--accent); border-radius: 0 var(--r-md) var(--r-md) 0;
      background: color-mix(in srgb, var(--accent) 5%, transparent);
      padding: 12px 16px; margin-bottom: 14px;}
.rpt .fp-why-head {display: flex; align-items: center; gap: 7px; font-family: var(--mono);
      font-size: 12px; letter-spacing: .01em; text-transform: none;
      color: var(--accent); margin-bottom: 7px;}
.rpt .fp-why-head svg {width: 13px; height: 13px; flex-shrink: 0;}
.rpt .fp-why p {margin: 0; font-size: 14px; line-height: 1.6; color: var(--ink-2);}
.rpt .fp-why:last-child {margin-bottom: 0;}
.rpt .score-note {display: flex; align-items: flex-start; gap: 10px; margin: 18px 0 20px;
      padding: 12px 15px; border: 1px solid var(--border); border-radius: var(--r-md);
      background: var(--surface); font-size: 14px; line-height: 1.6; color: var(--ink-3);}
.rpt .score-note svg {width: 14px; height: 14px; flex-shrink: 0; margin-top: 2px; color: var(--ink-4);}
.rpt .score-note b {color: var(--ink-2); font-weight: 600;}
.rpt .unlock {margin-top: 44px; padding: 30px 32px;
          background: var(--surface); border: 1px solid var(--border);
          border-radius: var(--r-lg);}
.rpt .unlock-eyebrow {display: flex; align-items: center; gap: 7px;
          font-family: var(--mono); font-size: 12px; font-weight: 600; letter-spacing: .01em;
          text-transform: none; color: var(--accent);}
.rpt .unlock-eyebrow svg {width: 13px; height: 13px; flex: none;}
.rpt .unlock-title {font-family: var(--serif); font-weight: 300; font-size: 28px;
          line-height: 1.2; letter-spacing: -.015em; color: var(--ink); margin-top: 12px;}
.rpt .unlock-title em {font-style: italic; color: var(--accent);}
.rpt .unlock-body {font-size: 14px; color: var(--ink-3); line-height: 1.65;
          max-width: 58ch; margin-top: 12px;}
.rpt .unlock-body b {color: var(--ink-2); font-weight: 500;}
.rpt .unlock-actions {display: flex; align-items: center; gap: 20px; flex-wrap: wrap;
          margin-top: 26px; padding-top: 22px; border-top: 1px solid var(--border);}
.rpt .unlock-alt {display: inline-flex; align-items: center; gap: 6px;
          font-family: var(--mono); font-size: 12px; color: var(--ink-3);
          transition: color .16s ease;}
.rpt .unlock-alt:hover {color: var(--accent);}
.rpt .unlock-alt .arr {transition: transform .18s cubic-bezier(.22,1,.36,1);}
.rpt .unlock-alt:hover .arr {transform: translateX(3px);}
@media (prefers-reduced-motion: reduce) {
.rpt .unlock-alt .arr {transition: none;}
}
@media (max-width: 671.98px) {
.rpt .unlock {padding: 24px 20px;}
.rpt .unlock-title {font-size: 20px;}
.rpt .unlock-actions {align-items: stretch; flex-direction: column; gap: 16px;}
.rpt .unlock-actions .btn {width: 100%;}
}

.rpt { --gc: var(--accent); display: flex; flex-direction: column; gap: 18px;
  width: 100%; padding-bottom: 120px; }

.rpt .rpt-pill { display: inline-flex; align-items: center; gap: 8px; }
.rpt .rpt-pill-mark { width: 15px; height: 15px; flex: none; }
.rpt .platform-pill[aria-pressed="true"] .rpt-pill-mark[fill="currentColor"] { fill: var(--cream); }

.rpt .rpt-verdict { display: flex; flex-direction: column; }
/* .vd-eyebrow's flex-basis: 100% is for a row layout; in this column it meant
   100% of the card's height and stretched the label into a tall empty band. */
.rpt .rpt-verdict > .vd-eyebrow { flex: 0 0 auto; }
.rpt .rpt-facts { margin-top: auto; padding-top: 16px; border-top: 1px solid var(--border);
  display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; }
.rpt .rpt-cover { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px 16px;
  padding-top: 14px; border-top: 1px solid var(--border); }
.rpt .rpt-cover div { display: flex; flex-direction: column; gap: 2px; }
.rpt .rpt-cover b { font-family: var(--serif); font-size: 20px; font-weight: 400; color: var(--ink); line-height: 1.1; }
.rpt .rpt-cover span { font-family: var(--mono); font-size: 12px; color: var(--ink-4); }
.rpt .rpt-cover b .rpt-of { font-family: var(--mono); font-size: 12px; color: var(--ink-4); }
@media (max-width: 671.98px) { .rpt .rpt-cover { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.rpt.grade-A { --gc: #5bae84; }
.rpt.grade-B { --gc: #5cc48c; }
.rpt.grade-C { --gc: #d9c062; }
.rpt.grade-D { --gc: #db9450; }
.rpt.grade-F { --gc: #e0796b; }

.rpt .rpt-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-lg);
  padding: 16px 18px; min-width: 0; }
.rpt .rpt-card-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }

.rpt .rpt-fold { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; }
.rpt .rpt-fold > summary::-webkit-details-marker { display: none; }
.rpt .rpt-fold > .rpt-card-head { cursor: pointer; list-style: none; user-select: none; }
.rpt .rpt-fold > .rpt-card-head::after { content: ""; flex: none; width: 6px; height: 6px;
  margin-left: 4px; border-right: 1.5px solid var(--ink-4); border-bottom: 1.5px solid var(--ink-4);
  transform: rotate(45deg); transition: transform .14s ease; }
.rpt .rpt-fold:not([open]) > .rpt-card-head::after { transform: rotate(-45deg); }
.rpt .rpt-fold:not([open]) > .rpt-card-head { margin-bottom: 0; }
@media (prefers-reduced-motion: reduce) { .rpt .rpt-fold > .rpt-card-head::after { transition: none; } }
.rpt .rpt-card-title { margin: 0; font-family: var(--mono); font-size: 14px; font-weight: 500; color: var(--ink); }
.rpt .rpt-card-meta { margin-left: auto; font-family: var(--mono); font-size: 12px; color: var(--ink-4); }
.rpt .rpt-sec-head { display: flex; align-items: baseline; gap: 10px; margin: 6px 0 12px; }
.rpt .rpt-sec-head h2 { margin: 0; font-family: var(--mono); font-size: 16px; font-weight: 500; color: var(--ink); }
.rpt .rpt-sec-head .ct { font-family: var(--mono); font-size: 12px; color: var(--ink-4); }
.rpt .is-crit { color: var(--crit); }
.rpt .is-good { color: var(--ok); }
.rpt .is-none { color: var(--ink-4); }
.rpt .rpt-arrow { color: var(--ink-4); }
.rpt .rpt-none { margin: 0; font-size: 14px; line-height: 1.6; color: var(--ink-3); }
.rpt .rpt-foot { margin: 12px 0 0; padding-top: 10px; border-top: 1px solid var(--border);
  font-size: 12px; color: var(--ink-4); }
.rpt .rpt-mt32 { margin-top: 32px; }
.rpt .rpt-offscreen { position: fixed; top: 0; left: 0; opacity: 0; pointer-events: none; }
.rpt .rpt-table-wrap { overflow-x: auto; }

.rpt table thead th { font-family: var(--mono); font-size: 12px; font-weight: 600; letter-spacing: 0;
  text-transform: none; color: var(--ink); text-align: left; padding: 10px 12px;
  border-bottom: 1px solid var(--border-2); box-shadow: 0 2px 6px -2px rgba(0, 0, 0, .25); white-space: nowrap; }
.rpt table tbody tr:last-child > * { border-bottom: none; }

.rpt .rpt-hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 14px; }
.rpt .rpt-verdict-row { display: flex; align-items: center; gap: 22px; margin-top: 12px; }
.rpt .rpt-gauge { width: 176px; height: 176px; }
.rpt .rpt-letter { font-family: var(--serif); font-style: normal; font-weight: 600; font-size: 74px; line-height: .9;
  color: var(--gc); text-shadow: 0 0 22px color-mix(in srgb, var(--gc) 38%, transparent); }
.rpt .rpt-sub { font-family: var(--mono); font-size: 16px; color: var(--ink); margin-top: 4px; }
.rpt .rpt-verdict-body { min-width: 0; }
.rpt .rpt-repo { margin: 0; font-family: var(--mono); font-size: clamp(16px, 2.2vw, 20px); font-weight: 600;
  color: var(--ink); overflow-wrap: break-word; }
.rpt .rpt-meta { display: flex; flex-wrap: wrap; gap: 4px 12px; margin-top: 10px; font-family: var(--mono);
  font-size: 12px; color: var(--ink-4); }
.rpt .rpt-sha { color: var(--accent); }
.rpt .rpt-gone { color: var(--ok); cursor: help; }
.rpt .rpt-math .sc-lede { margin: 6px 0 10px; font-size: 14px; }
.rpt .sc-sev.sev-critical { color: var(--crit); }
.rpt .sc-sev.sev-high { color: var(--high); }
.rpt .sc-sev.sev-medium { color: var(--med); }
.rpt .sc-sev.sev-low { color: var(--low); }
.rpt .rpt-grade-ink { color: var(--gc); }

.rpt .rpt-tabs { margin: 4px 0 0; }
.rpt .rpt-note { margin: 0; padding: 11px 14px; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);
  font-size: 14px; line-height: 1.6; color: var(--ink-3); }
.rpt .rpt-note b { color: var(--ink-2); font-weight: 600; }
.rpt .rpt-note.is-warn { border-color: var(--high-line); color: var(--ink-2); }
.rpt .tab-panel.active { display: flex; flex-direction: column; gap: 18px; }

.rpt .rpt-prompt { margin: 0; }
.rpt .rpt-prompt-body { position: relative; }
.rpt .rpt-prompt-text { font-family: var(--mono); font-size: 12px; line-height: 1.65; color: var(--ink-2);
  background: var(--bg-warm); border: 1px solid var(--border-2); border-radius: 0; padding: 20px 22px;
  overflow-x: auto; white-space: pre-wrap; word-break: break-word; margin: 0; }


.rpt .rpt-charts { display: grid; grid-template-columns: minmax(0, 1fr); max-width: 760px; gap: 12px; }
/* "Where the risk is", inside the verdict card: the same table as a compact grid. */
.rpt .rpt-risk { container-type: inline-size; min-width: 0; }
.rpt .rpt-risk .rpt-heat { border-spacing: 3px; }
.rpt .rpt-risk-cap { caption-side: top; text-align: left; padding: 0 0 6px 3px; font-family: var(--mono);
  font-size: 12px; color: var(--ink-2); }
.rpt .rpt-risk-cap span { margin-left: 8px; color: var(--ink-4); font-size: 12px; }
.rpt .rpt-risk .rpt-heat thead th { padding: 2px 3px 4px; font-size: 12px; }
.rpt .rpt-risk .heat { height: 30px; font-size: 16px; }
.rpt .rpt-risk .heat-total { font-size: 16px; }
.rpt .rpt-risk .rpt-type { gap: 8px; font-size: 12px; }
.rpt .rpt-delta { color: var(--ink-2); }
.rpt .rpt-prompt .rpt-sec-head { flex-wrap: wrap; }
.rpt .rpt-gain { margin-left: auto; font-family: var(--mono); font-size: 12px; color: var(--ink-3); }
.rpt .rpt-gain b { font-weight: 600; }
.rpt .rpt-age-line { margin: 0 0 6px; font-size: 14px; line-height: 1.55; color: var(--ink-3); }
.rpt .rpt-age-line b { font-weight: 600; }
.rpt .rpt-heat { width: 100%; border-collapse: separate; border-spacing: 4px; table-layout: fixed; }
.rpt .rpt-heat thead th { text-align: center; box-shadow: none; padding: 4px 4px 8px; }
.rpt .rpt-heat thead th:first-child { text-align: left; width: 34%; }
.rpt .rpt-heat thead th.sev-critical { color: var(--crit); }
.rpt .rpt-heat thead th.sev-high { color: var(--high); }
.rpt .rpt-heat thead th.sev-medium { color: var(--med); }
.rpt .rpt-heat thead th.sev-low { color: var(--low); }
.rpt .rpt-heat tbody th { text-align: left; font-weight: 400; padding: 0 6px 0 0; }
.rpt .rpt-type { display: inline-flex; align-items: center; gap: 10px; font-family: var(--mono); font-size: 12px; color: var(--ink); }
.rpt .rpt-type small { display: block; font-size: 12px; color: var(--ink-4); margin-top: 2px; }
.rpt .heat { --hc: var(--ink-4); height: 42px; text-align: center; border-radius: var(--r-sm);
  font-family: var(--serif); font-size: 20px; color: var(--ink); background: var(--bg-warm); }
.rpt .heat[data-level="1"] { background: color-mix(in srgb, var(--hc) 14%, var(--bg-warm)); }
.rpt .heat[data-level="2"] { background: color-mix(in srgb, var(--hc) 24%, var(--bg-warm)); }
.rpt .heat[data-level="3"] { background: color-mix(in srgb, var(--hc) 34%, var(--bg-warm)); }
.rpt .heat[data-level="4"] { background: color-mix(in srgb, var(--hc) 44%, var(--bg-warm)); }
.rpt .heat-critical { --hc: var(--crit); } .rpt .heat-high { --hc: var(--high); }
.rpt .heat-medium { --hc: var(--med); } .rpt .heat-low { --hc: var(--low); }
.rpt .heat.is-zero { color: var(--ink-4); font-size: 16px; background: var(--bg-warm); }
.rpt .heat-total { text-align: center; font-family: var(--serif); font-size: 20px; color: var(--ink);
  border-left: 1px solid var(--border); }

.rpt .rpt-age-bar { display: flex; height: 14px; border-radius: 4px; overflow: hidden; margin: 2px 0 12px; }
.rpt .age-new { --ac: var(--low); } .rpt .age-week { --ac: var(--med); }
.rpt .age-month { --ac: var(--high); } .rpt .age-older { --ac: var(--crit); }
.rpt .rpt-age-bar i { background: var(--ac); }
.rpt .rpt-oldest { margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--border); }
.rpt .rpt-oldest-h { font-family: var(--mono); font-size: 12px; color: var(--ink-4); margin-bottom: 4px; }
.rpt .rpt-oldest-row { display: grid; grid-template-columns: 50px minmax(0, 1fr) minmax(60px, 90px) 40px;
  align-items: center; gap: 10px; padding: 6px 0; }
.rpt .rpt-oldest-t { font-size: 12px; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rpt .rpt-oldest-t span { color: var(--ink-4); font-family: var(--mono); font-size: 12px; }
.rpt .rpt-oldest-bar { height: 6px; border-radius: 3px; background: var(--bg-warm); overflow: hidden; }
.rpt .rpt-oldest-bar i { display: block; height: 100%; }
.rpt .sev-bg-critical { background: var(--crit); } .rpt .sev-bg-high { background: var(--high); }
.rpt .sev-bg-medium { background: var(--med); } .rpt .sev-bg-low { background: var(--low); }
.rpt .rpt-oldest-d { text-align: right; font-family: var(--mono); font-size: 12px; color: var(--ink); }

.rpt .rpt-top5 .rpt-table-wrap { margin: 0 -4px; }
.rpt .rpt-t5 { width: 100%; border-collapse: collapse; }
.rpt .rpt-t5 td { padding: 11px 12px; border-bottom: 1px solid var(--border); vertical-align: middle; font-size: 14px; }
.rpt .t5-row { cursor: pointer; transition: background .12s ease; }
.rpt .t5-row:hover, .rpt .t5-row:focus-visible { background: var(--surface-2); outline: none; }
.rpt .t5-rank { width: 34px; font-family: var(--serif); font-size: 20px; color: var(--accent); }
.rpt .t5-title { display: block; color: var(--ink); }
.rpt .t5-loc { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; margin-top: 3px;
  font-family: var(--mono); font-size: 12px; color: var(--ink-4); }
.rpt .t5-why { color: var(--ink-2); font-size: 12px; white-space: nowrap; }
.rpt .t5-ready { font-family: var(--mono); font-size: 12px; color: var(--accent); }
.rpt .t5-lock, .rpt .t5-none { font-family: var(--mono); font-size: 12px; color: var(--ink-4); }
.rpt .t5-gain { text-align: right; font-family: var(--serif); font-size: 20px; color: var(--ok); white-space: nowrap; }
.rpt .rpt-t5-foot { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 14px; margin-top: 12px;
  font-family: var(--mono); font-size: 12px; color: var(--ink-3); }
.rpt .rpt-t5-foot b { font-family: var(--serif); font-size: 20px; font-weight: 400; color: var(--ink); }
.rpt .rpt-t5-meter { flex: 1 1 120px; height: 6px; border-radius: 3px; background: var(--bg-warm); overflow: hidden; }
.rpt .rpt-t5-meter i { display: block; height: 100%; background: var(--ok); }
.rpt .ext { display: inline-flex; color: var(--accent); text-decoration: none; }
.rpt .ext:hover { text-decoration: underline; text-underline-offset: 3px; }

.rpt .rpt-open-row:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }

.rpt .rpt-findings { margin-top: 4px; }
.rpt .sev-group-header { width: 100%; font: inherit; text-align: left; color: inherit;
  border-left: 3px solid var(--sc, var(--border)); }
.rpt .sev-group-header .sev-group-dot { background: var(--sc, var(--ink-4));
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--sc, var(--ink-4)) 14%, transparent); }
.rpt .sev-group-header .sev-group-label { color: var(--sc, var(--ink-3)); }
.rpt .sev-group-header.sev-critical { --sc: var(--crit); } .rpt .sev-group-header.sev-high { --sc: var(--high); }
.rpt .sev-group-header.sev-medium { --sc: var(--med); } .rpt .sev-group-header.sev-low { --sc: var(--low); }
.rpt .rpt-frow { display: flex; align-items: flex-start; gap: 12px; padding: 13px 16px; cursor: pointer; }
.rpt .rpt-frow:hover, .rpt .rpt-frow:focus-visible { background: var(--surface); outline: none; }
.rpt .rpt-frow > .ticon { margin-top: 1px; }
.rpt .rpt-frow > .finding-main { min-width: 0; flex: 1 1 auto; }
.rpt .rpt-frow .finding-rule, .rpt .rpt-frow .finding-msg { overflow-wrap: anywhere; }
/* On a phone the severity chip and type icon sit on their own line, so the text gets the
   whole row instead of a column 86 px wide. */
@media (max-width: 671.98px) {
  .rpt .rpt-frow { flex-wrap: wrap; row-gap: 8px; }
  .rpt .rpt-frow > .finding-chevron { margin-left: auto; }
  .rpt .rpt-frow > .finding-main { order: 3; flex-basis: 100%; }
}
.rpt .rpt-floc { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 8px; margin-top: 3px; }
.rpt .rpt-floc .finding-loc { margin-top: 0; }
.rpt .rpt-open { transform: none; }

.rpt .rpt-unlock { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px 24px;
  padding: 16px 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
.rpt .rpt-unlock-t { font-size: 14px; line-height: 1.6; color: var(--ink-2); max-width: 64ch; }
.rpt .rpt-unlock-t b { color: var(--accent); }
.rpt .rpt-unlock-k { margin-right: 8px; font-family: var(--mono); font-size: 12px; color: var(--accent); }
.rpt .rpt-unlock-a { display: flex; align-items: center; flex-wrap: wrap; gap: 12px 18px; }

.rpt .rpt-htable .hwhen { color: var(--ink); text-decoration: none; }
.rpt .rpt-htable a.hwhen:hover { color: var(--accent); }
.rpt .hgrade.grade-A { color: #5bae84; } .rpt .hgrade.grade-B { color: #5cc48c; }
.rpt .hgrade.grade-C { color: #d9c062; } .rpt .hgrade.grade-D { color: #db9450; }
.rpt .hgrade.grade-F { color: #e0796b; }
.rpt .eco-0 { background: var(--accent); } .rpt .eco-1 { background: var(--ink-3); }
.rpt .eco-2 { background: var(--low); } .rpt .eco-3 { background: var(--med); } .rpt .eco-4 { background: var(--high); }
.rpt .inv-eco-item { gap: 6px; }
.rpt .rpt-eco-bar .inv-eco-seg { min-width: 2px; }
.rpt .inv-dupe { align-items: center; }
.rpt .inv-flag-n { font-family: var(--mono); font-size: 12px; color: var(--ink-4); }
.rpt .inv-stat-l .ticon { margin-right: 4px; }
.rpt .inv-lic-bar i { width: 0; }

.rpt .rpt-sticky { left: calc(50% + var(--rail-w, 0px) / 2); }
.rpt .sb-more { display: none; position: relative; }
.rpt .sb-more summary { list-style: none; }
.rpt .sb-more summary::-webkit-details-marker { display: none; }
.rpt .sb-more-menu { position: absolute; right: 0; bottom: calc(100% + 8px); min-width: 170px; padding: 6px;
  background: var(--popover); backdrop-filter: blur(30px); -webkit-backdrop-filter: blur(30px);
  border: 1px solid var(--border-2); border-radius: var(--r-md); box-shadow: var(--shadow-pop); }
.rpt .sb-more-item { width: 100%; padding: 9px 10px; text-align: left; background: none; border: none;
  border-radius: var(--r-sm); font-family: var(--mono); font-size: 12px; color: var(--ink-2); cursor: pointer; }
.rpt .sb-more-item { display: flex; align-items: center; gap: 8px; }
.rpt a.sb-more-item { text-decoration: none; }
.rpt .sb-more-item svg { width: 13px; height: 13px; flex-shrink: 0; }
.rpt .sb-more-item:hover { color: var(--ink); background: var(--surface-2); }
.rpt .sb-more-item.danger:hover { color: var(--crit); background: color-mix(in srgb, var(--crit) 9%, transparent); }

@media (min-width: 672px) {
  .rpt .rpt-sticky { max-width: calc(100vw - var(--rail-w, 0px) - 28px); overflow-x: auto; }
}
@media (max-width: 1055.98px) {
  .rpt .rpt-t5 thead { display: none; }
  .rpt .rpt-t5, .rpt .rpt-t5 tbody { display: block; }
  .rpt .rpt-t5 tr { display: grid; grid-template-columns: 30px minmax(0, 1fr) auto;
    grid-template-areas: "rank find gain" "rank sev fix" "rank why why"; gap: 4px 10px;
    padding: 12px 0; border-bottom: 1px solid var(--border); }
  .rpt .rpt-t5 td { display: block; padding: 0; border: none; }
  .rpt .rpt-t5 .t5-rank { grid-area: rank; }
  .rpt .rpt-t5 .t5-find { grid-area: find; }
  .rpt .rpt-t5 .t5-sev { grid-area: sev; }
  .rpt .rpt-t5 .t5-fix { grid-area: fix; text-align: right; }
  .rpt .rpt-t5 .t5-why { grid-area: why; white-space: normal; }
  .rpt .rpt-t5 .t5-gain { grid-area: gain; }
  .rpt .rpt-t5 .t5-type { display: none; }
  .rpt .rpt-charts { grid-template-columns: minmax(0, 1fr); }
  .rpt .rpt-gauge { width: 140px; height: 140px; }
  .rpt .rpt-letter { font-size: 58px; }
  .rpt .rpt-verdict-row { flex-direction: column; align-items: flex-start; gap: 12px; }
}

@media (max-width: 671.98px) {
  .rpt { gap: 14px; }
  .rpt .rpt-hero { grid-template-columns: minmax(0, 1fr); }
  .rpt .rpt-verdict-row { flex-direction: row; align-items: center; }
  .rpt .rpt-gauge { width: 120px; height: 120px; }
  .rpt .rpt-letter { font-size: 54px; }
  .rpt .rpt-sticky { left: 50%; }
  .rpt .rpt-t5 thead { display: none; }
  .rpt .rpt-t5, .rpt .rpt-t5 tbody { display: block; }
  .rpt .rpt-t5 tr { display: grid; grid-template-columns: 30px minmax(0, 1fr) auto;
    grid-template-areas: "rank find gain" "rank sev fix" "rank why why"; gap: 4px 10px;
    padding: 12px 0; border-bottom: 1px solid var(--border); }
  .rpt .rpt-t5 td { display: block; padding: 0; border: none; }
  .rpt .rpt-t5 .t5-rank { grid-area: rank; }
  .rpt .rpt-t5 .t5-find { grid-area: find; }
  .rpt .rpt-t5 .t5-sev { grid-area: sev; }
  .rpt .rpt-t5 .t5-fix { grid-area: fix; text-align: right; }
  .rpt .rpt-t5 .t5-why { grid-area: why; white-space: normal; }
  .rpt .rpt-t5 .t5-gain { grid-area: gain; }
  .rpt .rpt-t5 .t5-type { display: none; }
}

.rpt .h-short { display: none; }
.rpt .rpt-charts > .rpt-card { container-type: inline-size; }
@container (max-width: 620px) {
  .rpt .rpt-heat .h-long { display: none; }
  .rpt .rpt-heat .h-short { display: inline; }
  .rpt .rpt-heat thead th:first-child { width: 42%; }
}

@media (max-width: 1055.98px) {
  .rpt .sticky-bar .sb-btn span, .rpt .sticky-bar .copy-mega-sm .cm-face { position: absolute; width: 1px; height: 1px;
    overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .rpt .sticky-bar .copy-mega-sm .cm-face svg { position: static; }
  .rpt .sticky-bar .copy-mega-sm::before { content: ""; width: 13px; height: 13px;
    background: currentColor; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Crect x='9' y='9' width='13' height='13' rx='2'/%3E%3Cpath d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1'/%3E%3C/svg%3E") center / contain no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Crect x='9' y='9' width='13' height='13' rx='2'/%3E%3Cpath d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1'/%3E%3C/svg%3E") center / contain no-repeat; }
}

@media (max-width: 671.98px) {
  .rpt .sticky-bar .sb-btn, .rpt .sticky-bar .copy-mega-sm { height: 40px; min-width: 40px; justify-content: center; }
  .rpt .sticky-bar .sb-del { display: none; }
  .rpt .sticky-bar .sb-export { display: none; }
  .rpt .sticky-bar { flex-wrap: wrap; row-gap: 8px; }
  .rpt .sticky-bar .sb-more { display: block; }
  .rpt .sticky-bar .sb-more summary { height: 40px; min-width: 40px; }
}

/* Partial-scope notice on the report. A hairline, not a filled panel: it is
   a fact about the grade, and it has to be readable rather than alarming. */
.rpt-scope { margin: 10px 0 0; padding: 8px 0 0; border-top: 1px dashed var(--border-2);
  font-size: 12px; line-height: 1.55; color: var(--ink-3); max-width: 62ch; }
.rpt-scope b { color: var(--med); font-weight: 600; }
.rpt-scope code { font-family: var(--mono); font-size: 12px; color: var(--ink-2); }

/* The hero stacks by its own width, not the screen's. Inside the shell the rail
   takes 256px, so an 820px tablet leaves the report about 540px. */
.rpt .rpt-lead { container-type: inline-size; }
@container (max-width: 940px) {
  .rpt .rpt-hero { grid-template-columns: minmax(0, 1fr); }
  .rpt .rpt-verdict-row { flex-direction: row; align-items: center; }
}
@container (max-width: 600px) {
  .rpt .rpt-cover { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ── Score tile + breakdown dialog ────────────────────────────────────────────────
   The tile answers "how far from an A" in one look: a 0 to 100 track cut into the grade
   bands, with a tick for code and one for dependencies. The arithmetic lives in a dialog,
   laid out as the three steps it really is. */
/* "How this is scored": small, brass, right-aligned beside the grade it explains. */
.rpt .rpt-howscored { display: inline-flex; align-items: center; gap: 6px; align-self: flex-start; margin-left: auto;
  padding: 6px 10px; cursor: pointer; background: transparent; border: 1px solid transparent; border-radius: var(--r-md);
  font-family: var(--mono); font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: var(--accent);
  white-space: nowrap; transition: border-color .15s ease, background .15s ease; }
.rpt .rpt-howscored svg { width: 12px; height: 12px; }
.rpt .rpt-howscored:hover { border-color: var(--border-2); background: var(--accent-soft); }
.rpt .rpt-howscored:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.rpt .sm-next { margin: 14px 0 0; padding: 10px 12px; border-left: 2px solid var(--accent); background: var(--accent-soft);
  border-radius: 0 var(--r-sm) var(--r-sm) 0; font-size: 14px; line-height: 1.5; color: var(--ink); }
.rpt .sm-next span { color: var(--ink-3); margin-left: 4px; }
/* One full-width verdict card; the risk chart keeps a readable width inside it. */
.rpt .rpt-hero { grid-template-columns: minmax(0, 1fr); }
.rpt .rpt-verdict-row { align-items: flex-start; }
.rpt .rpt-verdict-row > .rpt-gauge { align-self: center; }
.rpt .rpt-facts > * { max-width: 900px; }
.rpt .rpt-sha { display: inline-flex; align-items: center; padding: 1px 7px; border: 1px solid color-mix(in srgb, var(--accent) 45%, transparent);
  border-radius: var(--r-sm); background: var(--accent-soft); }
/* The scanned branch, when it is not the default one. Neutral, not brass: it
   is a fact about the scan, not the next action. */
.rpt .rpt-branch { display: inline-flex; align-items: center; gap: var(--spacing-02); max-width: 100%;
  padding: 1px 7px; border: 1px solid var(--border-2); border-radius: var(--r-sm); color: var(--ink-2);
  overflow-wrap: anywhere; }
.rpt .rpt-branch svg { flex: none; }
.rpt .rpt-gone { display: inline-flex; align-items: center; padding: 1px 7px; border: 1px solid color-mix(in srgb, var(--ok) 45%, transparent);
  border-radius: var(--r-sm); }

.rpt .sm { margin: auto; inset: 0; width: min(620px, calc(100vw - 32px)); max-height: min(86vh, 820px); padding: 24px 26px 26px;
  border: 1px solid var(--border-2); border-radius: var(--r-lg); background: var(--surface); color: var(--ink);
  box-shadow: 0 30px 80px -20px rgba(0, 0, 0, .6); overflow-y: auto; }
.rpt .sm::backdrop { background: rgba(3, 5, 9, .62); backdrop-filter: blur(3px); }
.rpt .sm[open] { animation: sm-in .2s cubic-bezier(.2, .7, .3, 1); }
@keyframes sm-in { from { opacity: 0; transform: translateY(8px) scale(.985); } }
.rpt .sm:focus { outline: none; }
.rpt .sm-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.rpt .sm-title { margin: 0; font-family: var(--serif); font-size: 28px; font-weight: 400; letter-spacing: -.012em; line-height: 1.2; }
.rpt .sm-lede { margin: 8px 0 0; font-size: 14px; line-height: 1.55; color: var(--ink-3); max-width: 60ch; }
.rpt .sm-steps { list-style: none; counter-reset: sm; margin: 22px 0 0; padding: 0; }
.rpt .sm-step { counter-increment: sm; position: relative; padding: 0 0 22px 40px; }
.rpt .sm-step::before { content: counter(sm); position: absolute; left: 0; top: -1px; display: grid; place-items: center;
  width: 24px; height: 24px; border: 1.5px solid var(--accent); border-radius: 50%;
  font-family: var(--mono); font-size: 12px; font-weight: 600; color: var(--accent); }
.rpt .sm-step::after { content: ""; position: absolute; left: 11.5px; top: 28px; bottom: 4px; width: 1px; background: var(--border-2); }
.rpt .sm-step:last-child { padding-bottom: 0; }
.rpt .sm-step:last-child::after { display: none; }
.rpt .sm-step h3 { margin: 0 0 10px; font-family: var(--serif); font-size: 16px; font-weight: 500; color: var(--ink); }
.rpt .sm-ledger td:nth-child(2) { color: var(--ink-3); }
.rpt .sm-sum { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 0; margin: 0; font-family: var(--mono); font-size: 12px; }
.rpt .sm-sum dt, .rpt .sm-sum dd { padding: 7px 0; border-bottom: 1px solid var(--border); }
.rpt .sm-sum dt { padding-right: 18px; color: var(--ink-3); }
.rpt .sm-sum dd { margin: 0; text-align: right; color: var(--ink-2); }
.rpt .sm-sum dd b { font-weight: 600; color: var(--accent); }
.rpt .sm-sum dd small { display: block; margin-top: 2px; font-size: 12px; color: var(--ink-4); }
.rpt .sm-sum dt:last-of-type, .rpt .sm-sum dd:last-of-type { border-bottom: none; }
.rpt .sm-formula { margin: 0; padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--r-md); background: var(--bg-warm);
  font-family: var(--mono); font-size: 14px; color: var(--ink-2); overflow-x: auto; white-space: nowrap; }
.rpt .sm-results { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 12px; }
.rpt .sm-results div { display: flex; flex-direction: column; gap: 2px; padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--r-md); }
.rpt .sm-results span { font-family: var(--mono); font-size: 12px; color: var(--ink-4); }
.rpt .sm-results small { font-family: var(--mono); font-size: 12px; color: var(--ink-4); }
.rpt .sm-results b { font-family: var(--serif); font-size: 28px; font-weight: 500; line-height: 1.1; color: var(--ink); }
.rpt .sm-g { font-family: var(--serif); font-style: normal; font-size: 14px; font-weight: 600; }
.rpt .sm-g.g-A, .rpt .sm-g.g-B { color: var(--ok); } .rpt .sm-g.g-C { color: var(--med); }
.rpt .sm-g.g-D { color: var(--high); } .rpt .sm-g.g-F { color: var(--crit); }
.rpt .sm-note { margin: 10px 0 0; font-size: 12px; color: var(--ink-4); }
@media (max-width: 671.98px) {
  .rpt .sm { padding: 20px 16px; }
  .rpt .sm-step { padding-left: 34px; }
  .rpt .sm-results { gap: 6px; }
  .rpt .sm-results div { padding: 8px; }
  .rpt .sm-results b { font-size: 20px; }
  .rpt .sm-results small { display: none; }
}
@media (prefers-reduced-motion: reduce) { .rpt .sm[open] { animation: none; } }
/* Narrow screens: the control drops to its own line under the verdict, so the repo name
   and verdict keep the width beside the gauge. */
@media (max-width: 671.98px) {
  .rpt .rpt-verdict-row { flex-wrap: wrap; }
  .rpt .rpt-verdict-body { flex: 1 1 0; }
  .rpt .rpt-howscored { order: 3; flex: 0 0 100%; justify-content: flex-start; margin-left: 0; padding-left: 0; }
  .rpt .rpt-howscored:hover { background: transparent; border-color: transparent; }
}
/* One divider in the verdict card, between the verdict and the chart. The label rule sat
   right under the card's own top edge, and the stats rule repeated the chart's. */
.rpt .rpt-verdict > .vd-eyebrow::after { display: none; }
.rpt .rpt-verdict .rpt-cover { border-top: 0; padding-top: 4px; }
/* Declared components: named in a manifest with no lockfile, so the version is a range. */
.rpt .inv-declared {margin: 22px 0 0; padding: 14px 18px; border: 1px dashed var(--border-2);
      border-radius: var(--r-lg);}
.rpt .inv-declared p {margin: 0; font-size: 14px; line-height: 1.62; color: var(--ink-3); max-width: 78ch;}
.rpt .inv-declared b {color: var(--ink); font-weight: 600;}
.rpt .inv-range {color: var(--ink-3);}
.rpt .inv-decl {font-family: var(--mono); font-size: 12px; color: var(--ink-4);
      border: 1px dashed var(--border-2); border-radius: 3px; padding: 1px 5px;}

/* Dependency map. The one loud thing is the brass trace from manifest to the picked package. */
.rpt .dmap-sec {margin-top: 30px;}
.rpt .dmap-lede {margin: 12px 0 14px; font-size: 14px; line-height: 1.6; color: var(--ink-3); max-width: 70ch;}
.rpt .dmap-bar {display: flex; flex-wrap: wrap; gap: 10px 18px; align-items: center; margin-bottom: 12px;}
.rpt .dmap-find input {padding-left: 12px;}
.rpt .dmap-only {display: inline-flex; align-items: center; gap: 8px; font-size: 14px; color: var(--ink-2); cursor: pointer;}
.rpt .dmap-only input {accent-color: var(--accent);}
.rpt .dmap-results {list-style: none; margin: 0 0 12px; padding: 4px; max-height: 260px; overflow: auto;
      border: 1px solid var(--border); border-radius: var(--r-lg); background: var(--surface);}
.rpt .dmap-hit {display: flex; align-items: baseline; gap: 10px; width: 100%; padding: 7px 10px; text-align: left;
      background: none; border: 0; border-radius: var(--r-sm); color: var(--ink); cursor: pointer;}
.rpt .dmap-hit:hover, .rpt .dmap-hit:focus-visible {background: var(--surface-2); outline: none;}
.rpt .dmap-body {display: grid; gap: 16px; grid-template-columns: minmax(0, 1fr);}
@media (min-width: 1056px) {
.rpt .dmap-body {grid-template-columns: minmax(0, 1.35fr) minmax(260px, 0.9fr); align-items: start;}
.rpt .dmap-side {position: sticky; top: 76px;}
}
.rpt .dmap-tree-wrap {max-height: 560px; overflow: auto; border: 1px solid var(--border);
      border-radius: var(--r-lg); padding: 6px 0;}
.rpt .dmap-tree, .rpt .dmap-group {list-style: none; margin: 0; padding: 0;}
.rpt .dmap-tree {width: max-content; min-width: 100%;}
.rpt .dmap-group {margin-left: 17px; border-left: 1px solid var(--border);}
.rpt .dmap-item.on-trace > .dmap-group {border-left-color: var(--accent);}
.rpt .dmap-row {display: flex; align-items: baseline; gap: 8px; min-width: 0; padding: 6px 12px 6px 6px;
      cursor: pointer; border-radius: var(--r-sm);}
.rpt .dmap-row:hover {background: var(--surface);}
.rpt .dmap-row:focus-visible {outline: 2px solid var(--accent); outline-offset: -2px;}
.rpt .dmap-item.on-trace > .dmap-row .dmap-name {color: var(--accent);}
.rpt .dmap-item.is-picked > .dmap-row {background: var(--accent-soft);}
.rpt .dmap-twist {flex: none; width: 12px; height: 12px; position: relative; top: 1px;}
.rpt .dmap-item[aria-expanded] > .dmap-row .dmap-twist::before {content: ""; position: absolute; left: 3px; top: 2px;
      border: 4px solid transparent; border-left: 5px solid var(--ink-3); transition: transform .12s ease;
      transform-origin: 2px 4px;}
.rpt .dmap-item[aria-expanded="true"] > .dmap-row .dmap-twist::before {transform: rotate(90deg);}
.rpt .dmap-name, .rpt .dmap-manifest {font-family: var(--mono); font-size: 12px; color: var(--ink); white-space: nowrap;}
.rpt .dmap-manifest {color: var(--ink-2); font-weight: 600;}
.rpt .dmap-ver {font-family: var(--mono); font-size: 12px; color: var(--ink-4); white-space: nowrap;}
.rpt .dmap-ver.range {font-style: italic;}
.rpt .dmap-count {margin-left: auto; padding-left: 14px; font-family: var(--mono); font-size: 12px; color: var(--ink-4); flex: none;}
.rpt .dmap-tag {font-family: var(--mono); font-size: 12px; color: var(--ink-4); border: 1px dashed var(--border-2);
      border-radius: 3px; padding: 0 5px; white-space: nowrap; flex: none;}
.rpt .dmap-via {width: 6px; height: 6px; border-radius: 50%; background: var(--sev-3); flex: none; align-self: center;}
.rpt .dmap-sev {font-family: var(--mono); font-size: 12px; border-radius: 3px; padding: 1px 6px; border: 1px solid; flex: none;}
.rpt .dmap-sev.s-c {color: var(--crit); background: var(--crit-bg); border-color: var(--crit-line);}
.rpt .dmap-sev.s-h {color: var(--high); background: var(--high-bg); border-color: var(--high-line);}
.rpt .dmap-sev.s-m {color: var(--med); background: var(--med-bg); border-color: var(--med-line);}
.rpt .dmap-sev.s-l {color: var(--low); background: var(--low-bg); border-color: var(--border);}
.rpt .dmap-loop {padding: 6px 12px 6px 26px; font-family: var(--mono); font-size: 12px; color: var(--ink-4); font-style: italic;}
.rpt .dmap-more {margin: 4px 0 6px 26px; font-family: var(--mono); font-size: 12px; color: var(--ink-3);
      background: none; border: 1px solid var(--border); border-radius: var(--r-sm); padding: 5px 10px; cursor: pointer;}
.rpt .dmap-more:hover, .rpt .dmap-more:focus-visible {border-color: var(--accent); color: var(--accent); outline: none;}
.rpt .dmap-side {border: 1px solid var(--border); border-radius: var(--r-lg); padding: 16px 18px; background: var(--surface);}
.rpt .dmap-side-name {font-family: var(--mono); font-size: 16px; color: var(--ink); word-break: break-all;}
.rpt .dmap-side-meta {display: flex; flex-wrap: wrap; gap: 4px 14px; margin-top: 5px; font-family: var(--mono);
      font-size: 12px; color: var(--ink-4);}
.rpt .dmap-evidence {margin: 12px 0 0; font-size: 12px; line-height: 1.6; color: var(--ink-3);}
.rpt .dmap-side h4 {margin: 18px 0 8px; font-family: var(--serif); font-size: 16px; font-weight: 400; color: var(--ink);}
.rpt .dmap-adv {display: inline-block; margin: 0 6px 6px 0; font-family: var(--mono); font-size: 12px;
      border: 1px solid; border-radius: var(--r-sm); padding: 4px 8px; cursor: pointer;}
.rpt .dmap-adv.s-c {color: var(--crit); background: var(--crit-bg); border-color: var(--crit-line);}
.rpt .dmap-adv.s-h {color: var(--high); background: var(--high-bg); border-color: var(--high-line);}
.rpt .dmap-adv.s-m {color: var(--med); background: var(--med-bg); border-color: var(--med-line);}
.rpt .dmap-adv.s-l {color: var(--low); background: var(--low-bg); border-color: var(--border);}
.rpt .dmap-adv:hover, .rpt .dmap-adv:focus-visible {border-color: currentColor; outline: none;}
.rpt .dmap-path {display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 0; width: 100%; margin-bottom: 6px;
      padding: 8px 10px; text-align: left; background: var(--bg); border: 1px solid var(--border);
      border-radius: var(--r-sm); cursor: pointer; font-family: var(--mono); font-size: 12px; color: var(--ink-2);}
.rpt .dmap-path:hover, .rpt .dmap-path:focus-visible {border-color: var(--accent); outline: none;}
.rpt .dmap-path-root {color: var(--ink-4);}
.rpt .dmap-path-step::before {content: "\203A"; margin: 0 7px; color: var(--accent);}
.rpt .dmap-path-step:last-child {color: var(--ink); font-weight: 600;}
.rpt .dmap-facts {display: grid; grid-template-columns: 1fr 1fr; gap: 1px; margin: 16px 0 0; background: var(--border);
      border: 1px solid var(--border); border-radius: var(--r-sm); overflow: hidden;}
.rpt .dmap-facts div {background: var(--surface); padding: 10px 12px;}
.rpt .dmap-facts dt {font-family: var(--mono); font-size: 12px; color: var(--ink-4);}
.rpt .dmap-facts dd {margin: 4px 0 0; font-family: var(--serif); font-size: 20px; color: var(--ink);}
.rpt .dmap-hint, .rpt .dmap-msg {margin: 0; font-size: 14px; line-height: 1.6; color: var(--ink-4);}
.rpt .dmap-msg {padding: 10px 12px;}
@media (max-width: 671.98px) {
.rpt .dmap-group {margin-left: 9px;}
.rpt .dmap-find, .rpt .dmap-find input {width: 100%;}
.rpt .dmap-tree-wrap {max-height: 460px;}
}
@media (prefers-reduced-motion: reduce) {
.rpt .dmap-item[aria-expanded] > .dmap-row .dmap-twist::before {transition: none;}
}

/* ── Inventory workbench (report shell, 2026-09-25) ─────────────────────────
   Design: sentrint-vault/Docs/2026-09-25-sbom-inventory-redesign.md.
   List first, and dense, because this tab is read to act on: find a package,
   narrow the list, hand over the file. Depth comes from the surface ladder and
   hairlines, never a new shadow. The one flourish is the route in the detail
   panel, a rail from the manifest down to the package, because that chain is
   the thing a supply-chain page exists to show. The old .inv-* rules above
   stay for report.html. */
.rpt .sbw {--sbw-sticky: calc(var(--shell-bar-h) + 16px);}
/* Several rules below set display, which would beat the hidden attribute the
   script toggles. Hidden always wins inside the workbench. */
.rpt .sbw [hidden] {display: none !important;}
.rpt .sbw-prov {display: flex; align-items: flex-end; justify-content: space-between; gap: 20px 32px;
  flex-wrap: wrap; padding: 20px 24px; background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-lg);}
.rpt .sbw-kicker {margin: 0 0 6px; font-family: var(--mono); font-size: 12px; color: var(--ink-4);}
/* Visually hidden, still read and still focusable: the radio behind each lens. */
.rpt .sbw-vh {position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;}
.rpt .sbw-subject {margin: 0; font-family: var(--serif); font-weight: 400; font-size: 28px; line-height: 1.2;
  color: var(--ink); overflow-wrap: anywhere;}
.rpt .sbw-subject .at {font-style: italic; color: var(--ink-3);}
.rpt .sbw-sha {font-family: var(--mono); font-size: 16px; color: var(--accent);}
.rpt .sbw-meta {display: flex; flex-wrap: wrap; gap: 6px 28px; margin: 12px 0 0;}
.rpt .sbw-meta div {display: flex; gap: 8px; align-items: baseline;}
.rpt .sbw-meta dt {font-family: var(--mono); font-size: 12px; color: var(--ink-4);}
.rpt .sbw-meta dd {margin: 0; font-family: var(--mono); font-size: 12px; color: var(--ink-2);}
.rpt .sbw-actions {display: flex; gap: 8px; flex-wrap: wrap;}
.rpt .sbw-actions .btn svg {width: 14px; height: 14px;}
/* Locked: the product's one pattern for a paid action (the sticky bar's too), a
   dashed edge with no fill, readable text and the lock in amber. */
.rpt .btn.sbw-locked {background: transparent; border-style: dashed; border-color: var(--border-2); color: var(--ink-2);}
.rpt .btn.sbw-locked:hover {background: var(--surface-2); border-style: solid; color: var(--ink);}
.rpt .btn.sbw-locked svg {color: var(--med-text, var(--med));}

.rpt .sbw-lenses {display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 8px;
  margin: 12px 0 0; padding: 0; border: 0; min-width: 0;}
/* A lens is a radio card, not a button: one filter at a time, and the card is the
   label so the whole tile is the hit area. */
.rpt .sbw-lens {position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: 2px;
  padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--r-md); color: var(--ink-3);
  cursor: pointer; transition: border-color .15s, background .15s;}
.rpt .sbw-lens:hover {border-color: var(--border-2); background: var(--surface);}
.rpt .sbw-lens:has(input:checked) {border-color: var(--accent); background: var(--accent-soft);}
.rpt .sbw-lens:has(input:focus-visible) {outline: 2px solid var(--accent); outline-offset: 2px;}
.rpt .sbw-lens .n {font-family: var(--serif); font-size: 28px; line-height: 1.1; color: var(--ink);
  font-variant-numeric: tabular-nums;}
.rpt .sbw-lens .l {font-size: 12px;}
.rpt .sbw-lens.is-alert .n {color: var(--crit-text);}
.rpt .sbw-lens.is-warn .n {color: var(--med-text);}

.rpt .sbw-notice {margin: 12px 0 0; padding: 10px 14px; font-size: 14px; line-height: 1.55; color: var(--ink-3);
  border: 1px solid var(--border); border-radius: var(--r-md); max-width: 90ch;}
.rpt .sbw-notice b {color: var(--ink-2); font-weight: 500;}

.rpt .sbw-bench {display: grid; grid-template-columns: 216px minmax(0, 1fr); gap: 24px; margin-top: 24px;
  align-items: start;}

.rpt .sbw-facets {position: sticky; top: var(--sbw-sticky); max-height: calc(100vh - var(--sbw-sticky) - 16px);
  overflow: auto; padding-right: 4px;}
.rpt .sbw-facets-h {display: none; align-items: center; justify-content: space-between; margin-bottom: 12px;
  font-family: var(--serif); font-size: 20px; color: var(--ink);}
.rpt .sbw-fg {margin: 0 0 14px; padding: 0 0 14px; border: 0; border-bottom: 1px solid var(--border); min-width: 0;}
.rpt .sbw-fg:last-child {border-bottom: none;}
.rpt .sbw-fg legend {padding: 0 0 6px 8px; font-size: 12px; font-weight: 500; color: var(--ink-3);}
/* A facet is a checkbox row. Several can be on at once, which is what a
   checkbox means and a button does not. */
.rpt .sbw-facet {display: flex; align-items: center; gap: 8px; padding: 5px 8px; border-radius: var(--r-sm);
  color: var(--ink-2); font-size: 14px; cursor: pointer;}
.rpt .sbw-facet input {margin: 0; accent-color: var(--accent);}
.rpt .sbw-facet .l {flex: 1; overflow-wrap: anywhere;}
.rpt .sbw-facet .n {font-family: var(--mono); font-size: 12px; color: var(--ink-4);
  font-variant-numeric: tabular-nums;}
.rpt .sbw-facet:hover {background: var(--surface);}
.rpt .sbw-facet:has(input:checked) {background: var(--accent-soft); color: var(--accent);}
.rpt .sbw-facet:has(input:checked) .n {color: var(--accent);}
.rpt .sbw-facet:has(input:disabled) {color: var(--ink-4); cursor: default;}
.rpt .sbw-facet:has(input:focus-visible) {outline: 2px solid var(--accent); outline-offset: -2px;}
.rpt .sbw-fg-more {margin: 6px 0 0 8px;}
.rpt .sbw-quiet {margin: 0; font-size: 14px; line-height: 1.55; color: var(--ink-3);}

.rpt .sbw-bar {display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 12px;}
.rpt .sbw-count {margin: 0 auto 0 0; font-family: var(--serif); font-weight: 400; font-size: 20px;
  color: var(--ink); font-variant-numeric: tabular-nums;}
.rpt .sbw-count .of {font-size: 16px; color: var(--ink-4);}
.rpt .sbw-search {position: relative; display: flex; align-items: center; flex: 1 1 280px; max-width: 420px;}
.rpt .sbw-search svg {position: absolute; left: 11px; width: 14px; height: 14px; color: var(--ink-4);
  pointer-events: none;}
.rpt .sbw-search input {width: 100%; height: 34px; padding: 0 12px 0 32px; background: var(--surface);
  border: 1px solid var(--border); border-radius: var(--r-sm); color: var(--ink); font-family: var(--mono);
  font-size: 12px;}
.rpt .sbw-search input:focus {outline: none; border-color: var(--accent);}
.rpt .sbw-facets-open {display: none;}
.rpt .sbw-views {display: inline-flex; gap: 0;}
/* Colour only: the geometry is .btn-sm's. */
.rpt .sbw-views .btn[aria-pressed="false"] {color: var(--ink-3);}
.rpt .sbw-views .btn[aria-pressed="true"] {border-color: var(--accent); color: var(--accent);}

.rpt .sbw-table-wrap {border: 1px solid var(--border); border-radius: var(--r-lg); overflow-x: auto;}
.rpt .sbw-table {width: 100%; border-collapse: collapse; font-size: 14px;}
.rpt .sbw-table th {position: sticky; top: 0; z-index: 1; padding: 10px 14px; background: var(--surface);
  border-bottom: 1px solid var(--border); text-align: left; font-family: var(--mono); font-size: 12px;
  font-weight: 400; text-transform: uppercase; letter-spacing: .08em; color: var(--ink-4); white-space: nowrap;}
.rpt .sbw-table td {padding: 9px 14px; border-bottom: 1px solid var(--border); vertical-align: top; color: var(--ink-2);}
.rpt .sbw-table tbody tr:last-child td {border-bottom: none;}
.rpt .sbw-table tbody tr {cursor: pointer;}
.rpt .sbw-table tbody tr:hover td {background: var(--surface);}
.rpt .sbw-table tbody tr.is-picked td {background: var(--surface-2);}
.rpt .sbw-table tbody tr.is-picked td:first-child {box-shadow: inset 2px 0 0 var(--accent);}
.rpt .sbw-table tbody tr:focus-visible {outline: 2px solid var(--accent); outline-offset: -2px;}
.rpt .sbw-table .num {text-align: right; white-space: nowrap; font-family: var(--mono); font-size: 12px;
  font-variant-numeric: tabular-nums;}
.rpt .sbw-name b {display: block; font-weight: 500; color: var(--ink); overflow-wrap: anywhere;}
.rpt .sbw-eco {display: block; margin-top: 2px; font-family: var(--mono); font-size: 12px; color: var(--ink-4);}
.rpt .sbw-ver {font-family: var(--mono); font-size: 12px; white-space: nowrap;}
.rpt .sbw-lic.none {color: var(--ink-4); font-style: italic; white-space: nowrap;}
.rpt .sbw-rel {color: var(--ink-3); white-space: nowrap;}
.rpt .sbw-chip {display: inline-block; margin-left: 4px; padding: 0 6px; border: 1px solid var(--border-2);
  border-radius: 999px; font-size: 12px; color: var(--ink-3);}
.rpt .sbw-tier {display: inline-block; width: 7px; height: 7px; margin-right: 7px; border-radius: 2px;
  vertical-align: 1px; background: var(--med);}
.rpt .sbw-tier.restricted, .rpt .sbw-tier.network {background: var(--crit);}
.rpt .sbw-tier.strong {background: var(--high);}
.rpt .sbw-none {color: var(--ink-4);}
.rpt .sbw-sev {display: inline-block; padding: 1px 7px; border: 1px solid; border-radius: 999px;
  font-family: var(--mono); font-size: 12px;}
.rpt .sbw-sev.s-critical {color: var(--crit-text); background: var(--crit-bg); border-color: var(--crit-line);}
.rpt .sbw-sev.s-high {color: var(--high-text); background: var(--high-bg); border-color: var(--high-line);}
.rpt .sbw-sev.s-medium {color: var(--med-text); background: var(--med-bg); border-color: var(--med-line);}
.rpt .sbw-sev.s-low {color: var(--low); background: var(--low-bg); border-color: var(--border);}
.rpt .sbw-empty {padding: 40px 20px; text-align: center; color: var(--ink-3);}
.rpt .sbw-empty p {margin: 0 0 12px;}
.rpt .sbw-more {display: block; margin: 12px auto;}
.rpt .sbw-cap {margin: 0; padding: 12px 14px; border-top: 1px solid var(--border); font-size: 12px; color: var(--ink-3);}
.rpt .sbw-tree .dmap {margin: 0;}
.rpt .sbw-tree .dmap-tree {padding: 12px; border: 1px solid var(--border); border-radius: var(--r-lg);}
.rpt .sbw-tree .dmap-item.is-match > .dmap-row .dmap-name {color: var(--accent);}
.rpt .sbw-tree .dmap-more {margin: 6px 0 6px 24px;}

.rpt .sbw-detail {position: sticky; top: var(--sbw-sticky); max-height: calc(100vh - var(--sbw-sticky) - 16px);
  overflow: auto; padding: 18px 20px 20px; background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-lg);}
.rpt .sbw-d-head {display: flex; align-items: flex-start; justify-content: space-between; gap: 12px;}
.rpt .sbw-d-head h3 {margin: 0; font-family: var(--serif); font-weight: 400; font-size: 20px; line-height: 1.25;
  color: var(--ink); overflow-wrap: anywhere;}
.rpt .sbw-d-head .btn {flex: none;}
.rpt .sbw-d-meta {display: grid; gap: 6px; margin: 14px 0 0;}
.rpt .sbw-d-meta div {display: grid; grid-template-columns: 96px 1fr; gap: 10px;}
.rpt .sbw-d-meta dt {font-family: var(--mono); font-size: 12px; color: var(--ink-4); padding-top: 2px;}
.rpt .sbw-d-meta dd {margin: 0; font-size: 14px; color: var(--ink-2);}
.rpt .sbw-d-sec {margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border);}
.rpt .sbw-d-sec h4 {margin: 0 0 10px; font-size: 12px; font-weight: 500; color: var(--ink-3);}
.rpt .sbw-d-sec .btn {margin-top: 4px;}
.rpt .sbw-d-sec > p {margin: 0 0 6px; font-size: 14px; color: var(--ink-2);}
.rpt .sbw-oblig {padding: 10px 12px; border: 1px solid var(--med-line); border-radius: var(--r-md);
  background: var(--med-bg); font-size: 12px; line-height: 1.55; color: var(--ink-2);}
.rpt .sbw-oblig b {color: var(--med-text); font-weight: 500;}
.rpt .sbw-advs {list-style: none; margin: 0 0 8px; padding: 0; display: grid; gap: 6px;}
.rpt .sbw-advs li {display: flex; align-items: center; gap: 8px; flex-wrap: wrap;}
.rpt .sbw-advs code {font-family: var(--mono); font-size: 12px; color: var(--ink-2);}
.rpt .sbw-advs .btn {margin: 0 0 0 auto;}
.rpt .sbw-purl {display: flex; align-items: flex-start; gap: 8px;}
.rpt .sbw-purl code {flex: 1; font-family: var(--mono); font-size: 12px; color: var(--ink-2); overflow-wrap: anywhere;}

/* The route: a rail from the manifest down to the package. The manifest is a
   square (a file), each package a ring on the rail, and the package being read
   a filled brass ring, so the eye lands on "this one" and reads up to "why". */
.rpt .sbw-route {list-style: none; margin: 0 0 10px; padding: 0; position: relative;}
.rpt .sbw-hop {position: relative; padding: 0 0 12px 24px; display: flex; flex-wrap: wrap; align-items: baseline;
  gap: 2px 8px;}
.rpt .sbw-hop::before {content: ""; position: absolute; left: 4px; top: 5px; width: 9px; height: 9px;
  border: 1.5px solid var(--ink-4); border-radius: 50%; background: var(--surface); z-index: 1;}
.rpt .sbw-hop:not(:last-child)::after {content: ""; position: absolute; left: 9px; top: 12px; bottom: -4px;
  width: 1px; background: var(--border-2);}
.rpt .sbw-hop .n {font-size: 14px; color: var(--ink-2); overflow-wrap: anywhere;}
.rpt .sbw-hop .v {font-family: var(--mono); font-size: 12px; color: var(--ink-4);}
.rpt .sbw-hop.is-root::before {border-radius: 2px; border-color: var(--ink-3);}
.rpt .sbw-hop.is-root .n {font-family: var(--mono); font-size: 12px; color: var(--ink-3);}
.rpt .sbw-hop.is-end {padding-bottom: 0;}
.rpt .sbw-hop.is-end::before {border-color: var(--accent); background: var(--accent);}
.rpt .sbw-hop.is-end .n {color: var(--ink); font-weight: 500;}
.rpt .sbw-hop.is-end .v {color: var(--accent);}

.rpt .sbw-scope {margin-top: 40px; border-top: 1px solid var(--border);}
.rpt .sbw-scope summary {padding: 16px 0; font-size: 14px; color: var(--ink-2); cursor: pointer;}
.rpt .sbw-scope summary:hover {color: var(--ink);}
.rpt .sbw-scope[open] summary {margin-bottom: 8px;}

@media (max-width: 1055.98px) {
  .rpt .sbw.has-detail .sbw-bench {grid-template-columns: 216px minmax(0, 1fr);}
  /* No shadow: the drawer lifts by the surface ladder, one step up from the
     page, with a hairline on its open edge. */
  .rpt .sbw-detail {position: fixed; top: var(--shell-bar-h); right: 0; bottom: 0; z-index: 55;
    width: min(400px, 100vw); max-height: none; border-radius: 0; border-width: 0 0 0 1px;
    border-color: var(--border-2); background: var(--surface-2);}
}
@media (max-width: 1055.98px) {
  .rpt .sbw-bench, .rpt .sbw.has-detail .sbw-bench {grid-template-columns: minmax(0, 1fr);}
  .rpt .sbw-facets {display: none;}
  .rpt .sbw-facets.is-open {display: block; position: fixed; inset: 0; z-index: 60; max-height: none;
    padding: 20px 16px; background: var(--bg);}
  .rpt .sbw-facets.is-open .sbw-facets-h {display: flex;}
  .rpt .sbw-facets-open {display: inline-flex;}
  .rpt .sbw-detail {top: 0; width: 100vw;}
}
@media (max-width: 671.98px) {
  .rpt .sbw-prov {padding: 16px;}
  .rpt .sbw-subject {font-size: 20px;}
  .rpt .sbw-lenses {grid-template-columns: repeat(2, minmax(0, 1fr));}
  .rpt .sbw-table th:nth-child(3), .rpt .sbw-table td:nth-child(3),
  .rpt .sbw-table th:nth-child(4), .rpt .sbw-table td:nth-child(4) {display: none;}
  .rpt .sbw-search {max-width: none; flex-basis: 100%; order: 3;}
}
@media (prefers-reduced-motion: reduce) {
  .rpt .sbw-lens {transition: none;}
}

/* ── Inventory table and details panel (2026-09-26) ───────────────────────
   Details take the filter column's width at desktop sizes instead of squeezing
   the table, and a package name is cut with an ellipsis, never broken mid-word;
   its full text stays in the title and in what a screen reader reads. Below
   1024px the panel is a modal drawer (the fixed rules above) over a scrim.
   No transition is added here, so there is no motion to reduce. */
.rpt .sbw-name {width: 42%; max-width: 0;}
.rpt .sbw-name b {overflow: hidden; text-overflow: ellipsis; white-space: nowrap; overflow-wrap: normal;}
.rpt .sbw-name .sbw-eco {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
/* With the panel open, a table narrower than its five columns need drops Licence
   and Relationship, as the phone layout does; both are in the panel. Measured
   on the table's own width, so a collapsed rail keeps them. */
.rpt .sbw-main {container: sbw-main / inline-size;}
@container sbw-main (max-width: 620px) {
.rpt .sbw.has-detail .sbw-table th:nth-child(3), .rpt .sbw.has-detail .sbw-table td:nth-child(3),
.rpt .sbw.has-detail .sbw-table th:nth-child(4), .rpt .sbw.has-detail .sbw-table td:nth-child(4) {display: none;}
}
@media (max-width: 1055.98px) {
.rpt .sbw.is-modal::after {content: ""; position: fixed; inset: 0; z-index: 54; background: rgba(3, 5, 9, .58);}
}

/* ── Inventory: what needs action (2026-09-27) ────────────────────────────
   Only an actionable advisory gets a severity colour. An ignored one
   is still counted, in the quiet ink every other secondary number uses, so it
   reads as "seen and decided", not as a new alarm. The one new mark is the KEV
   chip: outlined in the critical line colour, never filled, because known
   exploitation in the wild is the fact that should stop a reader. */
.rpt .sbw-quiet-n, .rpt .dmap-quiet {font-family: var(--mono); font-size: 12px; color: var(--ink-4);
  white-space: nowrap;}
.rpt .dmap-quiet {font-size: 12px; flex: none;}
.rpt .sbw-sev.s-muted {color: var(--ink-3); background: transparent; border-color: var(--border-2);}
.rpt .sbw-table tbody tr[aria-selected="true"] td {background: var(--surface-2);}
.rpt .sbw-table tbody tr[aria-selected="true"] td:first-child {box-shadow: inset 2px 0 0 var(--accent);}
.rpt .sbw-adv-sum {margin: 0 0 10px; font-size: 12px; color: var(--ink-3);}
.rpt .sbw-advs {gap: 0;}
.rpt .sbw-advs li {padding: 10px 0; border-top: 1px solid var(--border);}
.rpt .sbw-advs li:first-child {border-top: none; padding-top: 0;}
.rpt .sbw-advs li.is-quiet code {color: var(--ink-3);}
.rpt .sbw-adv-facts {display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; flex-basis: 100%;
  font-size: 12px; color: var(--ink-3);}
.rpt .sbw-triage {color: var(--ink-2);}
.rpt .sbw-kev {padding: 0 7px; border: 1px solid var(--crit-line); border-radius: 999px;
  font-family: var(--mono); font-size: 12px; color: var(--crit-text); cursor: help;}
.rpt .sbw-epss {font-family: var(--mono); font-size: 12px; font-variant-numeric: tabular-nums; cursor: help;
  text-decoration: underline dotted var(--border-2); text-underline-offset: 3px;}
.rpt .sbw-adv-ai {flex-basis: 100%; margin: 0; padding-left: 10px; border-left: 2px solid var(--med-line);
  font-size: 12px; line-height: 1.5; color: var(--ink-2);}
.rpt .sbw-d-why {margin-top: 6px; font-size: 12px;}

/* ── SBOM tab on the new system (28 Sep 2026) ─────────────────────────────
   The package panel is a frosted drawer over the page at every width, so the
   filters never leave; the tree has no scroll box of its own and wraps long
   manifest paths; the count tiles read like the dashboard's; and what the file
   contains is a popover beside the button that downloads it. */
@media (min-width: 1056px) {
  .rpt .sbw.has-detail .sbw-bench {grid-template-columns: 216px minmax(0, 1fr);}
  .rpt .sbw.has-detail .sbw-facets {display: block;}
}
.rpt .sbw-detail {position: fixed; top: var(--shell-bar-h); right: 0; bottom: 0; z-index: 55;
  width: min(440px, 100vw); max-height: none; overflow: auto; border-radius: 0; border: 0;
  border-left: 1px solid var(--border-2); box-shadow: var(--shadow-pop);
  background: color-mix(in srgb, var(--bg) 90%, transparent);
  -webkit-backdrop-filter: var(--glass-fx); backdrop-filter: var(--glass-fx);
  animation: drawer-in .2s cubic-bezier(0, 0, .2, 1) both;}
.rpt .sbw.is-modal::after {content: ""; position: fixed; inset: 0; z-index: 54;
  background: color-mix(in srgb, var(--bg) 45%, transparent);}
@media (prefers-reduced-motion: reduce) { .rpt .sbw-detail {animation: none;} }

.rpt .sbw-tree .dmap-tree-wrap {max-height: none; overflow: visible;}
.rpt .sbw-tree .dmap-manifest {white-space: normal; overflow-wrap: anywhere;}
.rpt .sbw-tree .dmap-row {align-items: flex-start;}

.rpt .sbw-lenses {gap: 0; margin-top: 16px; border: 1px solid var(--border); border-radius: var(--r-md);
  background: var(--surface); overflow: hidden;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));}
.rpt .sbw-lens {flex-direction: column-reverse; justify-content: flex-end; gap: 4px; padding: 14px 16px;
  border: 0; border-radius: 0; box-shadow: -1px 0 0 var(--border), 0 -1px 0 var(--border);}
.rpt .sbw-lens .l {font-family: var(--sans); font-size: 12px; font-weight: 600; letter-spacing: .32px; color: var(--ink-2);}
.rpt .sbw-lens .n {font-family: var(--sans); font-size: 32px; font-weight: 300;}
.rpt .sbw-lens:hover {background: color-mix(in srgb, var(--ink) 4%, var(--surface));}
.rpt .sbw-lens:has(input:checked) {background: var(--accent-soft); box-shadow: inset 0 -2px 0 var(--accent), -1px 0 0 var(--border), 0 -1px 0 var(--border);}
.rpt .sbw-lens:has(input:checked) .l {color: var(--accent);}
.rpt .sbw-lens:has(input:focus-visible) {outline: 2px solid var(--focus); outline-offset: -2px;}

.rpt .sbw-actions {align-items: center;}
/* Anchored to the row, not the button, so it stays on screen wherever the buttons
   wrap to. */
.rpt .sbw-info {position: static;}
.rpt .sbw-info > summary {list-style: none; cursor: pointer;}
.rpt .sbw-info > summary::-webkit-details-marker {display: none;}
.rpt .sbw-info-pop {position: absolute; right: 0; top: calc(100% + 8px); z-index: 40; box-sizing: border-box;
  width: min(760px, 100%); max-height: min(70vh, 640px); overflow: auto; padding: 18px 20px;
  border: 1px solid var(--border-2); border-radius: var(--r-md); box-shadow: var(--shadow-pop);
  font-size: 14px; line-height: 1.6; color: var(--ink-2);}
.rpt .sbw-info-pop p {margin: 0 0 10px;}
@media (max-width: 671.98px) {
  .rpt .sbw-info-pop {position: fixed; left: 16px; right: 16px; top: calc(var(--shell-bar-h) + 8px); width: auto;}
}

/* The row under the counts (28 Sep 2026): the notes about this document on the
   left, its three actions on the right, one line on a wide screen. */
.rpt .sbw-row {position: relative; display: flex; align-items: flex-start; justify-content: space-between;
  gap: 12px 24px; flex-wrap: wrap; margin-top: 16px;}
.rpt .sbw-row-notes {flex: 1 1 420px; min-width: 0; display: grid; gap: 8px;}
.rpt .sbw-row-notes:empty {display: none;}
.rpt .sbw-row-notes .sbw-notice {margin: 0;}
.rpt .sbw-row .sbw-actions {display: flex; flex-wrap: wrap; gap: 8px; margin-left: auto;}
.rpt .sbw-info-prov {margin: 0 0 14px; padding-bottom: 12px; border-bottom: 1px solid var(--border);}
.rpt .sbw-info-prov .sbw-kicker {margin: 0 0 4px;}
.rpt .sbw-info-prov .sbw-subject {margin: 0 0 8px; font-family: var(--sans); font-size: 20px; color: var(--ink);}
