styles.css 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. :root {
  2. color-scheme: dark;
  3. --bg: #101114;
  4. --canvas: #15171b;
  5. --surface: #202228;
  6. --raised: #292c33;
  7. --border: #383c45;
  8. --text: #f2f3f5;
  9. --muted: #adb2bd;
  10. --subtle: #777e8c;
  11. --accent: #ff6d5a;
  12. --read: #62a8ff;
  13. --success: #63c883;
  14. --warning: #f4c152;
  15. font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  16. background: var(--bg);
  17. color: var(--text);
  18. }
  19. * { box-sizing: border-box; }
  20. body { margin: 0; min-height: 100vh; background-color: var(--bg); background-image: radial-gradient(circle at 1px 1px, #2b2e35 1px, transparent 0); background-size: 22px 22px; }
  21. button, summary { font: inherit; }
  22. .auditHeader { min-height: 116px; padding: 24px 30px; display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; background: rgba(21, 23, 27, .97); border-bottom: 1px solid var(--border); }
  23. .headerIntro { min-width: 0; }
  24. .auditHeader h1 { margin: 4px 0 6px; font-size: 24px; line-height: 1.25; }
  25. .auditHeader p { margin: 0; color: var(--muted); font-size: 14px; }
  26. .eyeline { color: var(--accent); font-size: 13px; font-weight: 700; }
  27. .auditToolbar { position: sticky; top: 0; z-index: 30; min-height: 52px; padding: 8px 18px; display: flex; align-items: center; gap: 12px 18px; background: rgba(25, 27, 32, .98); border-bottom: 1px solid var(--border); box-shadow: 0 8px 20px rgba(0,0,0,.20); }
  28. .toolbarRun { flex: none; color: #dfe2e7; font-size: 13px; }
  29. .moduleJump, .sourceFilter { display: flex; align-items: center; gap: 8px; color: #c7cbd3; font-size: 12px; font-weight: 700; }
  30. .moduleJump > span, .sourceFilter > span { flex: none; white-space: nowrap; }
  31. .moduleJump { min-width: 300px; flex: 1 1 520px; max-width: 620px; }
  32. .moduleJump select { width: 100%; }
  33. .moduleJump select, .sourceFilter select { height: 34px; padding: 0 9px; color: var(--text); background: var(--surface); border: 1px solid #4a4f5b; border-radius: 7px; font: 12px/1.2 Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
  34. .sourceFilter select { min-width: 94px; }
  35. .moduleJump select:hover:not(:disabled), .sourceFilter select:hover { border-color: #666d7b; background: #252830; }
  36. .moduleJump select:focus-visible, .sourceFilter select:focus-visible { outline: 2px solid var(--read); outline-offset: 2px; border-color: var(--read); }
  37. .moduleJump select:disabled { cursor: wait; color: var(--subtle); opacity: .72; }
  38. .compactToggle { flex: none; min-height: 34px; padding: 0 10px; display: inline-flex; align-items: center; gap: 7px; color: #e3e6eb; background: #24272d; border: 1px solid #484d58; border-radius: 7px; cursor: pointer; font-size: 12px; font-weight: 700; }
  39. .compactToggle:hover { background: #2a2e36; border-color: #626977; }
  40. .compactToggle:focus-within { outline: 2px solid var(--read); outline-offset: 2px; }
  41. .compactToggle input { width: 15px; height: 15px; margin: 0; accent-color: var(--read); }
  42. .runSummary { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 8px 14px; color: var(--muted); font-size: 13px; }
  43. .runSummary strong { color: var(--text); font-size: 15px; }
  44. .runSummary em { color: var(--success); font-style: normal; }
  45. main { width: 100%; min-width: 1080px; }
  46. .columnHeader { position: sticky; top: 52px; z-index: 20; display: grid; grid-template-columns: minmax(320px, .92fr) minmax(360px, 1fr) minmax(430px, 1.18fr); background: #191b20; border-bottom: 1px solid var(--border); box-shadow: 0 8px 24px rgba(0,0,0,.22); }
  47. .columnHeader strong { padding: 14px 18px; color: #d8dbe1; font-size: 13px; }
  48. .columnHeader strong + strong { border-left: 1px solid var(--border); }
  49. .auditGroup { padding-bottom: 24px; }
  50. .groupHeader { display: flex; align-items: center; gap: 12px; padding: 22px 30px 10px; }
  51. .groupHeader h2 { margin: 0; font-size: 18px; }
  52. .groupHeader span { color: var(--subtle); font-size: 12px; }
  53. .moduleRow { scroll-margin-top: 108px; margin: 0 18px 16px; background: var(--canvas); border: 1px solid var(--border); border-radius: 10px; overflow: clip; contain: layout paint style; box-shadow: 0 10px 30px rgba(0,0,0,.14); transition: border-color 180ms ease-out, box-shadow 180ms ease-out; }
  54. .moduleRow:focus { outline: none; }
  55. .moduleRow.isJumpTarget { border-color: var(--read); box-shadow: 0 0 0 2px rgba(98, 168, 255, .28), 0 14px 36px rgba(0,0,0,.24); }
  56. .moduleRow > header { min-height: 66px; padding: 13px 18px; display: flex; justify-content: space-between; align-items: center; gap: 20px; background: #1c1e23; border-bottom: 1px solid var(--border); }
  57. .moduleRow > header span { display: block; color: var(--subtle); font-size: 12px; }
  58. .moduleRow > header h3 { margin: 3px 0 0; font-size: 16px; }
  59. .moduleMeta { display: flex; align-items: center; justify-content: flex-end; gap: 10px; flex-wrap: wrap; }
  60. .moduleMeta code, .readMeta code { color: #c7cbd3; font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; }
  61. .moduleStreamState { min-height: 23px; padding: 3px 7px; display: inline-flex !important; align-items: center; border: 1px solid #48505d; border-radius: 999px; color: #cbd5e2 !important; background: #252932; font-size: 10px !important; }
  62. .moduleRow.isLoaded .moduleStreamState { color: #9be2b1 !important; border-color: #315d3f; background: #1e3527; }
  63. .moduleLoadButton, .locateContextButton { border: 1px solid #555b67; border-radius: 6px; color: #dfe3e9; background: #272a31; cursor: pointer; font-weight: 700; }
  64. .moduleLoadButton { min-height: 30px; padding: 4px 9px; font-size: 11px; }
  65. .moduleLoadButton:hover:not(:disabled), .locateContextButton:hover { color: #fff; border-color: #748093; background: #30343d; }
  66. .moduleLoadButton:focus-visible, .locateContextButton:focus-visible { outline: 2px solid var(--read); outline-offset: 2px; }
  67. .moduleLoadButton:disabled { cursor: wait; opacity: .64; }
  68. .moduleRow.isLoaded .moduleLoadButton { display: none; }
  69. .moduleDeferred { min-height: 48px; padding: 13px 18px; display: flex; align-items: center; color: var(--subtle); font-size: 12px; }
  70. .moduleDeferred .cellLoading { width: min(520px, 100%); padding: 0; }
  71. .variant { padding: 3px 7px; border: 1px solid #555b67; border-radius: 999px; color: #cbd0d9 !important; }
  72. .moduleColumns { display: grid; grid-template-columns: minmax(320px, .92fr) minmax(360px, 1fr) minmax(430px, 1.18fr); align-items: start; }
  73. .moduleColumns > section { min-width: 0; padding: 14px; }
  74. .moduleColumns > section + section { border-left: 1px solid var(--border); }
  75. .correspondenceRows { display: block; }
  76. .correspondenceRow { display: grid; grid-template-columns: minmax(320px, .92fr) minmax(360px, 1fr) minmax(430px, 1.18fr); align-items: start; }
  77. .correspondenceRow + .correspondenceRow { border-top: 1px solid #464b56; }
  78. .correspondenceCell { min-width: 0; padding: 14px; }
  79. .correspondenceCell + .correspondenceCell { border-left: 1px solid var(--border); }
  80. .columnLabel { display: none; margin: 0 0 10px; color: var(--muted); font-size: 12px; font-weight: 700; }
  81. .contentBox { margin-bottom: 10px; background: var(--surface); border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
  82. .contentBox:last-child { margin-bottom: 0; }
  83. .contentBox > summary { cursor: pointer; list-style: none; padding: 11px 12px; display: flex; flex-direction: column; gap: 7px; color: var(--text); }
  84. .contentBox > summary::-webkit-details-marker { display: none; }
  85. .contentBox > summary > .summaryLine { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
  86. .contentBox > summary b { font-size: 13px; }
  87. .contentBox > summary b::before { content: "›"; display: inline-block; width: 16px; color: var(--muted); font-size: 19px; line-height: 10px; transform: rotate(0); transform-origin: center; transition: transform 160ms ease-out; }
  88. .contentBox[open] > summary b::before { transform: rotate(90deg); }
  89. .contentBox > summary small { flex: none; color: var(--subtle); font-size: 11px; font-weight: 500; }
  90. .contentBox > summary em { color: #c2c6ce; font-size: 12px; font-style: normal; line-height: 1.55; }
  91. .contentBody { padding: 0 12px 13px; border-top: 1px solid #30333b; }
  92. .contentBody p, .contentBody pre { margin: 10px 0 0; color: #dfe1e5; font-size: 13px; line-height: 1.65; white-space: pre-wrap; overflow-wrap: anywhere; }
  93. .contentBody pre { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
  94. .tone-used { border-color: #66433e; }
  95. .tone-used > summary b { color: #ff8d7e; }
  96. .tone-read { border-color: #344f70; }
  97. .tone-read > summary b { color: #8fc0ff; }
  98. .tone-database { border-color: #3a5272; }
  99. .tone-database > summary b { color: #9bc8ff; }
  100. .tone-function { border-color: #38605d; }
  101. .tone-function > summary b { color: #8fd8cf; }
  102. .tone-log { border-color: #655735; }
  103. .tone-log > summary b { color: #f1ce7a; }
  104. .tone-context { background: #1d1f24; }
  105. .tone-muted { opacity: .82; }
  106. .tone-warning { border-color: #695a30; }
  107. .displayCard { padding: 12px 0 2px; }
  108. .displayCard h4 { margin: 0 0 12px; font-size: 16px; }
  109. .displayField { display: grid; grid-template-columns: 92px minmax(0,1fr); gap: 10px; padding: 9px 0; border-top: 1px solid #343740; }
  110. .displayField b { color: var(--muted); font-size: 12px; }
  111. .displayField p, .displayField pre { margin: 0; }
  112. .businessDetailBody { padding-top: 2px; }
  113. .businessPart { padding: 13px 0; border-top: 1px solid #343740; }
  114. .businessPart:first-child { border-top: 0; }
  115. .businessPart h4 { margin: 0 0 8px; color: #f1a196; font-size: 14px; line-height: 1.4; }
  116. .businessPart p, .businessPart pre { margin: 0; }
  117. .technicalDetailBody { padding-top: 2px; }
  118. .technicalPart { padding: 12px 0; border-top: 1px solid #343740; }
  119. .technicalPart:first-child { border-top: 0; }
  120. .technicalPart h4 { margin: 0 0 7px; color: #9bc8ff; font: 12px/1.4 ui-monospace, SFMono-Regular, Menlo, monospace; }
  121. .technicalPart p, .technicalPart pre { margin: 0; }
  122. .correspondenceTarget { margin-inline: -8px; padding-inline: 9px; border-left: 3px solid var(--correlation-color); border-radius: 5px; background: var(--correlation-bg); cursor: pointer; transition: opacity 160ms ease-out, box-shadow 160ms ease-out, background 160ms ease-out; }
  123. .correspondenceTarget:focus-visible, .correlationChip:focus-visible, .correlationMark:focus-visible { outline: 2px solid var(--correlation-color); outline-offset: 2px; }
  124. .correlationNumber { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; height: 18px; margin-right: 7px; border-radius: 4px; color: #101114; background: var(--correlation-color); font-size: 10px; font-weight: 800; vertical-align: 1px; }
  125. .correlationLinks { display: flex; flex-wrap: wrap; gap: 6px; }
  126. .correlationChip { display: inline-flex; align-items: center; gap: 5px; min-height: 26px; padding: 3px 8px; border: 1px solid var(--correlation-color); border-radius: 999px; color: var(--correlation-color); background: var(--correlation-bg); cursor: pointer; font-size: 10px; font-weight: 650; }
  127. .correlationChip b { color: inherit !important; font-size: 10px !important; }
  128. .correlationChip b::before { content: none !important; }
  129. .correlationMark { padding: 1px 3px; color: #fff; background: var(--correlation-bg-strong); border-bottom: 2px solid var(--correlation-color); border-radius: 3px; cursor: pointer; }
  130. .correlation-0 { --correlation-color: #ff8c7c; --correlation-bg: rgba(255, 140, 124, .10); --correlation-bg-strong: rgba(255, 140, 124, .34); }
  131. .correlation-1 { --correlation-color: #78b8ff; --correlation-bg: rgba(120, 184, 255, .10); --correlation-bg-strong: rgba(120, 184, 255, .32); }
  132. .correlation-2 { --correlation-color: #70d7aa; --correlation-bg: rgba(112, 215, 170, .10); --correlation-bg-strong: rgba(112, 215, 170, .30); }
  133. .correlation-3 { --correlation-color: #d5a2ff; --correlation-bg: rgba(213, 162, 255, .10); --correlation-bg-strong: rgba(213, 162, 255, .30); }
  134. .correlation-4 { --correlation-color: #f0ca67; --correlation-bg: rgba(240, 202, 103, .10); --correlation-bg-strong: rgba(240, 202, 103, .30); }
  135. .correlation-5 { --correlation-color: #75d8e8; --correlation-bg: rgba(117, 216, 232, .10); --correlation-bg-strong: rgba(117, 216, 232, .30); }
  136. .correlation-6 { --correlation-color: #ff9dcb; --correlation-bg: rgba(255, 157, 203, .10); --correlation-bg-strong: rgba(255, 157, 203, .30); }
  137. .correlation-7 { --correlation-color: #add574; --correlation-bg: rgba(173, 213, 116, .10); --correlation-bg-strong: rgba(173, 213, 116, .30); }
  138. .isCompact [data-column="use"] .sourceLinks { display: none; }
  139. .compactPanel { overflow: hidden; background: #1c1e23; border: 1px solid var(--border); border-radius: 8px; }
  140. .compactPanel > header { min-height: 42px; padding: 9px 12px; display: flex; align-items: center; justify-content: space-between; gap: 12px; border-bottom: 1px solid #343740; }
  141. .compactPanel > header h4 { margin: 0; color: #e8eaee; font-size: 13px; }
  142. .compactPanel > header span { color: var(--subtle); font-size: 11px; }
  143. .lineageItem { margin: 0; padding: 11px 12px; background: transparent; border: 0; border-top: 1px solid #31343c; border-radius: 0; }
  144. .lineageItem:first-of-type { border-top: 0; }
  145. .lineageItem.correspondenceTarget { margin: 0; padding: 11px 12px; border-left: 0; border-radius: 0; background: var(--correlation-bg); }
  146. .lineageItem > header { display: flex; align-items: center; gap: 7px; }
  147. .lineageItem > header strong { color: #eef0f3; font-size: 12px; }
  148. .lineageItem > header em { margin-left: auto; color: var(--correlation-color, var(--subtle)); font-size: 10px; font-style: normal; }
  149. .lineageSources { padding-top: 8px; display: grid; gap: 7px; }
  150. .lineageSource { min-width: 0; display: grid; gap: 5px; }
  151. .lineageSource small { color: var(--subtle); font-size: 11px; line-height: 1.45; }
  152. .lineageSourceSummary { grid-template-columns: max-content minmax(0, 1fr); align-items: start; column-gap: 8px; }
  153. .lineageSource + .lineageSource { padding-top: 9px; border-top: 1px solid #333741; }
  154. .lineageSourceHeader { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
  155. .locateContextButton { flex: none; min-height: 27px; padding: 3px 8px; font-size: 10px; }
  156. .sourceKindPill { display: inline-flex; width: fit-content; align-items: center; min-height: 22px; padding: 2px 7px; border: 1px solid currentColor; border-radius: 999px; font-size: 10px; font-weight: 700; }
  157. .pathList { display: flex; flex-wrap: wrap; gap: 5px; }
  158. .pathList code { max-width: 100%; padding: 3px 6px; color: #dce7f7; background: #2a3039; border: 1px solid #3b4655; border-radius: 4px; font: 10px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace; overflow-wrap: anywhere; }
  159. .sourceDigest { padding: 11px 12px; border-top: 1px solid #31343c; }
  160. .sourceDigest:first-of-type { border-top: 0; }
  161. .sourceDigest > header { display: flex; align-items: center; gap: 7px; }
  162. .sourceDigest > header strong { min-width: 0; color: #eef0f3; font-size: 12px; overflow-wrap: anywhere; }
  163. .sourceDigest > header em { margin-left: auto; flex: none; max-width: 44%; color: var(--subtle); font-size: 10px; font-style: normal; text-align: right; overflow-wrap: anywhere; }
  164. .sourceDigest > p { margin: 8px 0 0; color: #c5c9d1; font-size: 11px; line-height: 1.5; }
  165. .sourceDigest.isLocated { outline: 2px solid var(--active-correlation-color, var(--read)); outline-offset: -2px; animation: locate-pulse 680ms ease-out 2; }
  166. .rawField.isLocated { outline: 2px solid var(--active-correlation-color, var(--read)); outline-offset: 2px; border-radius: 5px; animation: locate-pulse 680ms ease-out 2; }
  167. .readValueEntry { padding: 8px 0 2px; }
  168. .readValueEntry + .readValueEntry { margin-top: 5px; border-top: 1px solid #343842; }
  169. .readValueMeta { padding-bottom: 6px; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 5px 9px; }
  170. .readValueMeta > span { color: #cdd2da; font-size: 11px; font-weight: 700; }
  171. .readValueMeta code, .recordLocation code, .rawField code { color: #dce7f7; font: 10px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace; overflow-wrap: anywhere; }
  172. .fieldActualValue { display: grid; grid-template-columns: 82px minmax(0, 1fr); gap: 8px; padding: 7px 9px; background: rgba(255,255,255,.025); border-radius: 5px; }
  173. .fieldActualValue > b { color: var(--muted); font-size: 10px; }
  174. .fieldActualValue p, .fieldActualValue pre { margin: 0; color: #eef0f3; font-size: 11px; line-height: 1.55; white-space: pre-wrap; overflow-wrap: anywhere; }
  175. .valueDisclosure { background: rgba(255,255,255,.025); border-radius: 5px; }
  176. .valueDisclosure > summary { min-height: 34px; padding: 7px 9px; display: grid; grid-template-columns: max-content 1fr; gap: 3px 9px; cursor: pointer; list-style: none; }
  177. .valueDisclosure > summary::-webkit-details-marker { display: none; }
  178. .valueDisclosure > summary > span { color: var(--muted); font-size: 10px; font-weight: 700; }
  179. .valueDisclosure > summary > span::before { content: "›"; display: inline-block; width: 13px; font-size: 16px; line-height: 9px; transform-origin: center; transition: transform 160ms ease-out; }
  180. .valueDisclosure[open] > summary > span::before { transform: rotate(90deg); }
  181. .valueDisclosure > summary > small { justify-self: end; color: var(--subtle); font-size: 10px; }
  182. .valueDisclosure > summary > em { grid-column: 1 / -1; color: #cfd3db; font-size: 11px; font-style: normal; line-height: 1.5; }
  183. .valueDisclosure .valueMatch, .fieldActualValue .valueMatch { padding: 1px 2px; color: #fff; background: rgba(255, 109, 90, .42); border-radius: 2px; }
  184. .valueDisclosure[open] > summary > em { display: none; }
  185. .valueDisclosureBody { padding: 8px 9px 10px; border-top: 1px solid #363a43; }
  186. .valueDisclosureBody p, .valueDisclosureBody pre { margin: 0; color: #eef0f3; font-size: 11px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }
  187. .moreFieldsNotice { display: block; padding-top: 7px; }
  188. .lineageUnproven { display: block; padding: 7px 9px 2px; color: var(--subtle); font-size: 10px; line-height: 1.45; }
  189. .recordLocation { margin: 9px 0 2px; display: flex; flex-wrap: wrap; align-items: center; gap: 5px; }
  190. .recordLocation > span { margin-right: 3px; color: var(--muted); font-size: 10px; font-weight: 700; }
  191. .recordLocation code { padding: 3px 5px; background: #292d35; border-radius: 4px; }
  192. .rawFields { padding-top: 7px; }
  193. .rawField { padding: 9px 0; border-top: 1px solid #343842; }
  194. .rawField > header { padding-bottom: 6px; display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
  195. .rawField > header > div { min-width: 0; display: grid; gap: 3px; }
  196. .rawField > header span { color: #dfe2e7; font-size: 11px; font-weight: 700; }
  197. .rawField .correlationLinks { justify-content: flex-end; }
  198. .lineageRelation { flex: none; margin-left: auto; color: #8fc0ff; font-size: 10px; font-style: normal; }
  199. .exactFieldMap { margin: 10px 0 14px; padding: 10px 11px; border: 1px solid #3a526d; border-radius: 7px; background: rgba(98,168,255,.045); }
  200. .exactFieldMap > h4 { margin: 0 0 7px; color: #9bc8ff; font-size: 12px; }
  201. .digestFields { padding-top: 8px; display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 7px; align-items: start; }
  202. .digestFields > b { color: var(--muted); font-size: 10px; line-height: 1.5; }
  203. .digestFields > span { color: var(--subtle); font-size: 11px; line-height: 1.45; }
  204. .compactEmpty { min-height: 78px; padding: 18px; display: flex; align-items: center; justify-content: center; color: var(--subtle); background: #1c1e23; border: 1px dashed #454a55; border-radius: 8px; font-size: 12px; text-align: center; }
  205. .sourceLinks { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-start; gap: 6px; }
  206. .sourceTag, .usageTag { display: inline-flex; align-items: center; min-height: 28px; padding: 4px 9px; border-radius: 999px; font-size: 11px; line-height: 1.2; }
  207. .sourceTag { cursor: pointer; border: 1px solid currentColor; font-weight: 700; transition: background 160ms ease-out, color 160ms ease-out, opacity 160ms ease-out; }
  208. .sourceTag:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
  209. .source-database { color: #9bc8ff; background: rgba(98, 168, 255, .09); }
  210. .source-function { color: #8fd8cf; background: rgba(82, 190, 176, .09); }
  211. .source-log { color: #f1ce7a; background: rgba(241, 206, 122, .09); }
  212. .source-unknown { color: #c6cad2; background: rgba(198, 202, 210, .08); }
  213. .source-database[aria-pressed="true"] { color: #101114; background: #9bc8ff; }
  214. .source-function[aria-pressed="true"] { color: #101114; background: #8fd8cf; }
  215. .source-log[aria-pressed="true"] { color: #101114; background: #f1ce7a; }
  216. .source-unknown[aria-pressed="true"] { color: #101114; background: #c6cad2; }
  217. .usageTag { color: #c7cbd3; background: #30333a; }
  218. .readItem { padding: 11px 0; border-top: 1px solid #343740; }
  219. .readItem:first-child { border-top: 0; }
  220. .readItemHeader { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 6px 12px; }
  221. .readItemHeader b { color: #e7e9ed; font-size: 13px; }
  222. .readItemHeader code { color: var(--muted); font: 11px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; }
  223. .readMeta { display: flex; flex-wrap: wrap; align-items: center; gap: 7px 10px; padding-top: 8px; }
  224. .readMeta > span:not(.readStatus) { color: var(--subtle); font-size: 11px; }
  225. .readStatus { padding: 3px 7px; border-radius: 999px; color: #dbeeff; background: #29445f; font-size: 11px; }
  226. .status-fallback { color: #d9dce2; background: #424751; }
  227. .status-calculation-input { color: #fff0bc; background: #5e4e20; }
  228. .status-unconfirmed, .status-missing { color: #ffe1d4; background: #603528; }
  229. .contextTree { padding-top: 10px; font: 12px/1.6 ui-monospace, SFMono-Regular, Menlo, monospace; }
  230. .contextTree dl { margin: 0; }
  231. .contextTree ol { margin: 4px 0; padding-left: 22px; }
  232. .contextEntry { display: grid; grid-template-columns: minmax(128px, .32fr) minmax(0, 1fr); gap: 10px; padding: 4px 0; }
  233. .contextEntry dt { color: #aeb4c0; overflow-wrap: anywhere; }
  234. .contextEntry dd { margin: 0; color: #d9dce3; overflow-wrap: anywhere; }
  235. .contextEntry.isDim { opacity: .34; }
  236. .contextEntry.isRead { padding: 5px 7px; margin: 2px -7px; border-radius: 5px; background: rgba(98, 168, 255, .09); opacity: 1; }
  237. .contextEntry.hasCorrelationData { opacity: 1; }
  238. mark { padding: 1px 2px; color: #fff; background: rgba(255, 109, 90, .48); border-radius: 2px; }
  239. .moduleRow .contentBox { transition: opacity 160ms ease-out, border-color 160ms ease-out, box-shadow 160ms ease-out; }
  240. .moduleRow.hasSourceFocus .contentBox { opacity: .3; }
  241. .moduleRow.hasSourceFocus .contentBox.isSourceMatch { opacity: 1; box-shadow: 0 0 0 1px rgba(242, 243, 245, .2); }
  242. .moduleRow.hasCorrelationFocus [data-correlation-id], .moduleRow.hasCorrelationFocus [data-correlation-ids] { opacity: .18; }
  243. .moduleRow.hasCorrelationFocus [data-correlation-id].isCorrelationMatch, .moduleRow.hasCorrelationFocus [data-correlation-ids].isCorrelationMatch { opacity: 1; box-shadow: 0 0 0 2px var(--active-correlation-color, var(--correlation-color)); }
  244. .empty { color: var(--subtle) !important; }
  245. .loadError, .fatal { margin: 18px; padding: 18px; color: #ffd8d2; background: #35211f; border: 1px solid #643a34; border-radius: 8px; }
  246. .loadingBlock, .cellLoading { padding: 18px; }
  247. .loadingBlock i, .cellLoading i { display: block; height: 12px; margin: 9px 0; border-radius: 4px; background: linear-gradient(90deg, #25282e, #333740, #25282e); background-size: 200% 100%; animation: loading 1.3s linear infinite; }
  248. .loadingBlock i:nth-child(2), .cellLoading i:nth-child(2) { width: 72%; }
  249. @keyframes loading { to { background-position: -200% 0; } }
  250. @keyframes locate-pulse { 50% { box-shadow: inset 0 0 0 2px var(--active-correlation-color, var(--read)); } }
  251. @media (prefers-reduced-motion: reduce) { *, *::before { animation: none !important; transition: none !important; } }
  252. @media (max-width: 900px) {
  253. main { min-width: 0; }
  254. .auditHeader { align-items: flex-start; flex-direction: column; padding: 20px; }
  255. .headerIntro { width: 100%; }
  256. .auditToolbar { padding: 8px 10px; flex-wrap: wrap; }
  257. .toolbarRun { display: none; }
  258. .moduleJump { min-width: 0; max-width: none; flex: 1 1 100%; }
  259. .moduleJump select { width: 100%; }
  260. .compactToggle { flex: 1 1 auto; justify-content: center; }
  261. .sourceFilter { flex: 1 1 auto; }
  262. .sourceFilter select { flex: 1; }
  263. .runSummary { justify-content: flex-start; }
  264. .columnHeader { display: none; }
  265. .groupHeader { padding-inline: 14px; }
  266. .moduleRow { scroll-margin-top: 104px; margin-inline: 10px; }
  267. .moduleRow > header { align-items: flex-start; flex-direction: column; }
  268. .moduleMeta { justify-content: flex-start; }
  269. .lineageSourceHeader { align-items: flex-start; flex-direction: column; }
  270. .locateContextButton { min-height: 34px; }
  271. .fieldActualValue { grid-template-columns: 1fr; }
  272. .moduleColumns { display: block; }
  273. .moduleColumns > section + section { border-left: 0; border-top: 1px solid var(--border); }
  274. .correspondenceRow { display: block; }
  275. .correspondenceCell + .correspondenceCell { border-left: 0; border-top: 1px solid var(--border); }
  276. .columnLabel { display: block; }
  277. }