/* RISC-V 五级流水线 CPU：三栏数据通路 + 底部流水线状态/时序。 */
.pl-app{--pl-pink:#e8d5ef;--pl-pink-line:#a878b8;--pl-stage:#f8fbfe;--pl-stage-done:#fff8ed}
.pl-main{flex:1;min-height:0;display:grid;grid-template-columns:clamp(280px,21vw,310px) minmax(0,1fr) clamp(240px,18vw,270px);gap:6px}
.pl-center{min-width:0;min-height:0;display:flex;flex-direction:column}
.pl-dp-card{flex:1;min-height:0;display:flex;flex-direction:column;padding:4px 6px 2px;overflow:hidden}
.pl-dp-wrap{padding:1px 2px 0}
#pl-svg{width:100%;height:100%;display:block;overflow:visible}
.pl-bottom{flex:none;height:clamp(176px,24dvh,230px);display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,1fr);gap:6px;min-width:0}
.pl-bottom-card{padding:5px 8px 6px}
.pl-bottom-card .card-head{margin-bottom:4px}
.pl-scroll{border:1px solid #eef3f8;border-radius:5px;background:#fff}

/* 流水线状态表 */
.pl-stage-table{font-size:10.5px;line-height:1.3;table-layout:fixed}
.pl-stage-table th{font-weight:700;font-size:9.5px;text-align:left;padding:2px 4px}
.pl-stage-table td{padding:2px 4px;border-bottom:1px solid #f1f5f9;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.pl-stage-table td.stg{font-weight:800;color:#33495e}
.pl-stage-table tr.active td{background:#fff8ed;color:#7a4a00}
.pl-stage-table tr.active td.stg{color:#a05a00}
.pl-stage-table tr.flush td{background:#fdf2ef}
.pl-stage-table .pill{display:inline-block;border-radius:3px;padding:0 4px;font-size:9px;font-weight:700}
.pl-stage-table .pill.stall{background:#fff1dc;color:#a05a00;border:1px solid #efc98d}
.pl-stage-table .pill.flush{background:#fdecea;color:#a93226;border:1px solid #e8b4ac}
.pl-stage-table .pill.no{color:#aebdca;border:0;background:transparent;font-weight:400}
.pl-stage-table .ins{color:#1f3347;font-weight:700}
.pl-stage-table .pc{color:#8b9aaa;font-size:9.5px}
.pl-stage-table .note{color:#8b9aaa;font-size:9.5px;text-align:left}
#data-list{flex:1;min-height:0;overflow:auto;scrollbar-width:thin}

/* 流水线时序表 */
.pl-timeline{width:100%;border-collapse:collapse;font-family:var(--mono);font-size:9.5px;line-height:1.25;table-layout:fixed}
.pl-timeline th{position:sticky;top:0;background:#f4f8fc;color:#7b8fa1;font-weight:700;font-size:9px;text-align:center;padding:2px 3px;border-bottom:1px solid #e2eaf2;z-index:1}
.pl-timeline td{text-align:center;padding:1.5px 3px;border-bottom:1px solid #f2f6fa;color:#61758a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pl-timeline td.cyc{color:#9aaaba;font-size:9px}
.pl-timeline tr.cur td{background:#fff8ed;color:#7a4a00}
.pl-timeline tr.cur td.cyc{color:#b9770e;font-weight:800}
.pl-timeline td.if{color:#2471a3}.pl-timeline td.id{color:#1e8449}.pl-timeline td.ex{color:#b9770e}
.pl-timeline td.mem{color:#7d3c98}.pl-timeline td.wb{color:#c0392b}
.pl-timeline td.if,.pl-timeline td.id,.pl-timeline td.ex,.pl-timeline td.mem,.pl-timeline td.wb{font-weight:700}
.pl-timeline td.evt{color:#a93226;font-weight:700}

.pl-status-events{flex:none;display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:3px;font-family:var(--mono);font-size:10px;color:#61758a}
.pl-status-events .ev{background:#f8fbfe;border:1px solid #e2eaf2;border-radius:3px;padding:0 5px}
.pl-status-events .ev.stall{background:#fff1dc;border-color:#efc98d;color:#a05a00;font-weight:700}
.pl-status-events .ev.flush{background:#fdecea;border-color:#e8b4ac;color:#a93226;font-weight:700}
.pl-status-events .ev.forward{background:#eef8ff;border-color:#b9dcf1;color:#1f6f9e;font-weight:700}

@media (max-width: 1480px){ .pl-main{grid-template-columns:280px minmax(0,1fr) 238px} }

/* 程序列表中当前在流水线里的指令 */
.program-row.stage-inflight{background:#eef8ff;box-shadow:inset 3px 0 0 #2471a3}
.program-row.stage-inflight.ex{background:#fff8ed;box-shadow:inset 3px 0 0 #d97706}
.program-row.stage-inflight.mem{background:#f5ecf9;box-shadow:inset 3px 0 0 #7d3c98}
.program-row.stage-inflight.wb{background:#fdecea;box-shadow:inset 3px 0 0 #c0392b}
.program-row.stage-wb{background:#fdf2f1;box-shadow:inset 3px 0 0 #e8b4ac}
.program-row.stage-inflight .asm{color:#1f3347;font-weight:700}


/* 用 DP.createSchematic 生成的五级流水线 SVG；字体/线宽与多周期保持一致。 */
#pl-svg .pl-device path{fill:#ffffff;stroke:#000000;stroke-width:0.94343;stroke-linecap:round;stroke-linejoin:round}
#pl-svg .pl-device.active path{fill:#fff1dc;stroke:#d97706;stroke-width:2.4}
#pl-svg .pl-reg-device path{fill:#e8d5ef;stroke:#a878b8;stroke-width:0.94343;stroke-linecap:round;stroke-linejoin:round}
#pl-svg .pl-reg-device.present path{fill:#f2c8e8;stroke:#9d5eaf}
#pl-svg .pl-reg-device.active path{fill:#fff1dc;stroke:#d97706;stroke-width:2.4}
#pl-svg .pl-btitle{font-family:Arial,sans-serif;font-size:15.4px;font-weight:700;fill:#20364a}
#pl-svg .pl-btitle.small{font-size:11.6px}
#pl-svg .pl-btitle.tiny{font-size:10.6px}
#pl-svg .pl-bval{font-family:var(--mono);font-size:8.8px;fill:#2471a3}
#pl-svg .pl-bval.small{font-size:8px}
#pl-svg .pl-bval.tiny{font-size:7.6px}
#pl-svg .pl-reg-label{font-family:Arial,sans-serif;font-size:9.4px;font-weight:700;fill:#6b4075}
#pl-svg .pl-device.active .pl-btitle{fill:#a05a00}
#pl-svg .pl-device.active .pl-bval{fill:#b9770e}
#pl-svg .dp-wire{fill:none;stroke:#000000;stroke-width:0.94343;stroke-linecap:round;stroke-linejoin:round}
#pl-svg .dp-wire.pl-w-ctl{stroke:#0000ff;stroke-width:0.94343;stroke-dasharray:none}
#pl-svg .dp-wire.pl-w-fwd{stroke:#0000ff;stroke-width:0.94343;stroke-dasharray:none}
#pl-svg .dp-wire.pl-w-hot{stroke:#d97706;stroke-width:2.4}
#pl-svg .dp-arrow{fill:#000000}
#pl-svg .dp-wire.pl-w-ctl + .dp-arrow{fill:#0000ff}
#pl-svg .dp-dots circle{fill:#000000}
#pl-svg .pl-stage-label{font-family:Arial,sans-serif;font-size:13px;font-weight:800;fill:#7c8fa2;letter-spacing:.4px}
#pl-svg .pl-stage-label.active{fill:#a05a00}
#pl-svg .pl-stage-label.flush{fill:#c0392b}
#pl-svg .pl-badge{font-family:Arial,sans-serif;font-size:9.2px;font-weight:700;fill:#8b9aaa}
#pl-svg .pl-badge.stall{fill:#b45309}
#pl-svg .pl-badge.flush{fill:#c0392b}
#pl-svg .pl-divider{stroke:#dce6f0;stroke-width:0.94343;stroke-dasharray:3 4}
#pl-svg .pl-t{font-family:Arial,sans-serif;font-size:11.2px;fill:#52677a}
#pl-svg .pl-t.mono{font-family:Arial,sans-serif;font-size:9.2px;fill:#000000}
#pl-svg .pl-t.hot{fill:#d97706}
#pl-svg .pl-t.ctl{fill:#0000ff;font-family:Arial,sans-serif;font-size:9.2px}

#pl-svg .pl-t.port{font-family:Arial,sans-serif;font-size:8px;fill:#000000}
#pl-svg .pl-t.port-ctl{font-family:Arial,sans-serif;font-size:7.4px;fill:#0000ff}
#pl-svg .pl-stage-ins{font-family:var(--mono);font-size:9.8px;fill:#33495e;font-weight:700}

/* 横向流水线时序：横轴周期，纵轴指令 */
.pl-gantt-wrap{flex:1;min-height:0;overflow:auto;scrollbar-width:thin;border:1px solid #eef3f8;border-radius:5px;background:#fff}
.pl-gantt{border-collapse:separate;border-spacing:2px;font-family:var(--mono);font-size:9px;table-layout:fixed}
.pl-gantt th{position:sticky;top:0;z-index:3;background:#f4f8fc;color:#7b8fa1;font-weight:700;font-size:8.5px;text-align:center;padding:1px 2px;white-space:nowrap;min-width:26px}
.pl-gantt th.rowhead{left:0;z-index:4;text-align:left;width:156px;min-width:156px;max-width:156px;padding-left:4px}
.pl-gantt td.rowhead{position:sticky;left:0;z-index:2;background:#fbfcfe;color:#52677a;font-size:8.5px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:156px;min-width:156px;max-width:156px;padding:0 4px;border-right:1px solid #eef3f8}
.pl-gantt td.cell{width:26px;min-width:26px;height:18px;text-align:center;vertical-align:middle;border-radius:3px;font-size:8px;font-weight:700;color:transparent}
.pl-gantt td.cell.if{background:#eaf3fa;color:#2471a3}
.pl-gantt td.cell.id{background:#eafaf1;color:#1e8449}
.pl-gantt td.cell.ex{background:#fef5e7;color:#b9770e}
.pl-gantt td.cell.mem{background:#f5ecf9;color:#7d3c98}
.pl-gantt td.cell.wb{background:#fdecea;color:#c0392b}
.pl-gantt td.cell.empty{background:#fbfcfe}
.pl-gantt th.curcol{background:#fff0c2;color:#8a5a00}
.pl-gantt td.curcol{box-shadow:inset 0 0 0 1px #e6a817}

#pl-svg .pl-btitle.pl-pcmux-label{font-size:7.2px;font-weight:700}
