/* ══════════════════════════════════════════════════════════════════════════════
   任务台账视图 —— **两页共用**的那套样式：
     · `index.html` 的「Task Tree」：整次制作跑到当前，Task 定义和证据长什么样；
     · `round.html`：第 N 轮当时，任务长什么样。

   两页看的是同一种东西（一棵任务树 + 每个任务的产出与判定），所以排版与配色只有一套：
   **左轨道 + 右详情**。轨道一眼看完整棵树（状态色 + 产出缩略 + 迷你验收条），详情把选中的
   那个任务摊开 —— 产出图、逐条验收结论、参考图都常驻，只有几千字的原文还折叠着。

   页面各自的部分（抬头、Tab、对照那一屏）留在各自的 HTML 里，这里只管任务视图与设计变量。
   ══════════════════════════════════════════════════════════════════════════════ */

:root {
  --bg: #0d0f13; --panel: #14171d; --panel2: #191d25; --raise: #1f242e;
  --border: #262b35; --border2: #333a47;
  --text: #e8eaef; --muted: #8a92a1; --dim: #626b7a;
  --accent: #5b8cff; --ok: #22c55e; --fail: #ef4444; --run: #eab308; --warm: #ffb020;
  --sub: #a855f7;
  --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
  --sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB",
          "Microsoft YaHei", sans-serif;
}
* { box-sizing: border-box; }
::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-thumb { background: #2c323d; border-radius: 6px; }
::-webkit-scrollbar-thumb:hover { background: #3a4150; }
::-webkit-scrollbar-track { background: transparent; }

.badge { font-size: 10px; padding: 2.5px 8px; border-radius: 20px; font-weight: 700;
         letter-spacing: .3px; white-space: nowrap; }
.badge.success { background: rgba(34,197,94,.14); color: var(--ok); box-shadow: inset 0 0 0 1px rgba(34,197,94,.25); }
.badge.failed { background: rgba(239,68,68,.14); color: var(--fail); box-shadow: inset 0 0 0 1px rgba(239,68,68,.25); }
.badge.running { background: rgba(234,179,8,.14); color: var(--run); box-shadow: inset 0 0 0 1px rgba(234,179,8,.25); }
.badge.interrupted { background: rgba(139,147,161,.14); color: var(--muted); box-shadow: inset 0 0 0 1px rgba(139,147,161,.22); }

.tag { font-size: 9.5px; padding: 1px 6px; border-radius: 7px; font-weight: 700; margin-left: 6px;
       border: 1px solid var(--border2); color: var(--dim); white-space: nowrap; vertical-align: 1.5px; }
.tag.critical { border-color: rgba(239,68,68,.4); color: #f87171; }
.tag.minor { border-color: rgba(139,147,161,.35); }
.tag.spec { border-color: rgba(91,140,255,.4); color: #93b4ff; }
.tag.quality { border-color: rgba(168,85,247,.4); color: #c084fc; }
.tag.role.business_result { border-color: rgba(34,197,94,.35); color: #86efac; }
.tag.role.technical_boundary { border-color: rgba(255,176,32,.4); color: #fbbf24; }
.tag.phase.preproduction { border-color: rgba(91,140,255,.42); color: #93b4ff; }
.tag.phase.production { border-color: rgba(34,197,94,.38); color: #86efac; }
.tag.storyboard { border-color: rgba(255,176,32,.4); color: #fbbf24; }
.state-warning { color: #fbbf24 !important; }

/* 本轮动过 / 已删除这类标记：短、密、带色，跟徽标区分开 */
.flag { font-size: 9.5px; font-weight: 700; line-height: 1; padding: 2px 5px; border-radius: 4px; }
.flag.new { color: #93b4ff; background: rgba(91,140,255,.16); }
.flag.chg { color: #c084fc; background: rgba(168,85,247,.16); }
.flag.pick { color: var(--warm); background: rgba(255,176,32,.16); }
.flag.gone { color: var(--muted); background: rgba(139,147,161,.16); }

.empty { color: var(--muted); text-align: center; margin-top: 14vh; font-size: 13.5px; line-height: 2.1; }
.empty code { font-family: var(--mono); color: var(--accent); }

/* ── 两栏骨架 ──────────────────────────────────────────────────────────────
   两栏各自滚：任务多的时候轨道自己滚，看某个任务的长上下文时详情自己滚，互不牵动。 */
.tv { flex: 1; min-height: 0; display: flex; }
.tv-track { flex: 0 0 284px; min-width: 0; overflow-y: auto; background: var(--panel);
            border-right: 1px solid var(--border); padding: 9px 8px 18px; }
.tv-detail { flex: 1; min-width: 0; overflow-y: auto; padding: 16px 22px 40px; }

.tv-head { display: flex; align-items: center; gap: 8px; padding: 2px 6px 8px; font-size: 10.5px;
           color: var(--dim); font-family: var(--mono); flex-wrap: wrap; }
.tv-head .n { color: var(--muted); }

/* 轨道一项：状态色竖条 + 产出缩略 + 名称 + 一行 micro */
.ti { display: flex; gap: 9px; width: 100%; text-align: left; padding: 7px 8px 7px 9px;
      border: 1px solid transparent; border-radius: 9px; background: transparent; color: inherit;
      cursor: pointer; font: inherit; position: relative; margin-bottom: 2px;
      transition: background .12s, border-color .12s; }
.ti::before { content: ""; position: absolute; left: 0; top: 9px; bottom: 9px; width: 3px;
              border-radius: 2px; background: var(--dim); }
.ti.accepted::before { background: var(--ok); }
.ti.rejected::before { background: var(--fail); }
.ti.evaluation_unknown::before { background: var(--warm); }
.ti.not_evaluated::before { background: var(--run); }
.ti:hover { background: var(--panel2); }
.ti.on { background: var(--raise); border-color: var(--border2); }
.ti:focus-visible, button:focus-visible, a:focus-visible, summary:focus-visible {
  outline: 2px solid var(--accent); outline-offset: 2px;
}
.ti.gone { opacity: .55; }
.ti.gone .tname { text-decoration: line-through; }
.tshot { flex: 0 0 42px; height: 54px; border-radius: 6px; object-fit: cover; background: #0b0d11;
         border: 1px solid var(--border); }
.tshot.none { display: flex; align-items: center; justify-content: center; font-size: 9px;
              color: var(--dim); border-style: dashed; text-align: center; line-height: 1.3; }
.tbody { min-width: 0; flex: 1; }
.trow { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; }
.tkey { font-family: var(--mono); font-size: 11px; font-weight: 700; color: var(--accent); }
.tname { font-size: 12px; line-height: 1.4; margin-top: 2px; color: var(--text);
         display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.tmicro { display: flex; align-items: center; gap: 6px; margin-top: 5px; font-size: 10px;
          color: var(--dim); font-family: var(--mono); }
.task-rounds { color: #93b4ff; }
/* 迷你验收条：一格一条验收标准，绿=达标、红=未达标、灰=还没判。后面跟着 4/5 这样的数字 ——
   光有色块，第一次看的人不知道那是什么 */
.mini { display: flex; gap: 2px; }
.mini i { width: 7px; height: 7px; border-radius: 2px; background: #2b313c; display: block; }
.mini i.p { background: var(--ok); } .mini i.f { background: var(--fail); }
.mnum { font-family: var(--mono); font-size: 10px; }
.mnum.p { color: var(--ok); } .mnum.f { color: var(--fail); }
.kid { margin-left: 14px; }
.kid::after { content: ""; position: absolute; left: -8px; top: 0; bottom: 0;
              border-left: 1px dashed var(--border2); }

/* ── 详情 ────────────────────────────────────────────────────────────────── */
/* 切任务时整块淡入：不加这一下，两个任务的详情长得像，切没切过去看不出来 */
@keyframes tv-rise { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: none; } }
.d { animation: tv-rise .18s ease-out both; }
.d > * { animation: tv-rise .22s ease-out both; }
.d > *:nth-child(2) { animation-delay: .03s; }
.d > *:nth-child(3) { animation-delay: .06s; }
.d > *:nth-child(4) { animation-delay: .09s; }

.dhead { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.dkey { font-family: var(--mono); font-size: 13px; font-weight: 700; color: var(--accent);
        background: rgba(91,140,255,.12); border: 1px solid rgba(91,140,255,.25);
        border-radius: 7px; padding: 2px 9px; }
.dname { font-size: 20px; font-weight: 700; letter-spacing: -.2px; text-wrap: balance; }
.dsub { margin-top: 7px; font-size: 11px; color: var(--dim); font-family: var(--mono);
        display: flex; gap: 5px 12px; flex-wrap: wrap; }
.dsub a { color: var(--accent); text-decoration: none; }
.task-goal { margin-top: 16px; }
.dgoal { margin-top: 8px; max-width: 76ch; font-size: 13px; line-height: 1.75; color: #d6dae2;
         border: 1px solid var(--border); border-radius: 8px; background: var(--panel);
         padding: 9px 11px; white-space: pre-wrap; word-break: break-word; }
.run-position { margin-top: 12px; max-width: 1120px; border: 1px solid var(--border);
                border-radius: 9px; background: var(--panel); overflow: hidden; }
.run-position-head { display: flex; align-items: center; gap: 10px; padding: 8px 11px;
                     border-bottom: 1px solid var(--border); }
.run-position-head b { color: var(--text); font-size: 11.5px; }
.run-position-state { margin-left: auto; font: 10px var(--mono); }
.run-position-state.ok { color: var(--ok); } .run-position-state.wait { color: var(--warm); }
.run-position-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
                     gap: 0 16px; padding: 5px 11px 8px; }
.run-position-grid > div { display: flex; align-items: center; gap: 6px; min-width: 0;
                           padding: 5px 0; color: var(--muted); font-size: 11px; }
.run-position-grid > div > span:first-child { flex: 0 0 auto; color: var(--dim); font: 10px var(--mono); }
.run-position-tasks button, .run-position-path button { appearance: none; padding: 1px 6px;
  border: 1px solid rgba(91,140,255,.35); border-radius: 5px; background: rgba(91,140,255,.08);
  color: #93b4ff; cursor: pointer; font: 700 10px var(--mono); }
.run-position-tasks button:hover, .run-position-path button:hover { border-color: var(--accent); }
.run-position-path { grid-column: 1 / -1; }
.run-position-path i { color: var(--dim); font-style: normal; }
.run-position-none { color: var(--dim); }

.sec { margin-top: 18px; }
.sech { display: flex; align-items: center; gap: 9px; font-size: 11.5px; letter-spacing: .5px;
        color: var(--dim); font-family: var(--mono); margin-bottom: 9px; }
.sech::after { content: ""; flex: 1; height: 1px; background: var(--border); }
.sech .cnt { color: var(--muted); letter-spacing: 0; }
.core-title { font: 750 14px/1.25 var(--sans); letter-spacing: 0; text-wrap: balance; }
.core-title.goal { color: #93b4ff; }
.core-title.relation { color: #c4b5fd; }
.core-title.input { color: #67e8f9; }
.core-title.output { color: #fbbf24; }
.core-title.evaluation { color: #86efac; }
.core-title.plan { color: #93b4ff; }
.core-title.basis { color: #c4b5fd; }
.core-title.snapshot { color: #c4b5fd; }
.core-title.execution { color: #fbbf24; }
.core-title.handoff { color: #67e8f9; }
.task-relations > summary { display: flex; align-items: center; gap: 9px; cursor: pointer;
  list-style: none; color: var(--dim); font: 11.5px var(--mono); letter-spacing: .5px; }
.task-relations > summary::-webkit-details-marker { display: none; }
.task-relations > summary::before { content: "▸"; flex: 0 0 auto; font-size: 9px;
  transition: transform .15s; }
.task-relations[open] > summary::before { transform: rotate(90deg); }
.task-relations > summary::after { content: ""; flex: 1; height: 1px; background: var(--border); }
.task-relations > summary b.core-title { color: #c4b5fd; font-weight: 750; }
.task-relations > summary span { color: var(--muted); letter-spacing: 0; }
.task-relations-body { display: flex; flex-direction: column; gap: 10px; margin-top: 9px; }
.task-relations-body .run-position { width: 100%; max-width: none; margin-top: 0; }

/* 产出与验收**并排**：「做出来的」和「哪条没过」要在同一屏里对着看，隔开就得来回滚。 */
.stage { display: grid; grid-template-columns: minmax(0, 1fr) minmax(340px, 42%);
         gap: 14px; align-items: start; }
@media (max-width: 1180px) { .stage { grid-template-columns: 1fr; } }
.col { min-width: 0; display: flex; flex-direction: column; gap: 12px; }
.box { border: 1px solid var(--border); border-radius: 11px; background: var(--panel);
       padding: 11px 12px; }
.boxh { display: flex; align-items: center; gap: 8px; font-size: 11px; color: var(--muted);
        font-family: var(--mono); margin-bottom: 9px; flex-wrap: wrap; }
.boxh .r { margin-left: auto; }

/* Task 的定义输入排在产出之前：先知道拿到了什么，再判断做出了什么。 */
.input-box { border: 1px solid var(--border); border-radius: 11px; background: var(--panel);
             padding: 2px 12px; }
.input-group { display: grid; grid-template-columns: 104px minmax(0, 1fr); gap: 12px;
               padding: 11px 0; border-bottom: 1px solid var(--border); }
.input-label { color: var(--muted); font: 11px var(--mono); padding-top: 3px; }
.input-label span { margin-left: 6px; color: var(--dim); }
.input-media { display: flex; align-items: flex-start; gap: 8px; overflow-x: auto; min-width: 0;
               padding-bottom: 2px; }
.input-media img { flex: 0 0 auto; width: 68px; height: 82px; object-fit: cover; border-radius: 6px;
                   border: 1px solid var(--border2); cursor: zoom-in; background: #0b0d11; }
.input-media video { flex: 0 0 auto; width: 180px; max-height: 116px; border-radius: 7px;
                     border: 1px solid var(--border2); background: #0b0d11; }
.input-media audio { width: min(320px, 100%); height: 34px; }
.dependency { padding: 8px 0; border-top: 1px dashed var(--border); }
.dependency:first-of-type { border-top: none; padding-top: 0; }
.dependency-list { min-width: 0; }
.dep-main, .relation-line { display: flex; align-items: center; gap: 7px; min-width: 0; }
.dep-main button, .relation-line button { appearance: none; border: 1px solid rgba(91,140,255,.35);
  border-radius: 5px; padding: 1px 6px; color: #93b4ff; background: rgba(91,140,255,.09);
  cursor: pointer; font: 700 10.5px var(--mono); }
.dep-main > span:nth-child(2), .relation-line > span:nth-child(2) { overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
.dep-state { margin-left: auto; flex: 0 0 auto; font: 10px var(--mono); }
.dep-state.ok { color: var(--ok); } .dep-state.wait { color: var(--warm); }
.dep-meta, .relation-purpose, .relation-kind { color: var(--dim); font: 10.5px var(--mono); }
.dep-meta { margin: 5px 0 0 1px; }
.dep-products { display: flex; align-items: center; gap: 7px; margin-top: 7px; overflow-x: auto; }
.dep-products img, .dep-products video { width: 72px; max-height: 72px; object-fit: cover;
                                        border-radius: 5px; border: 1px solid var(--border); }
.dep-products audio { width: 240px; height: 32px; }
.artifact-chip { color: var(--muted); font-size: 10.5px; padding: 5px 8px; border-radius: 6px;
                 border: 1px solid var(--border); background: var(--panel2); }
.relation-line { padding: 4px 0; font-size: 11px; }
.relation-purpose { margin-left: auto; }
.relation-kind { color: #93b4ff; }
.task-instruction { border-bottom: 0; }
.instruction-body { min-width: 0; }
.instruction-preview { color: #cfd4dd; font-size: 11.5px; line-height: 1.7;
                       white-space: pre-wrap; word-break: break-word; }
.input-context { margin-top: 7px; border: 1px solid var(--border); border-radius: 7px; overflow: hidden; }
.input-context > summary { cursor: pointer; padding: 8px 10px; color: var(--muted);
  font: 11px var(--mono); list-style: none; }
.input-context > summary::before { content: "▸"; display: inline-block; margin-right: 7px;
  transition: transform .15s; }
.input-context[open] > summary::before { transform: rotate(90deg); }
.input-context > summary span { color: var(--dim); margin-left: 6px; }
.input-context .pre { border-top: 1px solid var(--border); }
.relation-map { display: grid; grid-template-columns: minmax(0, 1fr) minmax(180px, 260px) minmax(0, 1fr);
                gap: 14px; align-items: stretch; }
.relation-side, .relation-current { min-width: 0; border: 1px solid var(--border); border-radius: 9px;
                                    background: var(--panel); padding: 10px 12px; }
.relation-side > b { display: block; margin-bottom: 7px; color: var(--dim); font: 10.5px var(--mono); }
.relation-current { display: flex; flex-direction: column; justify-content: center; text-align: center;
                    border-color: rgba(91,140,255,.38); background: rgba(91,140,255,.07); }
.relation-current span { color: #93b4ff; font: 700 11px var(--mono); }
.relation-current b { margin-top: 5px; color: var(--text); font-size: 12px; line-height: 1.5; }
.relation-empty { color: var(--dim); font-size: 11px; }
.relation-map .relation-purpose { margin-left: auto; }
.out-main { display: flex; gap: 10px; flex-wrap: wrap; align-items: flex-start; justify-content: center; }
.out-main img.big, .out-main video.big { max-width: 100%; max-height: min(58vh, 520px);
        border-radius: 8px; border: 1px solid var(--border2); background: #0b0d11; display: block; }
.out-main img.big { cursor: zoom-in; }
.out-main img:not(.big) { max-height: 130px; border-radius: 6px; border: 1px solid var(--border);
        cursor: zoom-in; }
.file-media { display: inline-flex; align-items: center; gap: 8px; max-width: 100%; min-height: 42px;
  padding: 7px 10px; border: 1px solid var(--border2); border-radius: 7px; color: var(--text);
  background: var(--panel2); text-decoration: none; }
.file-media span { color: var(--warm); font: 10px var(--mono); }
.file-media b { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
                font: 11px var(--mono); }
.file-media:hover { border-color: var(--accent); }
.attempt-products { display: flex; flex-direction: column; gap: 12px; }
.product-kind { display: flex; align-items: center; gap: 8px; margin-bottom: 8px;
                color: var(--muted); font: 10.5px var(--mono); }
.product-kind b { color: var(--text); font-size: 11.5px; }
.product-kind span { color: var(--dim); }
.text-product, .structured-product { border-top: 1px solid var(--border); padding-top: 11px; }
.attempt-products > :first-child { border-top: 0; padding-top: 0; }
.product-meta { color: var(--muted); font: 10.5px/1.6 var(--mono); }
.product-valid.passed { color: var(--ok); }
.product-load { margin-top: 9px; padding: 5px 9px; border: 1px solid var(--border2); border-radius: 6px;
                background: var(--panel2); color: #93b4ff; cursor: pointer; font: 10.5px var(--mono); }
.product-load:hover { border-color: var(--accent); }
.product-load:disabled { cursor: wait; opacity: .65; }
.product-detail { margin-top: 9px; border: 1px solid var(--border); border-radius: 7px;
                  background: #0b0d11; overflow: hidden; }
.product-detail pre { max-height: 480px; margin: 0; padding: 10px 12px; overflow: auto;
                      color: var(--muted); font: 10.5px/1.65 var(--mono); white-space: pre-wrap; }
.product-error { padding: 9px 11px; color: var(--fail); font-size: 11px; }
.internal-validation { display: flex; align-items: center; gap: 9px; margin-bottom: 8px;
                       padding: 7px 9px; border: 1px solid var(--border); border-radius: 7px;
                       color: var(--muted); font-size: 10.5px; }
.internal-validation.passed { border-color: rgba(34,197,94,.3); background: rgba(34,197,94,.06); }
.internal-validation.passed b { color: var(--ok); }
/* 参考图条：横向一排，多了就横向滚 —— 不换行是为了不把产出图挤下去 */
.refs { display: flex; gap: 6px; overflow-x: auto; padding-bottom: 2px; }
.refs img { flex: 0 0 auto; width: 58px; height: 74px; object-fit: cover; border-radius: 6px;
            border: 1px solid var(--border); cursor: zoom-in; background: #0b0d11;
            transition: border-color .12s, transform .12s; }
.refs img:hover { border-color: var(--accent); transform: scale(1.06); }
.media-refs { display: flex; align-items: center; gap: 6px; margin-top: 8px; color: var(--dim);
              font: 10.5px var(--mono); }
.media-refs a { color: #93b4ff; text-decoration: none; border: 1px solid var(--border2);
                border-radius: 5px; min-width: 22px; padding: 1px 5px; text-align: center; }
.media-refs a:hover { border-color: var(--accent); }
.none { color: var(--dim); font-size: 11.5px; padding: 14px 0; text-align: center;
        border: 1px dashed var(--border); border-radius: 8px; }

/* 逐条验收：一行一条，左边是结论符号 —— 「哪一条没过」是最该一眼看到的东西 */
.crit { display: flex; gap: 10px; padding: 9px 2px; border-top: 1px solid var(--border); }
.crit:first-child { border-top: none; }
.cmark { flex: 0 0 17px; height: 17px; border-radius: 50%; font-size: 10px; font-weight: 700;
         display: flex; align-items: center; justify-content: center; margin-top: 1px; }
.cmark.p { background: rgba(34,197,94,.16); color: var(--ok); }
.cmark.f { background: rgba(239,68,68,.18); color: var(--fail); }
.cmark.u { background: rgba(139,147,161,.14); color: var(--dim); }
.cbody { min-width: 0; flex: 1; }
.ctitle { font-size: 12.5px; font-weight: 600; line-height: 1.5; }
.crit.f .ctitle { color: #fca5a5; }
.cdesc { color: var(--muted); font-size: 11.5px; line-height: 1.6; margin-top: 3px; }
.criterion-evidence { margin-top: 7px; padding: 6px 8px; border-radius: 6px; background: var(--panel2); }
.criterion-evidence > div, .evidence-conflict > div, .executor-claims > div {
  display: grid; grid-template-columns: 48px minmax(0, 1fr); gap: 7px; margin: 3px 0;
  color: var(--muted); font-size: 11px; line-height: 1.55;
}
.criterion-evidence span, .evidence-conflict span, .executor-claims span {
  color: var(--dim); font: 10px var(--mono);
}
.source-refs { margin-top: 6px; color: var(--dim); font: 10px/1.5 var(--mono); word-break: break-word; }
.cref { display: flex; gap: 5px; margin-top: 6px; }
.cref img { width: 44px; height: 56px; object-fit: cover; border-radius: 5px;
            border: 1px solid var(--border); cursor: zoom-in; }

/* 判定依据：评估者说的原话 */
.verdict { margin-top: 10px; font-size: 12px; line-height: 1.7; color: var(--muted);
           background: var(--panel2); border: 1px solid var(--border2); border-radius: 8px;
           padding: 9px 12px; white-space: pre-wrap; word-break: break-word; }
.verdict.bad { border-color: rgba(239,68,68,.45); }
.verdict .lead { color: var(--dim); font-size: 10px; font-family: var(--mono); letter-spacing: .5px;
                 display: block; margin-bottom: 3px; }
.evidence-panel { margin-top: 9px; border: 1px solid var(--border); border-radius: 8px;
                  background: rgba(255,176,32,.035); }
.evidence-panel > summary { cursor: pointer; padding: 7px 9px; color: var(--muted);
                            font: 10.5px var(--mono); }
.evidence-conflict, .executor-claims { padding: 8px 9px; border-top: 1px solid var(--border); }
.evidence-conflict > b { color: #fbbf24; font-size: 11.5px; }
.executor-claims > b { color: var(--text); font-size: 11.5px; }

/* 早前的执行：同一个任务反复做时，「上一版差在哪」是判断有没有进展的依据 */
.att { display: flex; gap: 11px; padding: 10px 0; border-top: 1px dashed var(--border); }
.att:first-child { border-top: none; padding-top: 2px; }
.att .shot { flex: 0 0 84px; }
.att .shot img, .att .shot video { width: 84px; border-radius: 6px; border: 1px solid var(--border);
         background: #0b0d11; cursor: zoom-in; }
.att .info { min-width: 0; flex: 1; font-size: 11.5px; line-height: 1.65; color: var(--muted); }
.att .info .mono { font-family: var(--mono); font-size: 10.5px; color: var(--dim); }
.gap { color: #fbbf24; }
.tool-audit { padding: 0 10px 8px; }
.tool-audit-call { padding: 9px 2px; border-top: 1px dashed var(--border); }
.tool-audit-call:first-child { border-top: 0; }
.tool-audit-call header { display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
                          color: var(--dim); font: 10.5px var(--mono); }
.tool-audit-call header b { color: var(--text); }
.tool-audit-call .ok { color: var(--ok); }
.tool-audit-call .bad { color: var(--fail); }
.tool-audit-label { margin-top: 8px; color: var(--dim); font: 10px var(--mono); }
.tool-audit-call .pre { margin-top: 4px; padding: 7px 9px; max-height: 220px;
                        border-radius: 6px; background: #0b0d11; }

details.blk { margin-top: 9px; border: 1px solid var(--border); border-radius: 9px; background: var(--panel); }
details.blk > summary { cursor: pointer; list-style: none; padding: 7px 12px; font-size: 11px;
                        color: var(--muted); font-family: var(--mono); display: flex;
                        align-items: center; gap: 7px; }
details.blk > summary::-webkit-details-marker { display: none; }
details.blk > summary::before { content: "▸"; font-size: 9px; transition: transform .15s; }
details.blk[open] > summary::before { transform: rotate(90deg); }
details.blk[open] > summary { border-bottom: 1px solid var(--border); color: var(--text); }
.pre { white-space: pre-wrap; word-break: break-word; font-size: 11.5px; line-height: 1.75;
       color: var(--muted); padding: 10px 12px; max-height: 380px; overflow-y: auto; }

/* Planner state 是 Run 级信息：独立占满内容区，不与单个 Task 详情或左侧任务轨道争空间。 */
.psv { width: min(1500px, 100%); margin: 0 auto; padding: 22px 26px 48px; }
.psv-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px;
            padding-bottom: 14px; border-bottom: 1px solid var(--border2); }
.psv-title { display: flex; align-items: center; gap: 3px; color: var(--text); font-size: 20px;
             font-weight: 700; letter-spacing: -.2px; }
.psv-meta { margin-top: 6px; color: var(--dim); font-size: 11.5px; line-height: 1.55; }
.psv-counts { display: flex; gap: 18px; color: var(--muted); font-size: 11.5px; white-space: nowrap; }
.psv-counts b { margin-right: 3px; color: var(--text); font: 700 15px var(--mono); }
.psv-warning { margin-top: 12px; padding: 8px 11px; border: 1px solid rgba(234,179,8,.32);
               border-radius: 7px; background: rgba(234,179,8,.07); color: #fbbf24;
               font-size: 11.5px; line-height: 1.6; }
.psv-change { display: flex; align-items: baseline; gap: 12px; margin-top: 12px; padding: 9px 11px;
              border: 1px solid var(--border); border-radius: 7px; background: var(--panel);
              color: var(--muted); font-size: 11.5px; }
.psv-change > b { flex: 0 0 auto; color: var(--dim); font: 10.5px var(--mono); }
.psv-change > div { display: flex; flex-wrap: wrap; gap: 6px; }
.psv-change.changed span { padding: 3px 7px; border-radius: 5px; color: #b9cdf8;
                           background: rgba(91,140,255,.10); }
.psv-change.same { color: var(--dim); }
.psv-change.initial { color: #b9cdf8; border-color: rgba(91,140,255,.3); }
.psv-rounds { display: flex; gap: 6px; margin-top: 14px; padding-bottom: 4px; overflow-x: auto; }
.psv-round { display: flex; align-items: center; gap: 3px; flex: 0 0 auto; padding: 5px 9px;
             border: 1px solid var(--border); border-radius: 7px; background: var(--panel);
             color: var(--muted); cursor: pointer; font: 10.5px var(--mono); }
.psv-round:hover { border-color: var(--border2); color: var(--text); }
.psv-round.on { border-color: rgba(91,140,255,.6); background: rgba(91,140,255,.11); color: var(--text); }
.psv-round .tag { margin-left: 3px; }
.psv-round i { display: inline-flex; align-items: center; justify-content: center; width: 15px;
               height: 15px; border-radius: 50%; background: rgba(234,179,8,.14); color: #fbbf24;
               font-style: normal; font-weight: 800; }
.psv-stage-block, .psv-execution, .psv-evaluation, .psv-handoff {
  margin-top: 22px; border: 1px solid var(--border2); border-radius: 11px; background: var(--panel);
}
.psv-stage-head { display: flex; align-items: center; justify-content: space-between; gap: 16px;
                  padding: 15px 17px; border-bottom: 1px solid var(--border2); }
.psv-stage-head > div { display: flex; align-items: center; gap: 7px; color: var(--dim);
                        font-size: 11.5px; }
.psv-stage-head i { color: var(--border2); font-style: normal; }
.psv-stage-index { margin-right: 8px; color: var(--dim); font: 650 11px var(--mono); }
.psv-stage-head > b.core-title, .psv-round-result-head > b.core-title { font-size: 16px; }
.psv-plan-step { padding: 15px 17px 16px; }
.psv-plan-step + .psv-plan-step { border-top: 1px solid var(--border); }
.psv-plan-step-head { display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.psv-plan-step-head > b.core-title { font-size: 13.5px; }
.psv-plan-step-head > div { display: flex; flex-wrap: wrap; gap: 13px; color: var(--muted);
                            font-size: 11.5px; }
.psv-plan-step-head strong { color: var(--text); font-variant-numeric: tabular-nums; }
.psv-round-result { margin-top: 14px; padding: 14px 15px; border: 1px solid var(--border2);
                    border-radius: 10px; background: var(--panel); }
.psv-round-result-head { display: flex; align-items: center; justify-content: space-between; gap: 14px;
                         padding-bottom: 10px; border-bottom: 1px solid var(--border); }
.psv-round-result-head > b { font-size: 13px; }
.psv-round-result-head > div { display: flex; flex-wrap: wrap; gap: 12px; color: var(--muted);
                               font-size: 11.5px; }
.psv-round-result-head strong { color: var(--text); }
.psv-round-result-head .ok strong { color: var(--ok); }
.psv-round-result-head .bad strong { color: var(--fail); }
.psv-dispatch { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; padding-top: 10px; }
.psv-dispatch > span { margin-right: 3px; color: var(--dim); font: 10.5px var(--mono); }
.psv-dispatch b { padding: 2px 7px; border-radius: 5px; color: #93b4ff;
                  background: rgba(91,140,255,.11); font: 700 10.5px var(--mono); }
.psv-dispatch em { color: var(--dim); font-size: 11px; font-style: normal; }
.psv-input-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px 14px;
                   padding-top: 10px; }
.psv-input-facts > div { display: grid; grid-template-columns: 70px minmax(0, 1fr); gap: 8px;
                         align-items: baseline; }
.psv-input-facts span { color: var(--dim); font-size: 11px; }
.psv-input-facts b { color: var(--muted); font-size: 12.5px; font-weight: 500; line-height: 1.6; }
.psv-reason { max-width: 82ch; margin-top: 12px; color: var(--muted); font-size: 12.5px;
              line-height: 1.75; text-wrap: pretty; }
.psv-reason b { display: block; margin-bottom: 4px; color: var(--dim); font-size: 11px; }
.psv-basis-reasons { margin-top: 10px; border-top: 1px solid var(--border); padding-top: 9px; }
.psv-basis-reasons summary { cursor: pointer; color: var(--muted); font-size: 11px; }
.psv-basis-reasons ul { margin: 8px 0 0; padding-left: 20px; color: var(--dim); font-size: 11px;
                        line-height: 1.65; }
.psv-planning-stage .psv-change { margin-top: 11px; background: var(--panel2); }
.psv-task-changes { margin-top: 10px; border-top: 1px solid var(--border); padding-top: 9px; }
.psv-task-changes > b { display: block; margin-bottom: 5px; color: var(--dim); font: 10.5px var(--mono); }
.psv-task-changes > div { display: grid; grid-template-columns: 44px 42px minmax(120px, 1fr);
                          gap: 7px; align-items: baseline; padding: 5px 0; color: var(--muted);
                          font-size: 11px; }
.psv-task-changes small { grid-column: 3; color: var(--dim); line-height: 1.55; }
.change-action { padding: 2px 5px; border-radius: 4px; text-align: center; font: 10px var(--mono); }
.change-action.add { color: #93b4ff; background: rgba(91,140,255,.12); }
.change-action.update { color: #d8b4fe; background: rgba(168,85,247,.12); }
.change-action.remove { color: #fca5a5; background: rgba(239,68,68,.10); }
.psv-current-decisions { margin-top: 10px; border-top: 1px solid var(--border); padding-top: 9px; }
.psv-current-decisions > summary { cursor: pointer; color: var(--text); font-size: 11.5px; }
.psv-current-decisions > summary span { margin-left: 5px; color: var(--dim); font: 10px var(--mono); }
.psv-current-decisions .psv-records { margin-top: 7px; }
.psv-execution, .psv-evaluation, .psv-handoff { padding: 15px 17px 16px; }
.psv-execution-note { padding: 10px 0; color: var(--dim); font-size: 11.5px; line-height: 1.65; }
.psv-execution-list { border-top: 1px solid var(--border); }
.psv-execution-task { padding: 12px 0; border-bottom: 1px solid var(--border); }
.psv-execution-task:last-child { border-bottom: 0; }
.psv-execution-task header { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.psv-execution-task header b { color: var(--text); font-size: 11.5px; }
.psv-execution-task header > span:not(.psv-execution-state) { color: var(--dim); font: 10px var(--mono); }
.psv-execution-task header a { margin-left: auto; color: #93b4ff; font-size: 10.5px; text-decoration: none; }
.psv-evaluation-list { border-top: 1px solid var(--border); }
.psv-evaluation-task { padding: 11px 0; border-bottom: 1px solid var(--border); }
.psv-evaluation-task:last-child { border-bottom: 0; }
.psv-evaluation-task header { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.psv-evaluation-task header b { color: var(--text); font-size: 11.5px; }
.psv-evaluation-task header > span:not(.psv-execution-state) { color: var(--dim); font: 10px var(--mono); }
.psv-execution-state { padding: 2px 6px; border-radius: 5px; font: 10px var(--mono); }
.psv-execution-state.ok { color: var(--ok); background: rgba(34,197,94,.10); }
.psv-execution-state.bad { color: var(--fail); background: rgba(239,68,68,.10); }
.psv-execution-state.wait { color: var(--warm); background: rgba(255,176,32,.10); }
.psv-execution-media { display: flex; align-items: flex-start; gap: 8px; margin-top: 9px; overflow-x: auto; }
.psv-execution-media img, .psv-execution-media video { width: 120px; max-height: 100px;
  object-fit: cover; border: 1px solid var(--border); border-radius: 6px; }
.psv-execution-media audio { width: 280px; height: 34px; }
.psv-execution-summary { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.psv-execution-summary span { padding: 4px 7px; border-radius: 5px; background: var(--panel2);
                              color: var(--muted); font: 10px var(--mono); }
.psv-execution-why, .psv-execution-failed { margin-top: 8px; color: var(--muted);
                                           font-size: 11px; line-height: 1.6; }
.psv-execution-why b, .psv-execution-failed b { margin-right: 8px; color: var(--dim);
                                                font: 10px var(--mono); }
.psv-execution-failed { color: #fca5a5; }
.psv-plan-snapshot { border-top: 1px solid var(--border2); }
.psv-plan-snapshot > summary { display: flex; align-items: baseline; gap: 12px; padding: 14px 17px;
                               cursor: pointer; list-style: none; }
.psv-plan-snapshot > summary::-webkit-details-marker { display: none; }
.psv-plan-snapshot > summary::before { content: "▸"; color: var(--dim); font-size: 10px;
                                       transition: transform .15s; }
.psv-plan-snapshot[open] > summary::before { transform: rotate(90deg); }
.psv-plan-snapshot > summary b { color: #c4b5fd; font-size: 13.5px; }
.psv-plan-snapshot > summary span { margin-left: auto; color: var(--dim); font-size: 11px;
                                    font-variant-numeric: tabular-nums; }
.psv-plan-snapshot-body { padding: 0 17px 17px; border-top: 1px solid var(--border); }
.psv-context-group { margin-top: 14px; border-top: 1px solid var(--border2); }
.psv-context-head { display: flex; align-items: baseline; justify-content: space-between; gap: 14px;
                    padding-top: 13px; }
.psv-context-head h2 { margin: 0; color: var(--text); font-size: 13.5px; font-weight: 700; }
.psv-context-head span { color: var(--dim); font-size: 10.5px; }
.psv-context-group .psv-grid { margin-top: 5px; border-top: 0; }
.psv-context-fold { margin-top: 14px; border-top: 1px solid var(--border2); }
.psv-context-fold > summary { display: flex; align-items: baseline; gap: 10px; cursor: pointer;
  list-style: none; padding: 13px 0 4px; }
.psv-context-fold > summary::-webkit-details-marker { display: none; }
.psv-context-fold > summary::before { content: "▸"; color: var(--dim); font-size: 9px;
  transition: transform .15s; }
.psv-context-fold[open] > summary::before { transform: rotate(90deg); }
.psv-context-fold > summary b { color: var(--text); font-size: 13.5px; }
.psv-context-fold.evidence > summary b { color: #67e8f9; }
.psv-context-fold.structure > summary b { color: #93b4ff; }
.psv-context-fold > summary span { margin-left: auto; color: var(--dim); font: 10.5px var(--mono); }
.psv-context-fold-body { padding: 9px 0 2px 18px; }
.psv-issue-group { margin-top: 10px; }
.psv-issue-group h3 { margin: 0 0 4px; font-size: 11.5px; }
.psv-issue-group.blocking h3 { color: #fca5a5; }
.psv-issue-group.tracked h3 { color: var(--muted); }
.psv-handoff-lines { display: flex; flex-direction: column; gap: 7px; border-top: 1px solid var(--border);
                     padding-top: 10px; }
.psv-handoff-lines > div { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; }
.psv-handoff-lines span { width: 52px; color: var(--dim); font: 10.5px var(--mono); }
.psv-handoff-lines b { padding: 2px 7px; border-radius: 5px; color: #93b4ff;
                       background: rgba(91,140,255,.11); font: 700 10.5px var(--mono); }
.psv-handoff-lines em { color: var(--dim); font-size: 11px; font-style: normal; }
.psv-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 0 24px;
            margin-top: 9px; border-top: 1px solid var(--border); }
.psv-section { grid-column: span 6; min-width: 0; padding: 17px 0 20px;
               border-bottom: 1px solid var(--border); }
.psv-section.design { grid-column: span 7; }
.psv-section.readiness { grid-column: span 5; }
.psv-section.assets, .psv-section.relations, .psv-section.materials { grid-column: 1 / -1; }
.psv-section-head { display: flex; align-items: center; gap: 9px; margin-bottom: 10px; }
.psv-section-head h3 { margin: 0; color: var(--text); font-size: 13px; font-weight: 650; }
.psv-section-head > span { margin-left: auto; color: var(--dim); font: 10.5px var(--mono); }
.psv-ready { padding: 2px 7px; border-radius: 12px; }
.psv-ready.yes { color: var(--ok); background: rgba(34,197,94,.11); }
.psv-ready.no { color: var(--warm); background: rgba(255,176,32,.10); }
.psv-kv { display: grid; grid-template-columns: minmax(90px, 22%) minmax(0, 1fr); gap: 12px;
          padding: 6px 0; color: var(--muted); font-size: 12.5px; line-height: 1.7; }
.psv-kv > span { color: var(--dim); font: 10.5px/1.7 var(--mono); word-break: break-word; }
.psv-kv > div { min-width: 0; white-space: pre-wrap; word-break: break-word; }
.psv-none { padding: 8px 0; color: var(--dim); font-size: 11.5px; }
.psv-long > summary { cursor: pointer; color: var(--muted); }
.psv-long pre { max-height: 280px; margin: 7px 0 0; padding: 8px 10px; overflow: auto;
                border: 1px solid var(--border); border-radius: 6px; background: var(--panel);
                color: var(--muted); font: 10.5px/1.65 var(--mono); white-space: pre-wrap; }
.psv-records { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 0 20px; }
.psv-forensics { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 14px; margin-top: 22px;
                 padding: 10px 12px; border: 1px solid var(--border); border-radius: 8px;
                 color: var(--dim); font-size: 10.5px; }
.psv-forensics b { color: var(--muted); }
.psv-forensics a { color: #93b4ff; text-decoration: none; }
.psv-forensics a:hover { text-decoration: underline; }
.psv-record { min-width: 0; padding: 9px 0; }
.psv-record > b { display: block; margin-bottom: 4px; color: #cfd8ea; font: 700 11px var(--mono); }
.psv-record .psv-kv { grid-template-columns: minmax(78px, 25%) minmax(0, 1fr); padding: 3px 0; }
.psv-assets { display: grid; grid-template-columns: repeat(auto-fit, minmax(360px, 1fr));
              gap: 12px; }
.psv-asset { display: grid; grid-template-columns: 128px minmax(0, 1fr); min-width: 0;
             overflow: hidden; border: 1px solid var(--border); border-radius: 9px;
             background: var(--panel); }
.psv-asset-media { display: flex; align-items: center; justify-content: center; min-height: 128px;
                   padding: 8px; overflow: hidden; border-right: 1px solid var(--border);
                   background: #0b0d11; }
.psv-asset-media img { width: 100%; max-height: 150px; object-fit: contain; cursor: zoom-in; }
.psv-asset-media video { width: 100%; max-height: 150px; background: #07080a; }
.psv-asset-media audio { width: 100%; }
.psv-asset-media .file-media { width: 100%; }
.psv-asset-empty { color: var(--dim); font: 10.5px var(--mono); text-align: center; }
.psv-asset-body { min-width: 0; padding: 11px 12px; }
.psv-asset-title { display: flex; align-items: flex-start; gap: 8px; }
.psv-asset-title b { min-width: 0; color: var(--text); font-size: 12px; line-height: 1.5; }
.psv-asset-title span { flex: 0 0 auto; margin-left: auto; font: 10px var(--mono); }
.psv-asset-title .ok { color: var(--ok); }
.psv-asset-title .wait { color: var(--warm); }
.psv-asset-title .bad { color: var(--fail); }
.psv-asset-key, .psv-asset-source { margin-top: 4px; color: var(--dim); font: 10px/1.5 var(--mono);
                                   word-break: break-all; }
.psv-asset-body .psv-kv { grid-template-columns: minmax(72px, 24%) minmax(0, 1fr); padding: 3px 0; }
.psv-material-intro { margin: -2px 0 11px; color: var(--dim); font-size: 11px; line-height: 1.65; }
.psv-material-tags { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.psv-material-tags span { padding: 2px 6px; border-radius: 10px; color: #9fb6e8;
                          background: rgba(91,140,255,.10); font: 9.5px var(--mono); }
.psv-material-consumers { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; margin-top: 8px; }
.psv-material-consumers b { margin-right: 2px; color: var(--dim); font: 9.5px var(--mono); }
.psv-material-consumers span, .psv-material-consumers em { padding: 2px 5px; border-radius: 4px;
  color: var(--muted); background: var(--panel2); font: 9.5px var(--mono); font-style: normal; }
.psv-material-history { margin-top: 13px; border-top: 1px solid var(--border); padding-top: 10px; }
.psv-material-history > summary { cursor: pointer; color: var(--muted); font-size: 11px; }
.psv-material-history > summary span { margin-left: 5px; color: var(--dim); font: 10px var(--mono); }
.psv-material-history .psv-assets { margin-top: 10px; }
.psv-edges { display: flex; flex-direction: column; }
.psv-edge { display: grid; grid-template-columns: minmax(44px, auto) 18px minmax(44px, auto) minmax(160px, 1fr) auto;
            align-items: baseline; gap: 7px; padding: 8px 0; border-top: 1px dashed var(--border);
            color: var(--dim); font-size: 11px; }
.psv-edge:first-child { border-top: none; }
.psv-edge b { color: #93b4ff; font: 700 11px var(--mono); }
.psv-edge em { color: var(--muted); font-style: normal; }
.psv-edge small { color: var(--dim); font: 10px var(--mono); }

/* 加载失败的占位：外链会过期（原帖图与参考图尤其），空着看不出是「没有图」还是「图挂了」 */
.imgfail { display: flex; align-items: center; justify-content: center; text-align: center;
           padding: 6px; font-size: 10px; border-radius: 6px; border: 1px dashed var(--fail);
           color: var(--fail); background: rgba(239,68,68,.06); min-height: 60px; }

img.thumb { display: block; border-radius: 6px; border: 1px solid var(--border); background: #0b0d11;
            object-fit: contain; cursor: zoom-in; }

/* 大图：←/→ 在同一排内走 */
.imgmodal { position: fixed; inset: 0; background: rgba(6,7,10,.93); display: none;
            align-items: center; justify-content: center; z-index: 60; cursor: zoom-out; padding: 26px;
            backdrop-filter: blur(3px); }
.imgmodal.open { display: flex; }
.imgmodal img { max-width: 92vw; max-height: 86vh; object-fit: contain; border-radius: 8px;
                box-shadow: 0 10px 60px rgba(0,0,0,.7); }
.navbtn { position: fixed; top: 50%; transform: translateY(-50%); cursor: pointer; width: 42px;
          height: 66px; font-size: 26px; line-height: 1; color: #fff; background: rgba(255,255,255,.07);
          border: 1px solid rgba(255,255,255,.16); border-radius: 10px; z-index: 5; }
.navbtn:hover { background: rgba(255,255,255,.18); }
.navbtn.prev { left: 18px; } .navbtn.next { right: 18px; }
.counter { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); font-size: 12px;
           color: var(--text); background: rgba(0,0,0,.6); padding: 4px 13px; border-radius: 12px;
           font-family: var(--mono); }

/* 窄屏（宿主给的 iframe 可能很窄）：轨道翻到上面横向滚 */
@media (max-width: 820px) {
  .tv { flex-direction: column; }
  .tv-track { flex: 0 0 auto; display: flex; gap: 6px; overflow-x: auto; overflow-y: hidden;
              border-right: none; border-bottom: 1px solid var(--border); padding: 8px; }
  .tv-head { display: none; }
  .ti { width: 214px; flex: 0 0 214px; margin-bottom: 0; }
  .kid { margin-left: 0; }
  .kid::after { display: none; }
  .tv-detail { padding: 14px 16px 30px; }
  .stage { grid-template-columns: 1fr; }
  .input-group { grid-template-columns: 1fr; gap: 6px; }
  .relation-line { flex-wrap: wrap; }
  .relation-purpose { margin-left: 0; }
  .relation-map { grid-template-columns: 1fr; }
  .relation-current { order: -1; }
  .run-position-grid { grid-template-columns: 1fr; }
  .run-position-path { grid-column: auto; }
  .psv { padding: 16px 15px 36px; }
  .psv-head { align-items: flex-start; flex-direction: column; }
  .psv-counts { flex-wrap: wrap; white-space: normal; }
  .psv-stage-head, .psv-plan-step-head, .psv-round-result-head, .psv-context-head {
    align-items: flex-start; flex-direction: column;
  }
  .psv-plan-snapshot > summary { align-items: flex-start; flex-wrap: wrap; }
  .psv-plan-snapshot > summary span { width: 100%; margin-left: 18px; }
  .psv-context-fold > summary { align-items: flex-start; flex-wrap: wrap; }
  .psv-context-fold > summary span { margin-left: 18px; }
  .psv-context-fold-body { padding-left: 0; }
  .psv-task-changes > div { grid-template-columns: 44px 42px minmax(0, 1fr); }
  .psv-input-facts { grid-template-columns: 1fr; }
  .psv-section, .psv-section.design, .psv-section.readiness,
  .psv-section.assets, .psv-section.relations, .psv-section.materials { grid-column: 1 / -1; }
  .psv-records { grid-template-columns: 1fr; }
  .psv-record { border-top: 1px dashed var(--border); }
  .psv-record:first-child { border-top: none; }
  .psv-assets { grid-template-columns: 1fr; }
  .psv-asset { grid-template-columns: 96px minmax(0, 1fr); }
  .psv-asset-media { min-height: 104px; }
  .psv-edge { grid-template-columns: auto 18px auto; }
  .psv-edge em, .psv-edge small { grid-column: 1 / -1; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important;
                           transition-duration: .01ms !important; scroll-behavior: auto !important; }
}
