/* 两个独立需求页面共用的样式。
 * 通用面板、输入、批次卡片和结果图在前；解析调试台专用布局在后。
 * 功能是否可用及结果来源由 JS/API 决定，CSS 只负责展示和响应式排列。
 */
.demand-shell { max-width: 1360px; }
.workbench-heading { display: flex; justify-content: space-between; align-items: center; gap: 24px; margin-bottom: 26px; }
.workbench-heading .eyebrow { margin: 0 0 5px; font-size: 11px; font-weight: 750; letter-spacing: .16em; color: var(--teal-700); }
.workbench-heading h1 { font-size: clamp(26px, 3vw, 36px); margin: 0; letter-spacing: -.025em; }
.lead { color: var(--muted); font-size: 14px; margin: 7px 0 0; }
.d-panel { background: var(--paper); border: 1px solid var(--line); border-radius: 16px; padding: 24px; }
.workflow { display: grid; grid-template-columns: repeat(4, 1fr); padding: 0; margin: 0 0 24px; list-style: none; border: 1px solid var(--line); border-radius: 12px; overflow: hidden; background: #ffffffb3; }
.workflow li { display: flex; align-items: center; gap: 12px; padding: 16px 22px; border-right: 1px solid var(--line); }
.workflow li:last-child { border-right: 0; }.workflow li > span { color: #879ca7; font: 600 15px monospace; }
.workflow strong { font-size: 13px; display: block; }.workflow small { color: var(--muted); font-size: 11px; }
.workflow li.is-active { background: var(--teal-50); }.workflow li.is-active > span { color: var(--teal-700); }
/* 生成页布局：业务参考侧栏 + 样本/编辑主区。 */
.workbench-layout { display: grid; grid-template-columns: 326px minmax(0, 1fr); gap: 20px; align-items: start; }
.main-workspace { display: grid; gap: 20px; min-width: 0; }
.section-heading { display: flex; gap: 9px; align-items: center; margin-bottom: 20px; flex-wrap: wrap; }
.section-heading h2 { font-size: 17px; margin: 0; }.section-heading .text-button { margin-left: auto; }
.section-number { font: 600 11px monospace; border: 1px solid #abd1d6; color: var(--teal-700); background: var(--teal-50); padding: 2px 6px; border-radius: 5px; }
.tag { display: inline-block; background: var(--gray-50); border: 1px solid var(--line); padding: 2px 8px; border-radius: 5px; font-size: 11px; color: var(--muted); }
.tag.teal { background: var(--teal-50); border-color: #b5dcdf; color: var(--teal-700); }.subtle { font-size: 11px; color: var(--muted); margin-left: auto; }
.source-switch { display: flex; background: var(--gray-50); padding: 4px; border-radius: 8px; margin-bottom: 20px; border: 1px solid var(--line); }
.source-switch button { flex: 1; background: transparent; border: 0; border-radius: 5px; padding: 8px 3px; font-size: 12px; color: var(--muted); cursor: pointer; }
.source-switch button[aria-pressed="true"] { background: white; color: var(--teal-700); box-shadow: 0 1px 5px #16384414; font-weight: 700; }
.demand-shell label { display: block; margin-bottom: 7px; font-size: 12px; font-weight: 600; }
.demand-shell input,.demand-shell select,.demand-shell textarea { width: 100%; border: 1px solid #cddae1; border-radius: 7px; background: white; padding: 10px 12px; font: inherit; font-size: 13px; color: var(--ink); }
.demand-shell textarea { resize: vertical; line-height: 1.85; }.demand-shell select { min-height: 42px; }
.demand-shell :is(button,input,select,textarea,a):focus-visible { outline: 3px solid #72bdc580; outline-offset: 2px; }
.demand-shell [hidden] { display: none !important; }
.field-hint { color: var(--muted); font-size: 11px; line-height: 1.7; margin: 8px 0 17px; }
.d-button { display: inline-flex; align-items: center; padding: 10px 16px; border-radius: 7px; font: inherit; font-weight: 600; font-size: 12px; cursor: pointer; border: 1px solid transparent; white-space: nowrap; text-decoration: none; }
.d-button.primary { background: var(--teal-700); color: white; }.d-button.primary:hover { background: #07636e; }
.d-button.secondary { background: white; color: var(--ink); border-color: var(--line); }.d-button.secondary:hover { border-color: #8dbcc3; background: var(--teal-50); }
.d-button:disabled,.demand-shell button:disabled { opacity: .45; cursor: not-allowed; }.full-width { width: 100%; margin-top: 16px; }
.text-button { border: 0; background: transparent; color: var(--teal-700); font-size: 12px; cursor: pointer; padding: 5px; }
.source-footer { display: flex; gap: 6px; align-items: center; font-size: 10px; color: var(--muted); margin-top: 12px; }.status-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--teal-600); }
.sidebar-details { border-top: 1px solid var(--line); margin-top: 23px; padding-top: 16px; }.sidebar-details summary,.result-detail summary,.parameters summary { cursor: pointer; font-size: 12px; color: var(--muted); }.sidebar-details[open] summary { margin-bottom: 14px; }
.search-line { display: flex; gap: 6px; margin-bottom: 14px; }.search-line input { min-width: 0; }
.project-pager { display: flex; justify-content: space-between; align-items: center; margin: 8px 0 14px; font-size: 10px; color: var(--muted); }.project-pager button { font: inherit; border: 0; background: transparent; color: var(--teal-700); cursor: pointer; padding: 4px 0; }
.reference-preview { padding: 12px; background: var(--gray-50); border: 1px solid var(--line); border-radius: 8px; font-size: 11px; }.reference-preview p { margin: 0; }.reference-preview strong { display: block; margin-bottom: 5px; }.reference-preview pre { white-space: pre-wrap; font: inherit; max-height: 200px; overflow: auto; margin-bottom: 0; }
.batch-empty { display: flex; gap: 18px; align-items: center; padding: 26px 5px; }.empty-mark { font-size: 36px; color: #7eafb4; }.batch-empty strong { font-size: 14px; }.batch-empty p { font-size: 12px; color: var(--muted); margin: 5px 0 0; }
/* 需求样本卡片：选中样式仅表示正在编辑，不代表已解析或能力已匹配。 */
.demand-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.demand-card { border: 1px solid var(--line); border-radius: 9px; padding: 14px; background: white; text-align: left; color: var(--ink); font: inherit; cursor: pointer; min-width: 0; }.demand-card:hover { border-color: #7cbbc2; background: #fafefe; }.demand-card[aria-pressed="true"] { background: var(--teal-50); border-color: var(--teal-600); box-shadow: inset 3px 0 var(--teal-600); }
.demand-card .card-top { display: flex; justify-content: space-between; gap: 8px; font-size: 10px; color: var(--muted); }.demand-card p { margin: 9px 0; font-size: 12px; line-height: 1.7; }.demand-card .card-task { color: var(--teal-700); font-size: 10px; }
.editor-meta { display: flex; justify-content: space-between; gap: 16px; font-size: 10px; color: var(--muted); margin: 7px 0 16px; }.editor-actions { display: flex; gap: 14px; align-items: center; }.editor-actions .field-hint { margin: 0; }
.notice { padding: 13px 18px; border-radius: 9px; margin-bottom: 20px; border: 1px solid #b1dadd; background: var(--teal-50); color: var(--teal-700); font-size: 12px; }.notice.error { background: var(--amber-50); border-color: #ecd7a8; color: #7b5518; }
.notice.busy::before { content: ""; display: inline-block; width: 10px; height: 10px; margin-right: 8px; border: 2px solid #0b8d9840; border-top-color: var(--teal-700); border-radius: 50%; animation: spin .8s linear infinite; vertical-align: -1px; }@keyframes spin { to { transform: rotate(360deg); } }
.turn-history { margin-top: 20px; padding-top: 12px; border-top: 1px solid var(--line); }.turn-item { padding: 10px 12px; border-left: 2px solid #bad4da; margin: 7px 0; font-size: 12px; background: var(--gray-50); }.turn-item strong { font-size: 10px; color: var(--muted); }.turn-item p { margin: 4px 0; white-space: pre-wrap; }
.followup-panel { margin-top: 18px; background: var(--teal-50); padding: 16px; border-radius: 9px; }.followup-panel h3 { font-size: 13px; margin: 0 0 7px; }.followup-panel p { font-size: 12px; white-space: pre-wrap; }.followup-panel .d-button { margin-top: 10px; }.clarify-options { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px; }.clarify-options button { font: inherit; font-size: 11px; padding: 6px 10px; background: white; border: 1px solid #b7d7db; border-radius: 6px; cursor: pointer; }
.results-panel { margin-top: 24px; }.result-empty { text-align: center; padding: 35px 10px 42px; }.result-empty h3 { font-size: 16px; margin: 20px 0 7px; }.result-empty p { color: var(--muted); font-size: 12px; margin: 0; }.empty-diagram { display: flex; justify-content: center; align-items: center; }.empty-diagram span { width: 32px; height: 32px; border: 1px solid #a8ccd3; border-radius: 7px; background: var(--teal-50); }.empty-diagram i { width: 45px; border-top: 1px dashed #a8ccd3; }
.parse-summary { display: flex; align-items: flex-start; gap: 10px; border-bottom: 1px solid var(--line); padding-bottom: 18px; font-size: 13px; }.parse-summary p { margin: 0; }.parse-summary .tag { flex-shrink: 0; }
.result-toolbar { display: flex; justify-content: space-between; align-items: center; gap: 16px; margin: 20px 0 12px; }.result-toolbar h3 { margin: 0; font-size: 14px; }.result-toolbar p { margin-bottom: 0; }
.parameters { padding-bottom: 12px; }.parameters > div { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 12px; max-width: 550px; }.parameters .field-hint { margin-bottom: 0; }
.plan-tabs { display: flex; gap: 7px; flex-wrap: wrap; margin: 15px 0; }.plan-tabs button { border: 1px solid var(--line); background: white; color: var(--muted); padding: 8px 13px; border-radius: 6px; font: inherit; font-size: 11px; cursor: pointer; }.plan-tabs button[aria-pressed="true"] { border-color: var(--teal-700); background: var(--teal-50); color: var(--teal-700); font-weight: 650; }
.plan-metrics { display: flex; gap: 26px; flex-wrap: wrap; margin-bottom: 14px; padding: 12px 16px; background: var(--gray-50); border-radius: 8px; }.metric strong { display: block; font-size: 18px; font-weight: 650; color: var(--navy-900); }.metric span { font-size: 10px; color: var(--muted); }
/* 依赖图与分工卡片：宽图在容器内横向滚动，手机端不会撑开整个页面。 */
.graph-scroll { overflow-x: auto; border: 1px solid var(--line); border-radius: 10px; background: radial-gradient(#adc4ce65 1px, transparent 1px) 0 0 / 18px 18px, #fbfdfe; min-height: 130px; }.graph-scroll svg { display: block; margin: auto; font-family: inherit; }.graph-scroll .graph-empty { padding: 30px; font-size: 12px; color: var(--muted); }
.assignments { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-top: 18px; }.assignment { border: 1px solid var(--line); border-radius: 9px; padding: 14px; font-size: 12px; min-width: 0; }.assignment strong { display: block; margin-bottom: 9px; }.assignment p { margin: 5px 0; overflow-wrap: anywhere; }.assignment .assignment-label { color: var(--muted); font-size: 10px; }.assignment.missing { background: #fffbf1; border-color: #ebd49f; }
.gap-note { padding: 12px 15px; margin-top: 12px; border: 1px solid #ecd7a8; background: var(--amber-50); color: #7b5518; font-size: 12px; border-radius: 7px; }
.stage-times { display: flex; gap: 16px; flex-wrap: wrap; color: var(--muted); font-size: 11px; border-top: 1px solid var(--line); padding-top: 16px; margin-top: 20px; }.stage-times b { color: var(--ink); font-weight: 550; margin-left: 5px; }
.result-detail { margin-top: 18px; }.result-detail pre { font: 11px/1.7 monospace; background: var(--gray-50); padding: 16px; border-radius: 7px; overflow: auto; max-height: 380px; white-space: pre-wrap; overflow-wrap: anywhere; }.retrieval-slot { margin-top: 12px; padding: 12px 14px 4px; border: 1px solid var(--line); border-radius: 7px; font-size: 12px; }.retrieval-slot h4 { margin: 0 0 4px; font-size: 14px; }.retrieval-slot > .field-hint { margin: 0 0 8px; }
.workbench-footnote { text-align: center; color: var(--muted); font-size: 10px; margin-top: 20px; }
/* 共用断点：缩小侧栏，手机端改为单列；解析页在末尾补充专用规则。 */
@media (max-width: 1000px) { .workbench-layout { grid-template-columns: 285px minmax(0, 1fr); }.d-panel { padding: 20px; }.workflow li { padding: 13px; }.assignments { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 740px) { .retrieval-hit { grid-template-columns: minmax(0, 1fr); } .demand-shell { width: calc(100% - 28px); margin-top: 22px; }.workbench-heading { align-items: flex-start; flex-direction: column; gap: 14px; }.workflow { grid-template-columns: repeat(2, 1fr); }.workflow li:nth-child(2) { border-right: 0; }.workflow li:nth-child(-n+2) { border-bottom: 1px solid var(--line); }.workbench-layout { grid-template-columns: minmax(0,1fr); }.demand-list,.assignments { grid-template-columns: minmax(0,1fr); }.result-toolbar,.editor-actions { align-items: flex-start; flex-direction: column; }.parameters > div { grid-template-columns: minmax(0,1fr); }.plan-metrics { gap: 16px; }.source-panel { position: static; } }
@media (prefers-reduced-motion: reduce) { .notice.busy::before { animation: none; } }
/* 独立解析调试台：沿用 Streamlit 的参数侧栏、对话和分阶段结果。 */
.debug-layout { grid-template-columns: 270px minmax(0,1fr); }
.debug-sidebar { background: #f7f9fc; }
.debug-sidebar h2 { font-size: 17px; margin: 0 0 10px; }
.debug-sidebar .parameters > div { grid-template-columns: minmax(0,1fr); }
.debug-tabs { display:flex; flex-wrap:wrap; gap:4px; border-bottom:1px solid var(--line); margin:20px 0; }
.debug-tabs button { font:inherit; font-size:12px; padding:10px 12px; border:0; border-bottom:2px solid transparent; background:transparent; cursor:pointer; color:var(--muted); }
.debug-tabs button[aria-selected="true"] { color:var(--teal-700); border-bottom-color:var(--teal-700); font-weight:700; }
.chat-turn { display:grid; gap:10px; margin:14px 0; }
.chat-message { padding:14px 16px; border-radius:10px; font-size:13px; overflow-wrap:anywhere; }
.chat-message strong { font-size:11px; color:var(--muted); }.chat-message p { margin:6px 0 0; white-space:pre-wrap; }
.chat-message.user { background:#eef3f8; margin-left:30px; }.chat-message.assistant { background:var(--teal-50); margin-right:30px; }
.source-id { display:block; font:11px/1.7 monospace; color:var(--teal-700); overflow-wrap:anywhere; margin:6px 0; }
.reference-agent { margin-top:10px; padding-top:8px; border-top:1px solid var(--line); }.reference-agent summary { cursor:pointer; }
.reference-preview { max-height:340px; overflow:auto; }.source-record { font-size:12px; }.source-record summary { cursor:pointer; }.source-record p { overflow-wrap:anywhere; }
.page-link { display:block; text-align:center; text-decoration:none; white-space:normal; }
.coverage-miss { margin-top: 12px; padding: 14px 16px; border: 1px solid #ecd7a8; border-radius: 8px; background: var(--amber-50); }.coverage-miss strong { display: block; font-size: 13px; }.coverage-miss p { margin: 6px 0 0; color: #7b5518; font-size: 12px; }
.retrieval-empty { margin: 0 0 8px; color: #7b5518; }
.retrieval-hit { display: grid; grid-template-columns: minmax(140px, 1.15fr) minmax(160px, 1.5fr) minmax(110px, .9fr); gap: 4px 18px; align-items: center; padding: 10px 0 12px; border-top: 1px solid var(--line); }
.retrieval-hit-name { font-weight: 650; color: var(--ink); }
.retrieval-hit .source-id { margin: 2px 0 0; }
.retrieval-bar { display: flex; align-items: center; gap: 8px; min-width: 0; }
.retrieval-bar-track { flex: 1; height: 8px; border-radius: 3px; background: #eaeef2; overflow: hidden; }
.retrieval-bar-fill { height: 100%; border-radius: 3px; }
.retrieval-bar code { font-size: 12px; color: var(--ink); }
.retrieval-sources { color: var(--muted); font-size: 12px; overflow-wrap: anywhere; }
.coverage-scroll { overflow:auto; }
.coverage-toolbar { margin: 0 0 14px; }
.coverage-toolbar label { display: flex; align-items: center; gap: 8px; width: fit-content; margin: 0; font-size: 13px; font-weight: 650; }
.coverage-toolbar input { width: auto; margin: 0; }
.coverage-scroll table { border-collapse: collapse; width: 100%; font-size: 12px; background: #fff; }
.coverage-scroll th, .coverage-scroll td { border: 1px solid var(--line); padding: 8px 10px; text-align: left; vertical-align: top; min-width: 168px; }
.coverage-scroll thead th { background: #f7f9fc; font-weight: 650; }
.coverage-slot code { display: block; font-size: 10px; color: var(--muted); font-weight: 500; }
.coverage-slot strong { display: block; margin-top: 2px; font-size: 13px; white-space: nowrap; }
.coverage-agent { background: #f6f8fa; white-space: nowrap; }
.coverage-agent strong { display: block; margin: 2px 0; font-size: 13px; }
.coverage-id { font: 10px/1.5 monospace; color: var(--teal-700); }
.matrix-tag { display: inline-block; font-size: 9px; letter-spacing: .06em; color: var(--muted); border: 1px solid var(--line); border-radius: 3px; padding: 0 3px; line-height: 1.4; }
.coverage-skill { margin-top: 4px; }
.coverage-skill.is-dim { opacity: .45; }
.coverage-skill-name { font-size: 13px; line-height: 1.35; }
.coverage-skill.is-cover .coverage-skill-name { font-weight: 650; }
.coverage-skill-score { font-size: 11px; font-variant-numeric: tabular-nums; }
.coverage-mark { margin-left: 6px; }
.coverage-empty { color: #d0d7de; }
.coverage-note { margin: 12px 0 0; color: var(--muted); font-size: 12px; line-height: 1.7; }
.parser-shell .turn-history { border-top:0; padding:0; margin:0; }.parser-shell .results-panel { margin:0; }.parser-shell .assignments { grid-template-columns:repeat(2,minmax(0,1fr)); }
#industry-search { margin-bottom:4px; }
@media(max-width:740px) { .debug-layout { grid-template-columns:minmax(0,1fr); }.parser-shell .assignments { grid-template-columns:minmax(0,1fr); }.debug-tabs button { font-size:11px; padding:9px; } }
