styles.css 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144
  1. :root {
  2. --bg: #f7f7f8;
  3. --card: #fff;
  4. --ink: #1a1a1f;
  5. --muted: #8a8a94;
  6. --line: #e6e6ea;
  7. --accent: #5b5bd6;
  8. --accent-soft: #ececfb;
  9. --ok: #15a36a;
  10. --bad: #d04646;
  11. }
  12. * { box-sizing: border-box; }
  13. body {
  14. margin: 0;
  15. background: var(--bg);
  16. color: var(--ink);
  17. font: 14px/1.5 -apple-system, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
  18. }
  19. a { color: var(--accent); text-decoration: none; }
  20. a:hover { text-decoration: underline; }
  21. .wrap { max-width: 1180px; margin: 0 auto; padding: 22px 18px 60px; }
  22. h1 { font-size: 22px; margin: 0 0 2px; letter-spacing: .5px; }
  23. .sub { color: var(--muted); font-size: 12.5px; margin-bottom: 18px; }
  24. /* 创作Demo:家族选择器左右两栏竖排,按尾缀分组 */
  25. .famcols { display: flex; gap: 16px; align-items: flex-start; margin-bottom: 16px; }
  26. .famcol { flex: 1 1 0; display: flex; flex-direction: column; gap: 6px; }
  27. .famcol-hd { font-size: 12px; font-weight: 700; color: var(--muted); padding: 0 2px 4px; }
  28. .fbtn { display: flex; justify-content: space-between; align-items: baseline; gap: 14px; text-align: left; padding: 9px 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--card); font-size: 13px; color: var(--ink); cursor: pointer; }
  29. .fbtn:hover { border-color: var(--accent); }
  30. .fbtn.on { border-color: var(--accent); background: var(--accent); color: #fff; font-weight: 600; }
  31. .fbtn-pre { flex: 0 1 auto; }
  32. .fbtn-suf { flex: 0 0 auto; margin-left: auto; opacity: 0.7; } /* 尾缀靠右、略淡 */
  33. .fbtn.on .fbtn-suf { opacity: 0.85; }
  34. /* 创作Query正交搜索结果:每条 query 一块 */
  35. .qblock { margin: 14px 0 22px; }
  36. .qbhd { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; padding-bottom: 8px; margin-bottom: 10px; border-bottom: 1px solid var(--line); }
  37. .qbq { font-size: 15px; font-weight: 700; color: var(--ink); }
  38. /* 页面切换顶栏 */
  39. .topnav { display: flex; gap: 18px; border-bottom: 1px solid var(--line); margin-bottom: 16px; }
  40. .topnav a { padding: 8px 2px; color: var(--muted); font-size: 14px; border-bottom: 2px solid transparent; margin-bottom: -1px; }
  41. .topnav a.on { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }
  42. /* 创作Query Demo:多列(轴列 + Query列) */
  43. .cdemo { display: flex; gap: 10px; align-items: flex-start; overflow-x: auto; padding-bottom: 8px; }
  44. .axcol { flex: 0 0 auto; width: 114px; border: 1px solid var(--line); border-radius: 10px; background: var(--card); overflow: hidden; }
  45. .axcol.qcol { flex: 1 1 auto; min-width: 560px; }
  46. .axhd { font-size: 13px; font-weight: 700; padding: 9px 11px; border-bottom: 1px solid var(--line); background: #fafafb;
  47. display: flex; align-items: center; justify-content: space-between; gap: 6px; }
  48. .axhd.qhd { color: var(--accent); }
  49. .axhd .gn { font-size: 11px; font-weight: 600; color: var(--muted); background: #f0f0f3; border-radius: 10px; padding: 1px 7px; }
  50. .qhd-metrics { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
  51. .avgcreation { font-size: 11px; font-weight: 700; border-radius: 10px; padding: 1px 8px; white-space: nowrap; }
  52. .avgcreation.done { color: var(--ok); background: #e6f6ee; }
  53. .avgcreation.pending { color: #9a6a00; background: #fff6df; }
  54. .axlist { max-height: 62vh; overflow: auto; }
  55. .axv { font-size: 12.5px; padding: 5px 11px; border-bottom: 1px solid #f3f3f5; color: #555; white-space: nowrap; }
  56. .axv.grp { font-weight: 700; color: #222; background: #fafafb; }
  57. .axv.child { padding-left: 26px; color: #666; }
  58. .axv.child::before { content: '·'; color: var(--muted); margin-right: 6px; }
  59. .qrow { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 7px; padding: 6px 11px; border-bottom: 1px solid #f3f3f5; font-size: 13px; }
  60. .qrow.keep .qmark { color: var(--ok); font-weight: 700; }
  61. .qrow.drop { color: var(--muted); }
  62. .qrow.drop .qmark { color: var(--bad); }
  63. .qrow.drop .qtext { text-decoration: line-through; }
  64. .qmark { flex: 0 0 auto; }
  65. .qvalid { flex: 0 0 auto; font-size: 11px; font-weight: 700; padding: 0 6px; border-radius: 9px; }
  66. .qvalid.ok { color: var(--ok); background: #e6f6ee; }
  67. .qvalid.low { color: var(--bad); background: #fbeaea; }
  68. .qtext { flex: 1 1 auto; white-space: normal; word-break: break-word; } /* 长 query 换行显示,别截断 */
  69. .qreason { flex: 1 0 100%; margin-left: 20px; color: var(--muted); font-size: 11.5px; } /* 理由独占一行、占满宽 */
  70. .qdetail { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--line);
  71. border-radius: 8px; padding: 2px 7px; font-size: 11.5px; color: var(--muted); background: #fff; }
  72. .qdetail.on { color: var(--accent); border-color: var(--accent-soft); background: var(--accent-soft); }
  73. .qdetail.decode-on { color: var(--ok); border-color: #d8eadf; background: #e6f6ee; font-weight: 700; }
  74. .qdetail span { color: inherit; opacity: .8; }
  75. .qcreation { flex: 0 0 auto; font-size: 11.5px; font-weight: 700; border-radius: 9px; padding: 1px 7px; white-space: nowrap; }
  76. .qcreation.done { color: var(--ok); background: #e6f6ee; }
  77. .qcreation.pending { color: #9a6a00; background: #fff6df; }
  78. /* 顶部主导航 */
  79. .nav { display: flex; gap: 8px; margin-bottom: 16px; flex-wrap: wrap; }
  80. .nav button {
  81. border: 1px solid var(--line); background: var(--card); color: var(--ink);
  82. padding: 7px 16px; border-radius: 9px; cursor: pointer; font-size: 13.5px;
  83. }
  84. .nav button.on { background: var(--accent); border-color: var(--accent); color: #fff; }
  85. /* 筛选条 */
  86. .filters { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 14px; }
  87. .filters select, .filters .seg {
  88. border: 1px solid var(--line); background: var(--card); border-radius: 8px;
  89. padding: 6px 10px; font-size: 13px; color: var(--ink);
  90. }
  91. .seg { display: inline-flex; padding: 0; overflow: hidden; }
  92. .seg button {
  93. border: 0; background: transparent; padding: 6px 12px; cursor: pointer; font-size: 13px;
  94. color: var(--muted); border-right: 1px solid var(--line);
  95. }
  96. .seg button:last-child { border-right: 0; }
  97. .seg button.on { background: var(--accent-soft); color: var(--accent); font-weight: 600; }
  98. .count { color: var(--muted); font-size: 12.5px; margin-left: auto; }
  99. /* 表格(query 列表) */
  100. table { width: 100%; border-collapse: collapse; background: var(--card);
  101. border: 1px solid var(--line); border-radius: 12px; overflow: hidden; }
  102. th, td { text-align: left; padding: 9px 12px; border-bottom: 1px solid var(--line); font-size: 13px; vertical-align: top; }
  103. th { background: #fafafb; color: var(--muted); font-weight: 600; white-space: nowrap; }
  104. tr:last-child td { border-bottom: 0; }
  105. td.q { font-weight: 600; }
  106. .tag { display: inline-block; background: var(--accent-soft); color: var(--accent);
  107. border-radius: 6px; padding: 1px 7px; font-size: 12px; margin: 1px 3px 1px 0; white-space: nowrap; }
  108. .tag.k { background: #f0f0f3; color: #555; }
  109. /* 多轴正交 query 的创作筛选层(留/排除) */
  110. .qdrop { opacity: 0.5; }
  111. .qdrop .q { text-decoration: line-through; }
  112. .fcell { white-space: nowrap; }
  113. .fbadge { font-size: 12px; font-weight: 700; padding: 1px 8px; border-radius: 10px; }
  114. .fbadge.keep { color: var(--ok); background: #e6f6ee; }
  115. .fbadge.drop { color: var(--bad); background: #fbeaea; }
  116. .freason { display: block; font-size: 11.5px; color: var(--muted); margin-top: 3px; max-width: 220px; white-space: normal; }
  117. /* 正交轴标签:横向拉开间距 */
  118. .axes { display: flex; flex-wrap: wrap; gap: 6px 18px; }
  119. .axes .tag { margin: 0; }
  120. /* 「查看人工定义的轴」幽灵按钮 */
  121. .btn.ghost { background: #fff; color: var(--accent); border: 1px solid var(--accent-soft); }
  122. .btn.ghost:hover { background: var(--accent-soft); text-decoration: none; }
  123. /* 人工定义轴弹窗 */
  124. .modal-mask { position: fixed; inset: 0; background: rgba(20, 20, 30, .38);
  125. display: flex; align-items: center; justify-content: center; z-index: 50; padding: 24px; }
  126. .modal { background: #fff; border-radius: 14px; width: min(560px, 100%); max-height: 80vh;
  127. overflow: auto; box-shadow: 0 18px 50px rgba(0, 0, 0, .25); }
  128. .modal-hd { display: flex; align-items: center; justify-content: space-between;
  129. padding: 14px 18px; border-bottom: 1px solid var(--line); position: sticky; top: 0; background: #fff; }
  130. .modal-hd b { font-size: 14.5px; }
  131. .modal-hd .x { cursor: pointer; color: var(--muted); font-size: 15px; padding: 2px 6px; }
  132. .modal-bd { padding: 8px 18px 18px; }
  133. .modal-bd .note { color: var(--muted); font-size: 12px; margin: 8px 0 14px; }
  134. .axrow { padding: 10px 0; border-bottom: 1px solid var(--line); }
  135. .axrow:last-child { border-bottom: 0; }
  136. .axname { font-weight: 700; font-size: 13px; margin-bottom: 7px; }
  137. .axvals { display: flex; flex-wrap: wrap; gap: 6px; }
  138. .axsub { display: flex; flex-direction: column; gap: 7px; width: 100%; }
  139. .axsubrow { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
  140. .axsubkey { font-size: 12px; color: var(--accent); font-weight: 600; min-width: 56px; }
  141. /* 判断提示词弹窗 */
  142. .modal.wide { width: min(840px, 100%); }
  143. .ptabs { display: flex; gap: 8px; margin: 12px 0; flex-wrap: wrap; }
  144. .ptabs button { border: 1px solid var(--line); background: var(--card); color: var(--ink);
  145. padding: 6px 12px; border-radius: 8px; cursor: pointer; font-size: 12.5px; }
  146. .ptabs button.on { background: var(--accent); border-color: var(--accent); color: #fff; }
  147. .prompt { background: #0f1021; color: #e6e6ea; border-radius: 10px; padding: 14px 16px;
  148. font: 12px/1.65 ui-monospace, Menlo, Consolas, monospace; white-space: pre-wrap;
  149. word-break: break-word; max-height: 56vh; overflow: auto; margin: 0; }
  150. /* 搜索结果卡 */
  151. .cards { display: grid; grid-template-columns: 1fr; gap: 12px; }
  152. .card { background: var(--card); border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; }
  153. .card .head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 10px; }
  154. .card .head .q { font-weight: 700; font-size: 14.5px; }
  155. .card .head .m { color: var(--muted); font-size: 12px; }
  156. .lanes { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
  157. .lane { border: 1px solid var(--line); border-radius: 10px; padding: 10px; background: #fcfcfd; min-width: 0; }
  158. .lane .pl { font-size: 12px; font-weight: 700; margin-bottom: 8px; }
  159. .lane .pl.dy { color: #111; }
  160. .lane .pl.wx { color: #15a36a; }
  161. .lane video, .lane img.cover { width: 100%; max-height: 210px; object-fit: cover; border-radius: 8px; background: #000; display: block; }
  162. .lane .t { flex: 1 1 auto; font-size: 12.5px; margin: 0; line-height: 1.45; font-weight: 700; min-width: 0; }
  163. .card-main { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; margin: 8px 0 3px; }
  164. /* 创作知识 / 非创作知识 分类角标 */
  165. .cls { display: inline-block; font-size: 11px; font-weight: 700; border-radius: 6px;
  166. padding: 2px 8px; margin: 0; white-space: nowrap; }
  167. .cls.yes { background: #e6f7ee; color: var(--ok); }
  168. .cls.no { background: #fbeaea; color: var(--bad); }
  169. .cls.none { background: #f0f0f3; color: var(--muted); font-weight: 600; }
  170. /* 小红书/公众号完整图文:卡片内只放缩略条,点击进大图阅读 */
  171. .thumbstrip { display: flex; gap: 6px; overflow-x: auto; padding-bottom: 3px; scrollbar-width: thin; }
  172. .thumbbtn, .coverbtn { border: 0; padding: 0; background: transparent; cursor: zoom-in; flex: 0 0 auto; position: relative; }
  173. .thumbbtn .gimg { width: 72px; height: 92px; object-fit: cover; object-position: top; border-radius: 7px; background: #f0f0f3; border: 1px solid var(--line); display: block; }
  174. .thumbbtn span { position: absolute; right: 4px; bottom: 4px; font-size: 10px; line-height: 1; color: #fff; background: rgba(0,0,0,.58); border-radius: 8px; padding: 2px 5px; }
  175. .coverbtn { width: 100%; display: block; }
  176. .lane .cover { cursor: zoom-in; }
  177. /* 长正文 / 知识点默认折叠,避免卡片一屏过高 */
  178. .fold { margin-top: 8px; border: 1px solid var(--line); border-radius: 8px; background: #fff; overflow: hidden; }
  179. .fold summary { cursor: pointer; list-style: none; padding: 6px 9px; font-size: 12px; font-weight: 700; color: var(--muted); display: flex; align-items: center; justify-content: space-between; }
  180. .fold summary::-webkit-details-marker { display: none; }
  181. .fold summary::after { content: '展开'; font-size: 11px; font-weight: 600; color: var(--muted); }
  182. .fold[open] summary::after { content: '收起'; }
  183. .knfold { border-color: var(--accent-soft); }
  184. .knfold summary { background: var(--accent-soft); color: var(--accent); }
  185. .knbody { padding: 9px 10px; font-size: 12px; line-height: 1.68; color: var(--ink); white-space: pre-wrap; max-height: 260px; overflow: auto; }
  186. /* 点击放大大图(小红书原帖被反爬封,直接看本地大图) */
  187. .lightbox { position: fixed; inset: 0; background: rgba(0,0,0,.9); z-index: 60;
  188. display: flex; align-items: center; justify-content: center; padding: 22px 72px; cursor: zoom-out; }
  189. .lbfig { margin: 0; max-width: 100%; max-height: 100%; display: flex; flex-direction: column; align-items: center; gap: 8px; }
  190. .lightbox img { max-width: calc(100vw - 150px); max-height: calc(100vh - 76px); object-fit: contain; border-radius: 6px; cursor: default; background: #fff; }
  191. .lbfig figcaption { color: #f4f4f7; font-size: 12px; max-width: min(860px, 90vw); text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  192. .lightbox .lbx { position: fixed; top: 14px; right: 20px; color: #fff; font-size: 28px; cursor: pointer; border: 0; background: transparent; padding: 4px 8px; }
  193. .lbnav { position: fixed; top: 50%; transform: translateY(-50%); width: 42px; height: 54px; border: 0; border-radius: 10px; background: rgba(255,255,255,.14); color: #fff; font-size: 34px; cursor: pointer; }
  194. .lbnav:hover { background: rgba(255,255,255,.24); }
  195. .lbnav.prev { left: 18px; }
  196. .lbnav.next { right: 18px; }
  197. .lane .bt { font-size: 11.8px; color: #444; line-height: 1.58; padding: 0 10px 9px; margin: 0; max-height: 190px;
  198. overflow: auto; white-space: pre-wrap; }
  199. .lane .meta { color: var(--muted); font-size: 11.5px; }
  200. .lane .fail { color: var(--bad); font-size: 12.5px; padding: 18px 4px; text-align: center; }
  201. /* 分页 */
  202. .pager { display: flex; gap: 6px; align-items: center; justify-content: center; margin-top: 18px; }
  203. .pager button { border: 1px solid var(--line); background: var(--card); border-radius: 8px;
  204. padding: 6px 12px; cursor: pointer; font-size: 13px; }
  205. .pager button:disabled { opacity: .4; cursor: default; }
  206. .pager .at { color: var(--muted); font-size: 12.5px; padding: 0 6px; }
  207. .empty { text-align: center; color: var(--muted); padding: 48px 0; font-size: 13.5px; }
  208. /* 每条 query 的「真实搜索结果」按钮 */
  209. .btn { display: inline-block; background: var(--accent); color: #fff; border-radius: 8px;
  210. padding: 5px 11px; font-size: 12.5px; white-space: nowrap; }
  211. .btn:hover { text-decoration: none; opacity: .9; }
  212. .btn.off { background: #f1f1f4; color: var(--muted); cursor: default; }
  213. /* query 详情页(点进该 query 的多个视频) */
  214. .detail-top { margin-bottom: 8px; display: flex; align-items: center; justify-content: space-between; gap: 12px; }
  215. .back { font-size: 13px; }
  216. .dq { font-size: 18px; margin: 10px 0 2px; }
  217. .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
  218. .result-band + .result-band { margin-top: 16px; }
  219. .result-row { align-items: start; }
  220. .row-empty { color: var(--muted); font-size: 12.5px; padding: 8px 0 12px; border-top: 1px dashed var(--line); }
  221. /* 渠道分区:抖音一组、微信公众号一组,标题色区分 */
  222. .pgroup { margin-top: 22px; }
  223. .ghead { display: flex; align-items: center; gap: 8px; font-size: 14.5px; font-weight: 700;
  224. padding-bottom: 8px; margin-bottom: 14px; border-bottom: 2px solid var(--line); }
  225. .ghead.dy { color: #111; border-bottom-color: #111; }
  226. .ghead.wx { color: var(--ok); border-bottom-color: var(--ok); }
  227. .ghead.xhs { color: #ff2442; border-bottom-color: #ff2442; }
  228. .ghead .gn { font-size: 11.5px; font-weight: 600; color: var(--muted);
  229. background: #f0f0f3; border-radius: 10px; padding: 1px 8px; }
  230. .gnone { color: var(--muted); font-size: 12.5px; padding: 2px 0 6px; }
  231. .perr { color: var(--bad); font-size: 12px; margin: -6px 0 10px; }
  232. .status { font-size: 11.5px; font-weight: 700; border-radius: 10px; padding: 1px 8px; background: #f0f0f3; color: var(--muted); }
  233. .status.done { background: #e6f6ee; color: var(--ok); }
  234. .status.partial, .status.running { background: #fff6df; color: #9a6a00; }
  235. .status.failed { background: #fbeaea; color: var(--bad); }
  236. .src { display: inline-block; margin-top: 8px; font-size: 12px; }
  237. .detail-link { margin-left: 8px; font-weight: 700; }
  238. /* 平台区内:创作知识 / 非创作知识 小标题(各自起一行) */
  239. .subhd { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 700;
  240. color: var(--ink); margin: 14px 0 8px; }
  241. .subhd::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--ok); }
  242. .subhd.dim { color: var(--muted); }
  243. .subhd.dim::before { background: var(--bad); }
  244. .subn { font-size: 11px; font-weight: 700; color: var(--muted); background: #f0f0f3; border-radius: 10px; padding: 1px 7px; }
  245. /* 卡片左侧细色条,进一步区分渠道归属 */
  246. .lane.dy { border-left: 3px solid #111; }
  247. .lane.wx { border-left: 3px solid var(--ok); }
  248. .lane.xhs { border-left: 3px solid #ff2442; }
  249. /* decode 真实单例详情 */
  250. .source-panel {
  251. display: grid;
  252. grid-template-columns: minmax(0, 1.15fr) minmax(280px, .85fr);
  253. gap: 18px;
  254. align-items: start;
  255. margin: 12px 0 18px;
  256. }
  257. .source-summary {
  258. color: #3f3f46;
  259. margin: 12px 0;
  260. white-space: pre-wrap;
  261. max-width: 72ch;
  262. }
  263. .source-media {
  264. background: #fff;
  265. border: 1px solid var(--line);
  266. border-radius: 10px;
  267. padding: 10px;
  268. min-height: 180px;
  269. }
  270. .source-media video {
  271. width: 100%;
  272. max-height: 360px;
  273. border-radius: 8px;
  274. background: #000;
  275. }
  276. .decode-thumbs {
  277. display: grid;
  278. grid-template-columns: repeat(auto-fit, minmax(92px, 1fr));
  279. gap: 8px;
  280. }
  281. .decode-thumbs img {
  282. width: 100%;
  283. aspect-ratio: 3 / 4;
  284. object-fit: cover;
  285. object-position: top;
  286. border-radius: 8px;
  287. border: 1px solid var(--line);
  288. background: #f0f0f3;
  289. }
  290. .media-empty {
  291. display: grid;
  292. min-height: 160px;
  293. place-items: center;
  294. color: var(--muted);
  295. background: #fafafb;
  296. border-radius: 8px;
  297. }
  298. .decode-strip {
  299. display: grid;
  300. grid-template-columns: repeat(4, minmax(120px, 1fr));
  301. gap: 10px;
  302. margin-bottom: 20px;
  303. }
  304. .decode-strip > div {
  305. background: #fff;
  306. border: 1px solid var(--line);
  307. border-radius: 10px;
  308. padding: 10px 12px;
  309. }
  310. .decode-strip span {
  311. display: block;
  312. color: var(--muted);
  313. font-size: 11.5px;
  314. margin-bottom: 3px;
  315. }
  316. .decode-strip b { font-size: 18px; }
  317. .decode-section {
  318. margin-top: 22px;
  319. }
  320. .decode-section h2 {
  321. font-size: 16px;
  322. margin: 0 0 10px;
  323. }
  324. .read-panel {
  325. background: #fff;
  326. border: 1px solid var(--line);
  327. border-radius: 10px;
  328. padding: 14px 16px;
  329. color: #292932;
  330. white-space: pre-wrap;
  331. line-height: 1.72;
  332. max-height: 360px;
  333. overflow: auto;
  334. }
  335. .gate-panel {
  336. display: flex;
  337. flex-wrap: wrap;
  338. gap: 8px;
  339. align-items: center;
  340. margin-top: 10px;
  341. color: var(--muted);
  342. }
  343. .pill {
  344. display: inline-flex;
  345. align-items: center;
  346. border-radius: 999px;
  347. padding: 2px 9px;
  348. font-size: 11.5px;
  349. font-weight: 700;
  350. background: #f0f0f3;
  351. color: #555;
  352. }
  353. .pill.decoded,
  354. .pill.ingested {
  355. background: #e6f6ee;
  356. color: var(--ok);
  357. }
  358. .pill.rejected,
  359. .pill.failed {
  360. background: #fbeaea;
  361. color: var(--bad);
  362. }
  363. .pill.draft,
  364. .pill.pending {
  365. background: #fff6df;
  366. color: #9a6a00;
  367. }
  368. .knowledge-grid,
  369. .payload-grid {
  370. display: grid;
  371. grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  372. gap: 12px;
  373. }
  374. .knowledge-card,
  375. .payload-card {
  376. background: #fff;
  377. border: 1px solid var(--line);
  378. border-radius: 10px;
  379. padding: 13px 14px;
  380. min-width: 0;
  381. }
  382. .knowledge-card.what { border-color: #cfe8ff; }
  383. .knowledge-card.how { border-color: #d8eadf; }
  384. .knowledge-card.why { border-color: #eadfcf; }
  385. .knowledge-head,
  386. .payload-head {
  387. display: flex;
  388. gap: 8px;
  389. justify-content: space-between;
  390. align-items: start;
  391. margin-bottom: 8px;
  392. }
  393. .knowledge-head span {
  394. flex: 0 0 auto;
  395. color: var(--accent);
  396. background: var(--accent-soft);
  397. border-radius: 7px;
  398. padding: 2px 7px;
  399. font-size: 11.5px;
  400. font-weight: 700;
  401. }
  402. .knowledge-head b,
  403. .payload-head b {
  404. font-size: 14px;
  405. line-height: 1.45;
  406. }
  407. .knowledge-meta,
  408. .payload-meta {
  409. display: flex;
  410. flex-wrap: wrap;
  411. gap: 6px;
  412. color: var(--muted);
  413. font-size: 11.5px;
  414. margin-bottom: 9px;
  415. }
  416. .knowledge-purpose {
  417. margin: 8px 0 10px;
  418. color: #33343c;
  419. white-space: pre-wrap;
  420. }
  421. .step-list,
  422. .what-body {
  423. display: grid;
  424. gap: 8px;
  425. margin-top: 8px;
  426. }
  427. .step-row {
  428. display: grid;
  429. grid-template-columns: 24px minmax(0, 1fr);
  430. gap: 9px;
  431. padding: 9px 10px;
  432. background: #fafafb;
  433. border: 1px solid #eeeef1;
  434. border-radius: 8px;
  435. }
  436. .step-no {
  437. width: 22px;
  438. height: 22px;
  439. border-radius: 50%;
  440. display: inline-grid;
  441. place-items: center;
  442. color: #fff;
  443. background: var(--accent);
  444. font-size: 12px;
  445. font-weight: 700;
  446. }
  447. .step-row b {
  448. display: inline-block;
  449. min-width: 34px;
  450. color: #555;
  451. margin-right: 8px;
  452. }
  453. .what-row {
  454. display: grid;
  455. gap: 4px;
  456. padding: 9px 10px;
  457. background: #fafafb;
  458. border: 1px solid #eeeef1;
  459. border-radius: 8px;
  460. }
  461. .scope-row {
  462. display: flex;
  463. flex-wrap: wrap;
  464. gap: 6px;
  465. margin-top: 10px;
  466. }
  467. .scope-chip {
  468. border-radius: 999px;
  469. border: 1px solid var(--line);
  470. background: #fafafb;
  471. color: #555;
  472. padding: 2px 8px;
  473. font-size: 11.5px;
  474. }
  475. .jsonbox,
  476. .payload-content {
  477. margin: 0;
  478. padding: 10px;
  479. border-radius: 8px;
  480. background: #14151f;
  481. color: #f1f1f5;
  482. white-space: pre-wrap;
  483. word-break: break-word;
  484. font: 12px/1.65 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  485. max-height: 280px;
  486. overflow: auto;
  487. }
  488. .payload-content {
  489. margin-top: 8px;
  490. background: #fbfbfd;
  491. color: #2f3038;
  492. border: 1px solid var(--line);
  493. }
  494. .decode-shell { min-height: 100vh; }
  495. /* 老版 Decode 知识详情页视觉系统:只作用于 decode-item 路由 */
  496. .legacy-decode-page {
  497. height: 100vh;
  498. min-height: 100vh;
  499. overflow: hidden;
  500. background: #f5f5f7;
  501. color: #111827;
  502. font: 13px/1.5 -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
  503. }
  504. .legacy-decode-page * { box-sizing: border-box; }
  505. .legacy-decode-page a { color: #2563eb; text-decoration: none; }
  506. .legacy-decode-page a:hover { text-decoration: underline; }
  507. .legacy-decode-page .app {
  508. height: 100vh;
  509. display: flex;
  510. flex-direction: column;
  511. }
  512. .legacy-decode-page header.top {
  513. flex: none;
  514. padding: 11px 18px 9px;
  515. background: #fff;
  516. border-bottom: 1px solid #e5e7eb;
  517. }
  518. .legacy-decode-page header.top h1 {
  519. margin: 0 0 7px;
  520. font-size: 16px;
  521. line-height: 1.35;
  522. font-weight: 600;
  523. letter-spacing: 0;
  524. }
  525. .legacy-decode-page .picker {
  526. display: flex;
  527. gap: 6px;
  528. flex-wrap: wrap;
  529. align-items: center;
  530. }
  531. .legacy-decode-page .picker .lab {
  532. font-size: 11.5px;
  533. color: #9ca3af;
  534. margin-right: 2px;
  535. }
  536. .legacy-decode-page .pill {
  537. display: inline-flex;
  538. align-items: center;
  539. font-size: 12px;
  540. font-weight: 400;
  541. line-height: 1.4;
  542. padding: 4px 11px;
  543. border-radius: 14px;
  544. border: 1px solid #e5e7eb;
  545. background: #fff;
  546. color: #6b7280;
  547. cursor: pointer;
  548. }
  549. .legacy-decode-page .pill:hover {
  550. background: #f3f4f6;
  551. text-decoration: none;
  552. }
  553. .legacy-decode-page .pill.on {
  554. background: #1e293b;
  555. color: #fff;
  556. border-color: #1e293b;
  557. font-weight: 600;
  558. }
  559. .legacy-decode-page .pill .n {
  560. font-size: 10px;
  561. opacity: .7;
  562. margin-left: 4px;
  563. }
  564. .legacy-decode-page .scroll {
  565. flex: 1;
  566. overflow: auto;
  567. background: #f5f5f7;
  568. padding-bottom: 40px;
  569. }
  570. .legacy-decode-page .empty {
  571. color: #9ca3af;
  572. padding: 50px;
  573. text-align: center;
  574. }
  575. .legacy-decode-page details.src {
  576. display: block;
  577. margin: 10px 18px 0;
  578. background: #fff;
  579. border: 1px solid #e2e8f0;
  580. border-radius: 6px;
  581. }
  582. .legacy-decode-page details.src summary {
  583. padding: 8px 14px;
  584. cursor: pointer;
  585. font-size: 12px;
  586. color: #475569;
  587. list-style: none;
  588. }
  589. .legacy-decode-page details.src summary::-webkit-details-marker { display: none; }
  590. .legacy-decode-page details.src summary::before {
  591. content: '▶ ';
  592. color: #94a3b8;
  593. font-size: 10px;
  594. }
  595. .legacy-decode-page details.src[open] summary::before { content: '▼ '; }
  596. .legacy-decode-page .srcbody {
  597. padding: 4px 16px 12px;
  598. font-size: 12px;
  599. }
  600. .legacy-decode-page .srcbody a {
  601. color: #2563eb;
  602. word-break: break-all;
  603. }
  604. .legacy-decode-page .srcimgs {
  605. display: flex;
  606. flex-wrap: wrap;
  607. gap: 6px;
  608. margin-top: 8px;
  609. }
  610. .legacy-decode-page .srcimgs img {
  611. width: 80px;
  612. height: 80px;
  613. object-fit: cover;
  614. border-radius: 4px;
  615. border: 1px solid #e2e8f0;
  616. cursor: zoom-in;
  617. }
  618. .legacy-decode-page .srcvideo {
  619. margin-top: 8px;
  620. }
  621. .legacy-decode-page .srcvideo video {
  622. width: min(720px, 100%);
  623. max-height: 360px;
  624. background: #000;
  625. border-radius: 5px;
  626. }
  627. .legacy-decode-page .srcread {
  628. font-size: 12.5px;
  629. color: #1f2937;
  630. line-height: 1.6;
  631. margin-top: 6px;
  632. background: #fff;
  633. border-left: 3px solid #0e7490;
  634. padding: 6px 9px;
  635. }
  636. .legacy-decode-page .barhint {
  637. margin: 8px 18px 0;
  638. font-size: 11.5px;
  639. color: #6b7280;
  640. }
  641. .legacy-decode-page .ribbon {
  642. margin: 11px 18px 0;
  643. background: #fff;
  644. border: 1px solid #e2e8f0;
  645. border-radius: 8px;
  646. padding: 10px 14px;
  647. }
  648. .legacy-decode-page .rcap {
  649. font-size: 11.5px;
  650. color: #6b7280;
  651. margin-bottom: 8px;
  652. }
  653. .legacy-decode-page .rsteps {
  654. display: flex;
  655. align-items: stretch;
  656. flex-wrap: wrap;
  657. }
  658. .legacy-decode-page .rstep {
  659. flex: 1;
  660. min-width: 118px;
  661. border: 1px solid #e2e8f0;
  662. border-radius: 8px;
  663. padding: 8px 9px;
  664. cursor: pointer;
  665. background: #f8fafc;
  666. }
  667. .legacy-decode-page .rstep:hover {
  668. background: #ecfeff;
  669. border-color: #99d5d0;
  670. }
  671. .legacy-decode-page .rstep.auto {
  672. cursor: default;
  673. background: #f1f5f9;
  674. opacity: .9;
  675. }
  676. .legacy-decode-page .rstep.auto:hover {
  677. background: #f1f5f9;
  678. border-color: #e2e8f0;
  679. }
  680. .legacy-decode-page .rtop {
  681. display: flex;
  682. align-items: center;
  683. gap: 7px;
  684. }
  685. .legacy-decode-page .rn {
  686. width: 18px;
  687. height: 18px;
  688. border-radius: 50%;
  689. background: #0e7490;
  690. color: #fff;
  691. font-size: 11px;
  692. display: flex;
  693. align-items: center;
  694. justify-content: center;
  695. flex: none;
  696. }
  697. .legacy-decode-page .rstep.auto .rn { background: #94a3b8; }
  698. .legacy-decode-page .rlab {
  699. font-size: 13.5px;
  700. font-weight: 600;
  701. }
  702. .legacy-decode-page .rdesc {
  703. font-size: 11.5px;
  704. color: #6b7280;
  705. margin: 5px 0 7px;
  706. line-height: 1.5;
  707. }
  708. .legacy-decode-page .rbtn {
  709. font-size: 11.5px;
  710. color: #0e7490;
  711. }
  712. .legacy-decode-page .rstep.auto .rbtn { color: #94a3b8; }
  713. .legacy-decode-page .rarrow {
  714. display: flex;
  715. align-items: center;
  716. color: #cbd5e1;
  717. font-size: 18px;
  718. padding: 0 4px;
  719. flex: none;
  720. }
  721. .legacy-decode-page .lbtn {
  722. padding: 3px 9px;
  723. border: 1px solid #cbd5e1;
  724. border-radius: 5px;
  725. background: #fff;
  726. cursor: pointer;
  727. font-size: 11.5px;
  728. color: #334155;
  729. font-family: inherit;
  730. }
  731. .legacy-decode-page .lbtn:hover {
  732. background: #f1f5f9;
  733. text-decoration: none;
  734. }
  735. .legacy-decode-page .kcard {
  736. margin: 12px 18px 0;
  737. background: #fff;
  738. border: 1px solid #e2e8f0;
  739. border-radius: 8px;
  740. overflow: hidden;
  741. }
  742. .legacy-decode-page .khead {
  743. display: flex;
  744. align-items: center;
  745. gap: 8px;
  746. padding: 9px 14px;
  747. border-bottom: 1px solid #eef2f7;
  748. flex-wrap: wrap;
  749. }
  750. .legacy-decode-page .kno {
  751. font-size: 11px;
  752. font-weight: 700;
  753. color: #fff;
  754. background: #475569;
  755. border-radius: 4px;
  756. padding: 1px 7px;
  757. }
  758. .legacy-decode-page .ktype {
  759. font-size: 11px;
  760. font-weight: 700;
  761. border-radius: 4px;
  762. padding: 1px 8px;
  763. }
  764. .legacy-decode-page .ty-how { background: #cffafe; color: #155e75; }
  765. .legacy-decode-page .ty-what { background: #fae8ff; color: #86198f; }
  766. .legacy-decode-page .ty-why { background: #fef9c3; color: #854d0e; }
  767. .legacy-decode-page .ktitle {
  768. font-size: 14px;
  769. font-weight: 600;
  770. }
  771. .legacy-decode-page .krole {
  772. font-size: 10.5px;
  773. padding: 1px 6px;
  774. border-radius: 3px;
  775. background: #f1f5f9;
  776. color: #64748b;
  777. }
  778. .legacy-decode-page .kbiz {
  779. font-size: 11px;
  780. padding: 1px 7px;
  781. border-radius: 3px;
  782. background: #fef3c7;
  783. color: #92400e;
  784. }
  785. .legacy-decode-page .kacts {
  786. margin-left: auto;
  787. display: flex;
  788. gap: 6px;
  789. }
  790. .legacy-decode-page .kbody {
  791. padding: 6px 14px 13px;
  792. }
  793. .legacy-decode-page .twrap {
  794. overflow: auto;
  795. border: 1px solid #e5e7eb;
  796. border-radius: 6px;
  797. margin-top: 8px;
  798. }
  799. .legacy-decode-page table.proc {
  800. width: max-content;
  801. min-width: 100%;
  802. border-collapse: collapse;
  803. font-size: 12px;
  804. background: #fff;
  805. border: 0;
  806. border-radius: 0;
  807. }
  808. .legacy-decode-page table.proc th,
  809. .legacy-decode-page table.proc td {
  810. border: 1px solid #e5e7eb;
  811. padding: 6px 8px;
  812. vertical-align: top;
  813. line-height: 1.5;
  814. }
  815. .legacy-decode-page table.proc thead th {
  816. font-weight: 600;
  817. text-align: center;
  818. font-size: 12px;
  819. position: sticky;
  820. top: 0;
  821. z-index: 3;
  822. }
  823. .legacy-decode-page table.proc thead tr:nth-child(2) th { top: 30px; }
  824. .legacy-decode-page td.idx {
  825. width: 30px;
  826. text-align: center;
  827. color: #6b7280;
  828. background: #f8fafc;
  829. }
  830. .legacy-decode-page th.c-intent,
  831. .legacy-decode-page td.intent {
  832. width: 210px;
  833. min-width: 210px;
  834. max-width: 210px;
  835. white-space: pre-wrap;
  836. }
  837. .legacy-decode-page th.c-cstage,
  838. .legacy-decode-page td.cstage {
  839. width: 54px;
  840. text-align: center;
  841. background: #ecfeff;
  842. }
  843. .legacy-decode-page th.c-act,
  844. .legacy-decode-page td.act {
  845. min-width: 110px;
  846. max-width: 140px;
  847. word-break: break-word;
  848. background: #ecfeff;
  849. }
  850. .legacy-decode-page th.c-dir,
  851. .legacy-decode-page td.dir {
  852. min-width: 230px;
  853. max-width: 330px;
  854. white-space: pre-wrap;
  855. word-break: break-word;
  856. background: #ecfeff;
  857. }
  858. .legacy-decode-page th.c-out,
  859. .legacy-decode-page td.out {
  860. min-width: 160px;
  861. max-width: 240px;
  862. white-space: pre-wrap;
  863. background: #ecfeff;
  864. }
  865. .legacy-decode-page th.c-scope,
  866. .legacy-decode-page td.scope {
  867. width: 92px;
  868. min-width: 92px;
  869. max-width: 92px;
  870. word-break: break-word;
  871. }
  872. .legacy-decode-page th.g-frame { background: #0e7490; color: #fff; }
  873. .legacy-decode-page th.g-scope { background: #7c3aed; color: #fff; }
  874. .legacy-decode-page th.c-idx {
  875. background: #475569;
  876. color: #fff;
  877. vertical-align: middle;
  878. }
  879. .legacy-decode-page thead tr:nth-child(2) th.c-intent,
  880. .legacy-decode-page thead tr:nth-child(2) th.c-cstage,
  881. .legacy-decode-page thead tr:nth-child(2) th.c-act,
  882. .legacy-decode-page thead tr:nth-child(2) th.c-dir,
  883. .legacy-decode-page thead tr:nth-child(2) th.c-out {
  884. background: #0891b2;
  885. color: #fff;
  886. }
  887. .legacy-decode-page thead tr:nth-child(2) th.s-substance { background: #dc2626; color: #fff; }
  888. .legacy-decode-page thead tr:nth-child(2) th.s-form { background: #2563eb; color: #fff; }
  889. .legacy-decode-page thead tr:nth-child(2) th.s-feeling { background: #db2777; color: #fff; }
  890. .legacy-decode-page thead tr:nth-child(2) th.s-effect { background: #16a34a; color: #fff; }
  891. .legacy-decode-page thead tr:nth-child(2) th.s-intent { background: #d97706; color: #fff; }
  892. .legacy-decode-page td.scope.s-substance { background: #fef2f2; }
  893. .legacy-decode-page td.scope.s-form { background: #eff6ff; }
  894. .legacy-decode-page td.scope.s-feeling { background: #fdf2f8; }
  895. .legacy-decode-page td.scope.s-effect { background: #f0fdf4; }
  896. .legacy-decode-page td.scope.s-intent { background: #fffbeb; }
  897. .legacy-decode-page tr.step > td { border-top: 1.5px solid #cbd5e1; }
  898. .legacy-decode-page .cstage-chip {
  899. display: inline-block;
  900. font-size: 11px;
  901. padding: 1px 6px;
  902. border-radius: 10px;
  903. background: #ede9fe;
  904. color: #5b21b6;
  905. }
  906. .legacy-decode-page .act-chip {
  907. display: inline-block;
  908. font-size: 11.5px;
  909. padding: 1px 7px;
  910. border-radius: 4px;
  911. background: #fff7ed;
  912. color: #9a3412;
  913. border: 1px solid #fed7aa;
  914. }
  915. .legacy-decode-page .dir-txt {
  916. font-size: 11.5px;
  917. color: #33312c;
  918. line-height: 1.65;
  919. }
  920. .legacy-decode-page .out-txt {
  921. font-size: 11.5px;
  922. color: #166534;
  923. }
  924. .legacy-decode-page .in-txt {
  925. font-size: 11.5px;
  926. color: #1e40af;
  927. line-height: 1.6;
  928. }
  929. .legacy-decode-page .kindb {
  930. font-size: 10.5px;
  931. font-weight: 700;
  932. padding: 1px 8px;
  933. border-radius: 9px;
  934. margin-right: 8px;
  935. vertical-align: middle;
  936. }
  937. .legacy-decode-page .kind-子集 { background: #dbeafe; color: #1e40af; }
  938. .legacy-decode-page .kind-多维关系 { background: #dcfce7; color: #166534; }
  939. .legacy-decode-page .kind-序列 { background: #fef3c7; color: #92400e; }
  940. .legacy-decode-page .dimrule {
  941. font-size: 10.5px;
  942. padding: 1px 8px;
  943. border-radius: 9px;
  944. background: #ecfccb;
  945. color: #3f6212;
  946. margin-right: 8px;
  947. vertical-align: middle;
  948. }
  949. .legacy-decode-page .def {
  950. font-size: 13px;
  951. background: #fdf4ff;
  952. border-left: 3px solid #a21caf;
  953. border-radius: 0 6px 6px 0;
  954. padding: 8px 12px;
  955. margin: 6px 0 10px;
  956. }
  957. .legacy-decode-page table.elem {
  958. border-collapse: collapse;
  959. width: 100%;
  960. font-size: 12.5px;
  961. background: #fff;
  962. border: 0;
  963. }
  964. .legacy-decode-page table.elem td {
  965. border: 1px solid #f0e6f5;
  966. padding: 6px 10px;
  967. text-align: left;
  968. vertical-align: top;
  969. }
  970. .legacy-decode-page table.elem td.el {
  971. font-weight: 600;
  972. color: #86198f;
  973. background: #fdf4ff;
  974. width: 130px;
  975. }
  976. .legacy-decode-page .why-exp {
  977. font-size: 12.5px;
  978. line-height: 1.72;
  979. color: #1f2937;
  980. background: #fdf4ff;
  981. border-left: 3px solid #a21caf;
  982. border-radius: 0 6px 6px 0;
  983. padding: 9px 13px;
  984. margin: 6px 0;
  985. }
  986. .legacy-decode-page .kscopes {
  987. margin-top: 9px;
  988. display: flex;
  989. gap: 5px;
  990. flex-wrap: wrap;
  991. align-items: center;
  992. }
  993. .legacy-decode-page .kscopes .lab {
  994. font-size: 11px;
  995. color: #9ca3af;
  996. }
  997. .legacy-decode-page .sv {
  998. display: inline-block;
  999. cursor: pointer;
  1000. font-size: 11.5px;
  1001. padding: 1px 5px;
  1002. border-radius: 3px;
  1003. border: 1px solid rgba(0,0,0,.08);
  1004. background: rgba(255,255,255,.7);
  1005. margin: 1px 0;
  1006. }
  1007. .legacy-decode-page .sv:hover { box-shadow: 0 0 0 1px #1e293b; }
  1008. .legacy-decode-page .sv .k {
  1009. font-size: 11.5px;
  1010. opacity: .85;
  1011. font-weight: 700;
  1012. margin-right: 4px;
  1013. }
  1014. .legacy-decode-page table.proc th.c-scope { font-size: 13.5px; }
  1015. .legacy-decode-page .sv .mk {
  1016. font-size: 9px;
  1017. padding: 0 3px;
  1018. border-radius: 2px;
  1019. margin-left: 3px;
  1020. vertical-align: top;
  1021. }
  1022. .legacy-decode-page .mk-new { background: #fde68a; color: #92400e; }
  1023. .legacy-decode-page .mk-reuse { background: #bbf7d0; color: #166534; }
  1024. .legacy-decode-page .sv.s-substance { background: #fef2f2; }
  1025. .legacy-decode-page .sv.s-form { background: #eff6ff; }
  1026. .legacy-decode-page .sv.s-feeling { background: #fdf2f8; }
  1027. .legacy-decode-page .sv.s-effect { background: #f0fdf4; }
  1028. .legacy-decode-page .sv.s-intent { background: #fffbeb; }
  1029. .legacy-decode-page .modal {
  1030. position: fixed;
  1031. inset: 0;
  1032. background: rgba(0,0,0,.45);
  1033. z-index: 110;
  1034. display: flex;
  1035. align-items: center;
  1036. justify-content: center;
  1037. padding: 20px;
  1038. width: auto;
  1039. max-height: none;
  1040. overflow: visible;
  1041. border-radius: 0;
  1042. box-shadow: none;
  1043. }
  1044. .legacy-decode-page .mbox {
  1045. background: #fff;
  1046. width: 760px;
  1047. max-width: 94vw;
  1048. max-height: 86vh;
  1049. border-radius: 10px;
  1050. overflow: hidden;
  1051. display: flex;
  1052. flex-direction: column;
  1053. }
  1054. .legacy-decode-page .mbox h2 {
  1055. margin: 0;
  1056. padding: 13px 18px;
  1057. background: #0f766e;
  1058. color: #fff;
  1059. font-size: 14px;
  1060. display: flex;
  1061. align-items: center;
  1062. gap: 8px;
  1063. letter-spacing: 0;
  1064. }
  1065. .legacy-decode-page .mbox h2 .x {
  1066. margin-left: auto;
  1067. cursor: pointer;
  1068. font-size: 18px;
  1069. }
  1070. .legacy-decode-page .mbox .body {
  1071. padding: 15px 18px;
  1072. overflow: auto;
  1073. }
  1074. .legacy-decode-page .mbox pre {
  1075. margin: 0;
  1076. font: 12.5px/1.7 ui-monospace, Menlo, monospace;
  1077. white-space: pre-wrap;
  1078. color: #1f2937;
  1079. }
  1080. .legacy-decode-page .copybtn {
  1081. margin-left: auto;
  1082. background: rgba(255,255,255,.12);
  1083. color: #fff;
  1084. border-color: rgba(255,255,255,.28);
  1085. }
  1086. .legacy-decode-page .copybtn:hover { background: rgba(255,255,255,.2); }
  1087. .legacy-decode-page .lb {
  1088. position: fixed;
  1089. inset: 0;
  1090. background: rgba(0,0,0,.85);
  1091. display: flex;
  1092. align-items: center;
  1093. justify-content: center;
  1094. z-index: 120;
  1095. cursor: zoom-out;
  1096. }
  1097. .legacy-decode-page .lb img {
  1098. max-width: 92vw;
  1099. max-height: 92vh;
  1100. border-radius: 6px;
  1101. }
  1102. @media (max-width: 720px) {
  1103. .lanes { grid-template-columns: 1fr; }
  1104. .source-panel { grid-template-columns: 1fr; }
  1105. .decode-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  1106. .knowledge-grid, .payload-grid { grid-template-columns: 1fr; }
  1107. .lightbox { padding: 18px 12px 48px; }
  1108. .lightbox img { max-width: 96vw; max-height: 82vh; }
  1109. .lbnav { bottom: 10px; top: auto; transform: none; }
  1110. .lbnav.prev { left: 26px; }
  1111. .lbnav.next { right: 26px; }
  1112. .legacy-decode-page .rsteps { display: block; }
  1113. .legacy-decode-page .rstep { margin-top: 7px; }
  1114. .legacy-decode-page .rarrow { display: none; }
  1115. .legacy-decode-page .khead { align-items: flex-start; }
  1116. .legacy-decode-page .kacts {
  1117. margin-left: 0;
  1118. width: 100%;
  1119. }
  1120. }