/* 版本迭代与版本时间线：web/delivery-versions.js（类前缀 dv-） */
.dv-root{--dv-g:#205c47;--dv-g2:#1D4E3F;--dv-amber:#B7791F;--dv-blue:#1F4E7A;--dv-bluebg:#E8F0F8;--dv-red:#A33A3A;--dv-line:#dbe3ee;--dv-mut:#5b6572;
  display:grid;gap:14px;max-width:1180px;min-width:0}
.dv-card h2,.dv-iter h2{margin:0 0 4px}
.dv-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:10px;margin-bottom:10px}
.dv-head p{margin:0}
.dv-btn{display:inline-flex;align-items:center;justify-content:center;min-height:36px;padding:6px 14px;border:1px solid var(--dv-line);border-radius:6px;background:#fff;
  color:#1f2937;font:inherit;font-weight:600;text-decoration:none;cursor:pointer}
.dv-btn:hover{border-color:var(--dv-g)}
.dv-btn.primary{background:var(--dv-g);border-color:var(--dv-g);color:#fff}
.dv-btn.primary:hover{background:var(--dv-g2)}
.dv-btn:disabled{opacity:.5;cursor:not-allowed}
.dv-btn:focus-visible,.dv-vcard:focus-visible,.dv-heat:focus-visible,.dv-ch:focus-visible,.dv-dec:focus-visible,.dv-fchip:focus-visible{outline:2px solid var(--dv-g);outline-offset:2px}
.dv-linkbtn{border:0;background:none;color:var(--dv-blue);font:inherit;cursor:pointer;padding:0 4px;text-decoration:underline}
.dv-wide{width:100%}
.dv-scroll{overflow-x:auto;max-width:100%}

/* 时间线 */
.dv-track{position:relative;display:flex;align-items:stretch;overflow-x:auto;padding:6px 2px 12px;gap:0;scroll-snap-type:x proximity}
.dv-link{flex:0 0 28px;align-self:center;height:2px;background:linear-gradient(90deg,var(--dv-g),#9fd0b6)}
.dv-vcard{flex:0 0 228px;scroll-snap-align:start;display:flex;flex-direction:column;gap:4px;text-align:left;padding:12px 14px 12px 30px;position:relative;
  border:1px solid var(--dv-line);border-radius:10px;background:#fff;font:inherit;color:inherit;cursor:pointer}
.dv-vcard:hover{border-color:var(--dv-g)}
.dv-vcard.on{border-color:var(--dv-g);box-shadow:0 0 0 2px rgba(32,92,71,.18)}
.dv-vcard.draft{border-style:dashed;background:#fffdf7}
.dv-dot{position:absolute;left:11px;top:16px;width:10px;height:10px;border-radius:50%;background:#9fb3a8}
.dv-vcard.cur .dv-dot{background:var(--dv-g);box-shadow:0 0 0 3px #d9ede3}
.dv-vcard.draft .dv-dot{background:var(--dv-amber)}
.dv-vhead{display:flex;align-items:center;gap:8px}
.dv-vhead b{font-size:17px;color:var(--dv-g2)}
.dv-date{color:var(--dv-mut);font-size:12px}
.dv-vtitle{font-weight:600;line-height:1.4}
.dv-vline{font-size:12px;color:var(--dv-mut);line-height:1.5}
.dv-vline i{font-style:normal;display:inline-block;min-width:30px;color:#374151;font-weight:600}
.dv-tag{margin-left:auto;font-size:11px;padding:1px 8px;border-radius:9px;background:#eef1f5;color:#4b5563;font-weight:600;white-space:nowrap}
.dv-tag-cur{background:#e3f1e6;color:var(--dv-g)}
.dv-tag-draft{background:#fbf0dc;color:var(--dv-amber)}
.dv-actions{display:flex;flex-wrap:wrap;gap:8px}
.dv-compare{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.dv-compare select{max-width:260px;min-height:34px}
.dv-sum{margin:0 0 8px;font-weight:600}

/* 热力格 */
.dv-grid{border-collapse:separate;border-spacing:4px;font-size:13px;min-width:460px}
.dv-grid th{font-weight:600;color:#374151;text-align:left;padding:2px 6px;white-space:nowrap}
.dv-grid thead th{text-align:center;color:var(--dv-mut);font-weight:500}
.dv-grid th small{color:var(--dv-amber);font-weight:500}
.dv-grid td{padding:0}
.dv-heat{display:inline-block;width:100%;min-width:56px;height:34px;border:1px solid transparent;border-radius:6px;font:inherit;font-weight:700;cursor:pointer;color:#1f2937}
.dv-heat:disabled{cursor:default}
.dv-heat.h0{background:#f3f5f4}
.dv-heat.h1{background:#d9ede3}
.dv-heat.h2{background:#9fd0b6}
.dv-heat.h3{background:#2f7d5b;color:#fff}
.dv-heat.on{border-color:var(--dv-g2);box-shadow:0 0 0 2px rgba(29,78,63,.25)}
.dv-legend{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;color:var(--dv-mut);margin:6px 0 12px}
.dv-legend .dv-heat{width:18px;min-width:18px;height:14px;border-radius:3px;margin-left:8px;cursor:default}
.dv-pend{display:block;padding:7px 10px;border-radius:6px;background:var(--dv-bluebg);color:var(--dv-blue);font-size:12px}

/* 改动清单 + 详情 */
.dv-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:14px;align-items:start}
.dv-changes{list-style:none;margin:0;padding:0;max-height:560px;overflow:auto;border:1px solid var(--dv-line);border-radius:8px}
.dv-changes li+li{border-top:1px solid #eef1f5}
.dv-ch{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;width:100%;text-align:left;padding:8px 10px;border:0;background:#fff;font:inherit;color:inherit;cursor:pointer}
.dv-ch:hover{background:#f7faf8}
.dv-ch.on{background:#eef6f1}
.dv-chloc{font-size:13px;line-height:1.45}
.dv-chcat{grid-column:2;font-size:11px;color:var(--dv-mut)}
.dv-kind{display:inline-block;align-self:start;font-size:11px;font-weight:700;padding:1px 7px;border-radius:9px;white-space:nowrap}
.dv-kind.k-add{background:#e3f1e6;color:var(--dv-g)}
.dv-kind.k-mod{background:var(--dv-bluebg);color:var(--dv-blue)}
.dv-kind.k-del{background:#f8e5e5;color:var(--dv-red)}
.dv-kind.k-topic{background:#fbf0dc;color:var(--dv-amber)}
.dv-kind.k-info{background:#eef1f5;color:#4b5563}
.dv-detail{border:1px solid var(--dv-line);border-radius:8px;padding:12px 14px;background:#fff;position:sticky;top:8px}
.dv-detail.empty{background:#fafbfc}
.dv-detail h4{margin:12px 0 6px;font-size:13px;color:#374151}
.dv-dloc{margin:0 0 8px;font-weight:600;line-height:1.5}
.dv-before,.dv-after{position:relative;margin:6px 0;padding:8px 10px 8px 46px;border-radius:6px;white-space:pre-wrap;line-height:1.55;font-size:13px}
.dv-before{background:#fbf1f1;color:var(--dv-red)}
.dv-orig{position:relative;margin:6px 0;padding:8px 10px 8px 10px;border-radius:6px;white-space:pre-wrap;line-height:1.55;font-size:13px;background:#f6f7f9;color:#374151}
.dv-orig i{display:block;font-style:normal;font-weight:700;font-size:12px;color:var(--dv-mut);margin-bottom:2px}
.dv-after{background:#eef7f1;color:#1f4a37}
.dv-before i,.dv-after i{position:absolute;left:10px;top:8px;font-style:normal;font-weight:700;font-size:12px}
.dv-before del{text-decoration-color:rgba(163,58,58,.6)}
.dv-after ins{text-decoration:none}
.dv-after textarea{width:100%;box-sizing:border-box;font:inherit;margin-bottom:6px}
.dv-chips{display:flex;flex-wrap:wrap;gap:5px;margin:6px 0;align-items:center}
.dv-src{font-size:11px;padding:2px 8px;border-radius:9px;font-weight:600;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.dv-src.s-minutes,.dv-src.s-note{background:var(--dv-bluebg);color:var(--dv-blue)}
.dv-src.s-review{background:#fbf0dc;color:var(--dv-amber)}
.dv-src.s-app{background:#e3f1e6;color:var(--dv-g)}
.dv-src.s-decision{background:var(--dv-g2);color:#fff}
.dv-src.s-link{background:#f3f4f6;color:#374151;font-weight:500}
.dv-why{margin:4px 0 0;padding-left:18px;font-size:13px;line-height:1.55;color:#374151}

/* 迭代工作台 */
.dv-iter{display:grid;gap:12px;min-width:0}
.dv-back{margin:0}
.dv-steps{list-style:none;display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0}
.dv-step{display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:20px;background:#f3f5f4;color:var(--dv-mut);font-weight:600;font-size:13px}
.dv-step.on{background:#e3f1e6;color:var(--dv-g2);box-shadow:inset 0 0 0 1px var(--dv-g)}
.dv-step.done{color:var(--dv-g)}
.dv-stepno{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:#fff;border:1px solid currentColor;font-size:12px}
.dv-step.done .dv-stepno{background:var(--dv-g);border-color:var(--dv-g);color:#fff}
.dv-work{display:grid;grid-template-columns:300px minmax(0,1fr);gap:14px;align-items:start}
.dv-left{display:grid;gap:10px}
.dv-box{border:1px solid var(--dv-line);border-radius:8px;padding:10px 12px;background:#fff}
.dv-box h3{margin:0 0 6px;font-size:14px}
.dv-box p{margin:4px 0;line-height:1.6}
.dv-box textarea{width:100%;box-sizing:border-box;font:inherit;margin-bottom:6px}
.dv-drop{display:flex;flex-direction:column;align-items:center;gap:4px;padding:16px 10px;border:2px dashed #b9cfc3;border-radius:8px;background:#f7fbf9;text-align:center;cursor:pointer;font-weight:600;color:var(--dv-g2)}
.dv-drop.over{border-color:var(--dv-g);background:#e9f5ee}
.dv-drop small{font-weight:400;color:var(--dv-mut)}
.dv-drop input{position:absolute;width:1px;height:1px;opacity:0}
.dv-drop:focus-within{outline:2px solid var(--dv-g);outline-offset:2px}
.dv-files{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:6px}
.dv-files li{display:grid;grid-template-columns:1fr auto;gap:0 6px;font-size:13px}
.dv-files .subtle{grid-column:1;font-size:12px}
.dv-files .dv-linkbtn{grid-row:1/span 2;grid-column:2;align-self:center}
.dv-fname{word-break:break-all;font-weight:600}
.dv-job{border-left:3px solid var(--dv-blue);background:#f6f8fc;padding:6px 10px;border-radius:0 6px 6px 0;font-size:13px}
.dv-job p{margin:3px 0}
.dv-job-done{border-left-color:var(--dv-g);background:#f3f9f4}
.dv-job-failed,.dv-job-interrupted{border-left-color:var(--dv-red);background:#fdf3f2}
.dv-bar{height:6px;border-radius:3px;background:#e5e7eb;overflow:hidden;margin:4px 0}
.dv-bar span{display:block;height:100%;background:var(--dv-g);transition:width .3s}
.dv-result dl{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0}
.dv-result dl div{background:#f7faf8;border-radius:6px;padding:6px 8px}
.dv-result dt{font-size:12px;color:var(--dv-mut)}
.dv-result dd{margin:0;font-size:18px;font-weight:700;color:var(--dv-g2)}
.dv-result dd.hot{color:var(--dv-red)}
.dv-result dd.warn{color:var(--dv-amber)}
.dv-main{display:grid;gap:10px;min-width:0}
.dv-filters{display:flex;flex-wrap:wrap;gap:6px}
.dv-fchip{min-height:34px;padding:4px 12px;border:1px solid var(--dv-line);border-radius:17px;background:#fff;font:inherit;cursor:pointer;color:#374151}
.dv-fchip.on{background:var(--dv-g);border-color:var(--dv-g);color:#fff}
.dv-rev{border:1px solid var(--dv-line);border-left:4px solid #c9d2dc;border-radius:8px;padding:10px 12px;background:#fff;display:grid;gap:4px}
.dv-rev.d-yes{border-left-color:var(--dv-g)}
.dv-rev.d-no{border-left-color:#9ca3af;opacity:.8}
.dv-rev.conflict{border-left-color:var(--dv-red)}
.dv-rev.none{border-left-color:var(--dv-amber);background:#fffdf7}
.dv-rev header{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.dv-rid{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:var(--dv-mut)}
.dv-where{font-weight:600;font-size:13px;line-height:1.45}
.dv-miss{color:var(--dv-amber)}
.dv-srcs{margin:0;padding-left:18px;font-size:13px;line-height:1.55;color:#374151}
.dv-srcs small{color:var(--dv-mut)}
.dv-conflict{margin:2px 0;padding:6px 10px;border-radius:6px;background:#fbf1f1;color:var(--dv-red);font-size:13px}
.dv-warn{margin:2px 0;font-size:12px;color:var(--dv-amber)}
.dv-need{margin:2px 0;font-size:13px;color:var(--dv-amber)}
.dv-pick input{width:100%;box-sizing:border-box;min-height:34px;margin:4px 0}
.dv-cands{list-style:none;margin:0;padding:0;border:1px solid var(--dv-line);border-radius:6px;max-height:240px;overflow:auto}
.dv-cands li+li{border-top:1px solid #eef1f5}
.dv-cands button{display:grid;width:100%;text-align:left;padding:6px 10px;border:0;background:#fff;font:inherit;cursor:pointer}
.dv-cands button:hover{background:#eef6f1}
.dv-cands small{color:var(--dv-mut)}
.dv-rev footer{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-top:4px}
.dv-imps{display:flex;flex-wrap:wrap;gap:4px}
.dv-imp{font-size:11px;padding:1px 7px;border-radius:9px;background:#f3f4f6;color:#374151}
.dv-decs{display:inline-flex;border:1px solid var(--dv-line);border-radius:6px;overflow:hidden}
.dv-dec{min-height:34px;min-width:64px;padding:4px 10px;border:0;background:#fff;font:inherit;font-weight:600;cursor:pointer;color:#374151}
.dv-dec+.dv-dec{border-left:1px solid var(--dv-line)}
.dv-dec.yes.on{background:var(--dv-g);color:#fff}
.dv-dec.no.on{background:#6b7280;color:#fff}
.dv-dec.tbd.on{background:#fbf0dc;color:var(--dv-amber)}
.dv-dec:disabled{cursor:default}
.dv-emptyrev{border:1px dashed var(--dv-line);border-radius:8px;padding:18px;background:#fafbfc}
.dv-bottom{position:sticky;bottom:0;z-index:5;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:10px 14px;
  border:1px solid var(--dv-line);border-radius:8px;background:rgba(255,255,255,.96);box-shadow:0 -2px 10px rgba(15,23,42,.06)}

/* 蓝图评审页签顶上的版本条 */
.dv-strip{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:8px 12px;border:1px solid #dbe3ee;border-radius:8px;background:#f7faf8;font-size:13px}
.dv-strip a{color:#1f2937;text-decoration:none;padding:2px 8px;border-radius:10px;background:#fff;border:1px solid #dbe3ee}
.dv-strip a.cur{border-color:#205c47;color:#205c47;font-weight:700}
.dv-strip a.draft{border-style:dashed;border-color:#B7791F;color:#B7791F}
.dv-strip-l{color:#5b6572;font-weight:600}
.dv-strip a.dv-strip-go{margin-left:auto;background:none;border:0;color:#1F4E7A;text-decoration:underline}

@media (max-width:860px){
  .dv-work{grid-template-columns:1fr}
  .dv-split{grid-template-columns:1fr}
  .dv-detail{position:static}
}
@media (max-width:520px){
  .dv-vcard{flex-basis:200px}
  .dv-decs{width:100%}
  .dv-dec{flex:1;min-width:0}
  .dv-strip a.dv-strip-go{margin-left:0}
}
