/* Ticket detail: one current task, conversation, then supporting records. */
.detail-shell { --text-muted:#5f6f84; max-width:1060px; padding:24px 32px 64px; }
.detail-shell .back-link { border:0; background:none; padding:8px 0; font:inherit; font-size:13px; cursor:pointer; }
.detail-shell .dhead { background:transparent; border:0; box-shadow:none; padding:12px 0 16px; margin:0; }
.detail-shell .dhead h2 { font-size:22px; line-height:1.5; margin:8px 0; overflow-wrap:anywhere; }
.detail-shell .dhead .dchip { background:none; border:0; padding:0; font-size:13px; color:var(--text-secondary); }
.detail-shell .dhead .chips { gap:20px; }
.detail-shell .btn { min-height:36px; }
.detail-shell :is(button,summary,a,input,textarea,select,[role=radio]):focus-visible { outline:2px solid var(--accent); outline-offset:3px; }
.detail-shell ::selection { background:var(--accent-soft); color:var(--navy); }
.detail-shell textarea { caret-color:var(--accent); }
.ticket-workflow { display:flex; flex-direction:column; gap:16px; padding:0 0 8px; }
.ticket-journey { display:flex; list-style:none; padding:12px 0; margin:0; border-block:1px solid var(--border); gap:16px; }
.ticket-journey li { display:flex; flex:1; align-items:center; gap:8px; font-size:13px; color:var(--text-muted); }
.ticket-journey li span { display:inline-flex; align-items:center; justify-content:center; width:24px; height:24px; border-radius:50%; border:1px solid var(--border); font-variant-numeric:tabular-nums; }
.ticket-journey .is-current { color:var(--accent); font-weight:700; }
.ticket-journey .is-current span { background:var(--accent); color:#fff; border-color:var(--accent); }
.ticket-journey .is-done { color:var(--text-primary); }
.ticket-next { padding:20px 0; display:flex; align-items:center; justify-content:space-between; gap:24px; }
.ticket-next h3 { margin:0 0 8px; font-size:20px; line-height:1.4; color:var(--navy); }
.ticket-next p { max-width:65ch; margin:0 0 10px; font-size:14px; line-height:1.7; color:var(--text-secondary); }
.ticket-owner { font-size:13px; color:var(--text-secondary); }
.ticket-next-actions { display:flex; flex-wrap:wrap; gap:8px; flex-shrink:0; max-width:40%; }
.ticket-next-actions:empty { display:none; }
.ticket-brief { padding:0 0 16px; border-bottom:1px solid var(--border); }
.ticket-brief h3 { font-size:14px; margin:0 0 8px; color:var(--text-primary); }
.ticket-brief p { font-size:14px; line-height:1.8; max-width:75ch; margin:0; white-space:pre-wrap; overflow-wrap:anywhere; }
.ticket-brief-more { margin-top:8px; }
.ticket-brief-more summary { padding:8px 0; cursor:pointer; font-size:13px; color:var(--accent); }
.ticket-alignment,.ticket-conflicts { font-size:13px; }
.ticket-alignment>summary,.ticket-conflicts>summary { display:flex; align-items:baseline; flex-wrap:wrap; gap:8px 16px; padding:12px 0; cursor:pointer; color:var(--text-secondary); }
.ticket-alignment>summary::before,.ticket-conflicts>summary::before { content:'›'; font-size:18px; line-height:1; }
.ticket-alignment[open]>summary::before,.ticket-conflicts[open]>summary::before { transform:rotate(90deg); }
.ticket-alignment>summary::-webkit-details-marker,.ticket-conflicts>summary::-webkit-details-marker { display:none; }
.ticket-alignment>summary b,.ticket-conflicts>summary b { color:var(--text-primary); }
.ticket-alignment-body,.ticket-conflict-list { padding:8px 0 16px; }
.ticket-alignment-body { overflow-wrap:anywhere; }
.ticket-criteria,.ticket-tools { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-bottom:12px; }
.ticket-conflicts { border-top:1px solid var(--border); }
.ticket-conflicts.is-blocking { color:var(--danger); }
.ticket-conflicts.is-blocking>summary b { color:var(--danger); }
.ticket-disclosure-label { margin-left:auto; color:var(--accent); }
.ticket-conflict-row { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.ticket-conflict-list p { margin:0 0 12px; }
.ticket-artifact { display:grid; grid-template-columns:100px minmax(0,1fr) auto; align-items:start; gap:16px; border-bottom:1px solid var(--border); padding:16px 0; font-size:13px; line-height:1.7; }
.ticket-artifact>span { color:var(--text-secondary); }
.ticket-help { font-size:13px; line-height:1.7; color:var(--text-secondary); }
.detail-shell .ax-sec { margin-top:24px; }
.detail-shell .ax-h { font-size:16px; }
.detail-shell .reply-box { border:0; box-shadow:none; background:transparent; padding:16px 0; }
.detail-shell .rfig,.detail-shell .roi { display:none; }
.detail-shell .rlay { padding:0; margin-bottom:16px; }
.detail-shell .rlb { min-width:0; }
.detail-shell .rlt { display:block; font-size:13px; margin-bottom:8px; }
.detail-shell .ropt { padding:10px 12px; min-height:44px; }
.detail-shell .rot { font-size:13px; }
.detail-shell .rod,.detail-shell .rhint { font-size:12px; color:var(--text-muted); }
.detail-shell #r-body { font-size:14px; line-height:1.7; min-height:112px; }
.detail-shell details.fold>summary { min-height:44px; font-size:14px; flex-wrap:wrap; gap:8px; }
.detail-shell .ticket-reference { padding-top:16px; border-top:1px solid var(--border); }
.detail-shell .ticket-reference .dbody { padding-inline:0; }
.detail-shell .ticket-environment { margin:8px 0; }
@media(max-width:640px) {
  .detail-shell { padding:16px 16px 64px; }
  .detail-shell .dhead h2 { font-size:20px; }
  .detail-shell .dhead .row1 { gap:8px; }
  .ticket-journey { gap:4px; }
  .ticket-journey li { flex-direction:column; gap:6px; font-size:12px; }
  .ticket-next { flex-direction:column; align-items:stretch; gap:16px; padding:12px 0; }
  .ticket-next h3 { font-size:18px; }
  .ticket-next-actions { max-width:none; }
  .ticket-next-actions .btn { min-height:44px; }
  .ticket-alignment>summary,.ticket-conflicts>summary { gap:8px; }
  .ticket-alignment>summary>span { flex-basis:100%; padding-left:16px; }
  .ticket-artifact { grid-template-columns:1fr; gap:8px; }
  .detail-shell .ratbar,.detail-shell .rfoot { flex-wrap:wrap; }
  .detail-shell details.fold>summary .sm { margin-left:0; }
  .detail-shell .btn,.detail-shell summary { min-height:44px; }
  .detail-shell :is(input,textarea,select) { max-width:100%; box-sizing:border-box; }
  .detail-shell .ticket-reference { overflow-wrap:anywhere; }
}

/* ── 工单 / 对话 双视图（2026-10-10，T-UX）──────────────────────────────── */
.tv-toggle { display:inline-flex; margin-left:auto; background:var(--surface-2,#eef1f6); border:1px solid var(--border,#dde2ea); border-radius:9px; padding:2px; gap:2px; }
.tv-toggle button { border:0; background:transparent; color:var(--text-muted,#5d667a); font:inherit; font-size:12px; font-weight:600; padding:5px 11px; border-radius:7px; cursor:pointer; }
.tv-toggle button.on { background:var(--surface,#fff); color:var(--text-primary,#1b2130); box-shadow:0 1px 2px rgba(20,30,55,.08); }
.tv-progress { background:var(--surface,#fff); border:1px solid var(--border,#dde2ea); border-radius:12px; padding:14px 16px; margin-top:12px; }
.tv-steplabel { font-size:11px; letter-spacing:.04em; color:var(--text-muted,#8595b0); font-weight:600; margin-bottom:6px; }
.tv-steplabel:empty { display:none; }
.tv-key { background:var(--surface,#fff); border:1px solid var(--border,#dde2ea); border-radius:12px; padding:14px 16px; margin-top:12px; }
#view-ticket .ticket-reference { margin-top:12px; }
#view-conv { margin-top:12px; }
[hidden] { display:none !important; }

/* ── 按角色分视角 · 双栏工作区（2026-10-30；10-31 Will 选定方案 C）─────────────
 * 左栏：进度、需求原文与往来、回复框（对话是主角）；右栏固定：你的角色卡、关键资料、影响范围、代码、相关的人。
 * 窄屏（<960px）合成一栏：角色卡最先，再左栏，其余右栏卡最后。沿用 Portal 现有 token，不新增颜色。 */
.detail-shell.has-lens { max-width:1280px; }
.lens-grid { display:grid; grid-template-columns:minmax(0,1fr) 320px; gap:24px; align-items:start; margin-top:4px; }
.lens-main { min-width:0; }
.lens-side { position:sticky; top:12px; display:flex; flex-direction:column; gap:12px; max-height:calc(100vh - 88px); overflow-y:auto; overscroll-behavior:contain; padding-bottom:4px; }
.lens-card { background:var(--bg-card); border:1px solid var(--border); border-radius:12px; padding:14px 16px; }
.lens-card[data-card="you"] { border-color:rgba(22,119,255,.28); }
.lens-card-h { margin:0 0 10px; font-size:13px; font-weight:700; color:var(--text-primary); }
.lens-who { position:relative; display:flex; flex-wrap:wrap; align-items:baseline; gap:2px 8px; font-size:12.5px; color:var(--text-secondary); }
.lens-who b { color:var(--text-primary); font-weight:600; }
.lens-who .lens-turn { color:var(--accent); }
.lens-who-x { color:var(--text-muted); }
.lens-why>summary { list-style:none; cursor:pointer; color:var(--accent); font-size:12px; text-underline-offset:3px; }
.lens-why>summary::-webkit-details-marker { display:none; }
.lens-why>summary:hover { text-decoration:underline; }
.detail-shell .lens-why>summary { min-height:0; padding:2px 0; }
.lens-why>ul { position:absolute; z-index:20; top:calc(100% + 6px); left:0; width:min(300px, 80vw); margin:0; padding:12px 14px 12px 28px;
  background:var(--bg-card); border:1px solid var(--border); border-radius:12px; box-shadow:var(--shadow-md);
  font-size:12.5px; line-height:1.7; color:var(--text-primary); }
.lens-why-n { list-style:none; margin:6px 0 0 -14px; color:var(--text-muted); }
.lens-switch { display:flex; flex-wrap:wrap; gap:2px; margin:10px 0 2px; background:var(--bg-elevated); border:1px solid var(--border); border-radius:9px; padding:2px; width:fit-content; max-width:100%; }
.lens-switch button { border:0; background:transparent; color:var(--text-muted); font:inherit; font-size:12px; font-weight:600; padding:4px 10px; border-radius:7px; cursor:pointer; transition:background-color .15s ease-out, color .15s ease-out; }
.lens-switch button:hover { color:var(--text-primary); }
.lens-switch button.on { background:var(--bg-card); color:var(--text-primary); box-shadow:0 1px 2px rgba(20,30,55,.08); }
.lens-you-h { margin:12px 0 4px; font-size:16px; line-height:1.45; color:var(--navy); text-wrap:balance; }
.lens-you-p { margin:0; font-size:13px; line-height:1.65; color:var(--text-secondary); overflow-wrap:anywhere; }
.lens-actions { display:flex; flex-wrap:wrap; align-items:center; gap:6px 10px; margin-top:12px; }
.lens-actions .btn { white-space:nowrap; }
.lens-link { border:0; background:none; padding:4px 0; font:inherit; font-size:13px; color:var(--accent); cursor:pointer; text-underline-offset:3px; white-space:nowrap; }
.lens-link:hover { text-decoration:underline; }
.lens-link-inline { padding:0; font-size:inherit; font-weight:600; }
.lens-kv { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:10px 14px; margin:0; }
.lens-kv dt { font-size:12px; color:var(--text-muted); margin:0 0 1px; }
.lens-kv dd { margin:0; font-size:13px; font-weight:600; color:var(--text-primary); line-height:1.5; overflow-wrap:anywhere; font-variant-numeric:tabular-nums; }
.lens-kv a { color:var(--accent); text-underline-offset:3px; }
.lens-card[data-card="code"] .lens-link { margin-top:8px; }
.lens-people { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px; }
.lens-people li { display:grid; grid-template-columns:24px minmax(0,1fr); column-gap:9px; align-items:center; font-size:13px; }
.lens-av { width:24px; height:24px; border-radius:50%; color:#fff; font-size:11px; font-weight:700; display:inline-flex; align-items:center; justify-content:center; grid-row:span 2; }
.lens-pn { color:var(--text-primary); overflow-wrap:anywhere; }
.lens-pr { font-size:11.5px; color:var(--text-muted); overflow-wrap:anywhere; }
.lens-people li.is-me .lens-pn { font-weight:700; }
.lens-people li.is-me .lens-pr { color:var(--accent); }
/* v1.2「轮到你」主卡放进右栏：改成竖排 */
.lens-side .lens-sec[data-k="hero"] { margin:0; }
.lens-side #v12-hero .ticket-next { flex-direction:column; align-items:stretch; gap:12px; padding:14px 16px; background:var(--bg-card); border:1px solid rgba(22,119,255,.35); border-radius:12px; }
.lens-side #v12-hero .ticket-next h3 { font-size:16px; }
.lens-side #v12-hero .ticket-next p { font-size:13px; }
.lens-side #v12-hero .ticket-next-actions { max-width:none; }
/* 左栏 */
#lens-left { display:flex; flex-direction:column; }
.lens-sec { margin-top:22px; }
#lens-left>.lens-sec:first-child { margin-top:0; }
.lens-sec-h { margin:0 0 10px; font-size:14px; font-weight:700; color:var(--text-primary); }
.lens-sec>.ticket-workflow { padding:0; }
.lens-sec>.tl { background:var(--bg-card); border:1px solid var(--border); border-radius:12px; padding:16px 16px 4px; }
.lens-sec>#lens-facts-wrap,.lens-sec>#detail-subtasks,.lens-sec>#detail-fyi { background:var(--bg-card); border:1px solid var(--border); border-radius:12px; padding:6px 16px 12px; }
.lens-sec>#detail-subtasks>.ax-sub,.lens-sec>#detail-fyi>.ax-sub { display:none; }
.lens-sec>#lens-ai-wrap { background:var(--bg-card); border:1px solid var(--border); border-radius:12px; padding:14px 16px; }
.lens-sec[data-k="reply"] { margin-top:12px; }
.lens-sec[data-k="reply"] .reply-box { padding-top:4px; }
.lens-sec.is-fold { margin-top:12px; }
.lens-sec.is-fold + .lens-sec.is-fold { margin-top:0; }
.lens-sec>.fold,.lens-sec>#ticket-bus-slot { margin:0; }
/* 视角里不再显示 AI 流水线自己的五段进度：它和主进度条是两套口径，并排会互相矛盾（「全部」视角照旧显示） */
#view-ticket[data-lens]:not([data-lens="all"]) #phase-slot { display:none; }
.lens-more { margin-top:24px; border-top:1px solid var(--border); }
.lens-more>summary { flex-wrap:nowrap !important; }
.lens-more-t { flex-shrink:0; }
.lens-more-n { flex-shrink:0; font-size:12px; font-weight:600; color:var(--text-secondary); background:var(--bg-elevated); border-radius:999px; padding:1px 8px; }
.lens-more-sm { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin-left:auto; font-size:12px; font-weight:400; color:var(--text-muted); }
#lens-more-body>.lens-sec { margin-top:16px; }
@media (prefers-reduced-motion: reduce) { .lens-switch button { transition:none; } }
@media (max-width:960px) {
  /* 一栏：角色卡（及「轮到你」主卡）最先，再左栏，其余右栏卡最后 */
  .lens-grid { display:flex; flex-direction:column; align-items:stretch; gap:12px; }
  .lens-side { display:contents; }
  .lens-side>* { order:3; }
  .lens-side>.lens-sec[data-k="hero"] { order:0; }
  .lens-side>[data-card="you"] { order:1; }
  .lens-main { order:2; margin:8px 0 12px; }
}
@media(max-width:640px) {
  .lens-switch button { min-height:34px; }
  .lens-actions .btn { min-height:44px; }
  .lens-more-sm { display:none; }
}
