/* S23 tools drawer + sequence panel (own file; shared style.css untouched) */
.s23sw{display:flex;gap:6px;margin-left:auto;margin-right:14px}.s23sw button{font-size:12px;padding:5px 11px}.s23sw button.on{background:#1a2230;border-color:#c79a52;color:#f0d29a}
#toolsdrawer,#seqdrawer{position:fixed;z-index:40;background:#0b0f14f7;border:1px solid #243041;box-shadow:0 -10px 40px #000a;display:none;color:#d7dee8;backdrop-filter:blur(6px)}
#toolsdrawer.open,#seqdrawer.open{display:flex;flex-direction:column}
#toolsdrawer{left:8px;right:8px;bottom:8px;height:min(560px,calc(100vh - 70px));border-radius:12px}
#seqdrawer{top:60px;right:8px;bottom:8px;width:min(980px,calc(100vw - 16px));border-radius:12px;overflow:auto}
.tdh{display:flex;align-items:center;gap:12px;padding:8px 14px;border-bottom:1px solid #1a222d}.tdh b{font-size:13px;letter-spacing:.08em;text-transform:uppercase}.tdh span{color:#7d8ea3;font-size:11px;flex:1}
.tdb{flex:1;display:grid;grid-template-columns:150px minmax(0,1.45fr) minmax(0,1fr);gap:10px;padding:10px;min-height:0}
.tdpal{overflow:auto}.tdgrp{background:#0d131a;border:1px solid #1a2430;border-radius:8px;padding:6px 7px;margin-bottom:7px}.tdgh{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:#9fb0c3;letter-spacing:.05em;text-transform:uppercase;margin-bottom:4px}
.tdi{width:20px;height:20px;padding:0;border-radius:50%;font:italic 600 11px Georgia,serif}
.tdchip{display:flex;align-items:center;gap:6px;font-size:11.5px;padding:4px 6px;border:1px solid #243041;border-radius:6px;margin:3px 0;cursor:grab;user-select:none;touch-action:none;background:#111823}.tdchip i{width:10px;height:10px;border-radius:50%;background:var(--c);box-shadow:0 0 6px var(--c)}
.tdchip:hover,.tdchip.armed{border-color:var(--c);background:#16202d}.tdghost{position:fixed;width:16px;height:16px;border-radius:50%;pointer-events:none;z-index:99;transform:translate(-50%,-50%);box-shadow:0 0 12px #fff8}
.tdmid{display:flex;flex-direction:column;min-width:0;position:relative}#tdsvg{width:100%;flex:1;min-height:0;background:radial-gradient(ellipse at 40% 40%,#121a25,#090c11);border:1px solid #1a2430;border-radius:8px}
.tbx{fill:#0e141c;stroke:#2a3647}.tlbl{fill:#8ea0b5;font:600 13px Inter,sans-serif;letter-spacing:.08em}.tsm{fill:#8193a8;font:11.5px Inter,sans-serif}.tfan{fill:#0a0f15;stroke:#3a4a5e;stroke-width:2;stroke-dasharray:8 5}
.tcomp{fill:#1b232d;stroke:#56657a;stroke-width:1.5}.tcont{fill:#151c26;stroke:#3a4a5e}.twire{fill:none;stroke:#555;stroke-width:4}.tins{fill:#1d1f22;stroke:#2c3036}.tsv{fill:#8a7444;stroke:#c79a52}
.tcoil{fill:#14202c;stroke:#5aa0ff;stroke-width:1.5}.tair{stroke:#5aa0ff;stroke-width:3;marker-end:none}.tair2{stroke:#ff8a5a;stroke-width:3}.those{stroke:#8f6bd6;stroke-width:3;stroke-dasharray:4 3;fill:none}
.tpt circle{fill:#2a3647;stroke:#7d8ea3;stroke-width:1;cursor:pointer}.tpt:hover circle{fill:#c79a52}.tpt.ok circle{fill:#c79a5244;stroke:#f0d29a;stroke-width:2;animation:tpp 1.2s ease-in-out infinite}@keyframes tpp{50%{stroke-opacity:.3}}
.tmk{cursor:pointer}.tmkt{font:700 10px Inter,sans-serif;fill:#05070a}
#tdhint{margin:5px 2px;min-height:28px;line-height:1.35}.tdgot{display:flex;flex-wrap:wrap;gap:2px 10px;font-size:11px;color:#9fb0c3;align-items:center}.tdgot b{color:#e9c84f;font-size:11px;text-transform:uppercase;letter-spacing:.06em}.tdgot label{display:flex;gap:4px;align-items:center;margin:1px 0;font-size:11px}
.tdfaces{display:grid;grid-template-columns:1fr 1fr;gap:8px;overflow:auto;align-content:start}
.tdf{background:linear-gradient(#111821,#0c1117);border:1px solid #1f2a38;border-radius:9px;padding:7px 9px}.tdf.man{grid-column:1/3}.tdfh{font-size:10.5px;letter-spacing:.09em;color:#9fb0c3;display:flex;justify-content:space-between;gap:6px;margin-bottom:4px}.tdfh span{color:#6f8096;letter-spacing:0;text-align:right}
.tdials{display:flex;justify-content:center;gap:18px}.tdial{width:118px;height:118px;filter:drop-shadow(0 4px 8px #000)}.tdv{fill:#f2f4f7;font:600 11px Inter,sans-serif}.tds{fill:#8ea0b5;font:7.5px Inter,sans-serif}
.tdmr{display:grid;grid-template-columns:auto 1fr auto 1fr;gap:2px 8px;font-size:11.5px;margin-top:4px}.tdmr span{color:#8ea0b5}.tdmr b{text-align:right;font-variant-numeric:tabular-nums;font-weight:500}.tdmr b.hi{color:#7ef0a0}
.lcd{font:600 30px/1.1 'DSEG7 Classic',ui-monospace,Menlo,monospace;background:#a9b98f;color:#162010;border-radius:5px;padding:4px 8px;text-align:right;box-shadow:inset 0 2px 6px #0007;position:relative;letter-spacing:.03em}.lcd small{position:absolute;left:7px;top:4px;font:600 10px Inter,sans-serif}.lcd.good{background:#9fd48f}
.tdbtns{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}.tdbtns button{font-size:11px;padding:3px 7px}
.tdw{margin-top:5px;border-left:3px solid #e9c84f;background:#1a1810;padding:3px 6px;font-size:10.5px;color:#e8d9a8;border-radius:3px;line-height:1.35}
.thr{display:grid;grid-template-columns:22px 1fr auto;font-size:11px;gap:4px;padding:1px 0;border-bottom:1px solid #121a24}.thr i{color:#3ccf7a;font-style:normal;font-weight:600}.thr span{color:#8ea0b5;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.tdcard{display:none;position:absolute;right:8px;top:8px;width:270px;max-height:calc(100% - 110px);z-index:2;box-shadow:0 8px 30px #000c;background:#0d131af5;border:1px solid #1a2430;border-radius:8px;padding:9px 11px;overflow:auto;font-size:11.5px;line-height:1.4}.tdcard h3{margin:0;font-size:15px;color:#f0d29a}.tdsub{color:#7d8ea3;margin-bottom:4px}.tdcard h6{margin:8px 0 2px;font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:#8193a8}.tdcard p{margin:0;color:#b9c6d4}.tdcard ul{margin:0;padding-left:16px;color:#b9c6d4}.tdcard ul.bad li::marker{color:#ff8a5a}.tdfoot{margin-top:8px;font-size:10px;color:#56657a;border-top:1px solid #1a2430;padding-top:5px}
/* sequence */
.sqctl{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;padding:8px 14px}.sqctl label{margin:0;font-size:11px;display:flex;flex-direction:column;gap:2px;min-width:110px}.sqctl label.chk{flex-direction:row;align-items:center;min-width:0}
.sqnodes{display:grid;grid-template-columns:repeat(8,1fr);margin:6px 14px 4px;position:relative}.sqnodes:before{content:'';position:absolute;left:6%;right:6%;top:48px;height:2px;background:#2a3647}
.sn{text-align:center;position:relative;font-size:11px}.sn b{display:block;font-size:10.5px;letter-spacing:.06em;color:#c9d3df}.sn span{display:block;color:#8ea0b5;height:16px}.sn i{display:block;margin:6px auto 0;width:16px;height:16px;border-radius:50%;background:#1a222d;border:2px solid #3a4a5e;position:relative;z-index:1}
.sn.on i{background:#3ccf7a;border-color:#3ccf7a;box-shadow:0 0 10px #3ccf7a}.sn.w i{background:#e9c84f;border-color:#e9c84f;box-shadow:0 0 10px #e9c84f}.sn.bad i{background:#0b0f14;border-color:#ff5a5a;box-shadow:0 0 12px #ff5a5a}.sn.bad b,.sn.bad span{color:#ff6b6b}
#sqcap{margin:6px 14px}.sqalert{border:1px solid #5a2328;background:#1b0d10;border-radius:8px;padding:7px 10px;display:flex;flex-direction:column;gap:2px}.sqalert b{color:#ff6b6b}.sqalert span,.sqinfo{color:#b9c6d4;font-size:12px}.sqinfo{border:1px solid #1f2a38;background:#0d131a;border-radius:8px;padding:7px 10px}
.sqgrid{display:grid;grid-template-columns:1fr 330px;gap:12px;padding:0 14px 12px}.sqcol h5{margin:8px 0 4px}#sqcv{width:100%;height:190px;display:block;background:#0a0e13;border:1px solid #1a2430;border-radius:8px}
#sqlad{width:100%;height:auto;background:#0a0e13;border:1px solid #1a2430;border-radius:8px}#sqlad .rail{stroke:#3a4a5e;stroke-width:3}#sqlad .rail.en{stroke:#ff5a5a}#sqlad .w{stroke:#3a4a5e;stroke-width:2}#sqlad .w.en{stroke:#3ccf7a;filter:drop-shadow(0 0 3px #3ccf7a)}
#sqlad .ct line{stroke:#8ea0b5;stroke-width:2}#sqlad .ct.brk line{stroke:#ff5a5a}#sqlad .ct.op.sf line{stroke:#ff5a5a}#sqlad .lt{fill:#9fb0c3;font:9px Inter,sans-serif}#sqlad .coil{fill:none;stroke:#56657a;stroke-width:2}#sqlad .coil.en{stroke:#3ccf7a;fill:#3ccf7a22}#sqlad .lc{fill:#d7dee8;font:600 9px Inter,sans-serif}#sqlad .ls{fill:#6f8096;font:8.5px Inter,sans-serif}
#sqrd{margin-top:4px}#sqrd b{color:#e9c88f;font-weight:500}
.sf{display:grid;grid-template-columns:16px 1fr auto auto;gap:6px;align-items:center;padding:4px 6px;border-bottom:1px solid #121a24;font-size:11px}.sf b{display:block;font-weight:500;color:#d7dee8}.sf small{color:#6f8096}.sf button{font-size:10px;padding:2px 6px}
.sd{width:11px;height:11px;border-radius:50%;background:#ff5a5a;box-shadow:0 0 8px #ff5a5a}.sd.on{background:#3ccf7a;box-shadow:0 0 6px #3ccf7a}.sd.w{background:#e9c84f;box-shadow:0 0 6px #e9c84f}.sf.bad{background:#1b0d10}.sf.bad b{color:#ff6b6b}
@media (min-width:1700px){#toolsdrawer{height:min(640px,calc(100vh - 70px))}.tdial{width:140px;height:140px}#sqcv{height:240px}}

.tdcard.show{display:block}.tdcx{float:right;padding:0 6px;font-size:11px}
@media (min-width:1700px){.tdb{grid-template-columns:190px minmax(0,1.5fr) minmax(0,1fr)}.tdcard{width:320px;font-size:12.5px}}
/* S25 heat pump / reversing valve panel */
#rvpanel{position:fixed;z-index:40;left:8px;right:8px;top:60px;bottom:240px;background:#0b0f14f7;border:1px solid #243041;border-radius:12px;display:none;flex-direction:column;box-shadow:0 10px 40px #000a}#rvpanel.open{display:flex}
.rvb{flex:1;display:grid;grid-template-columns:200px 1fr 300px;gap:10px;padding:8px 10px;min-height:0}.rvl{overflow:auto}.rvl h5{margin:6px 0 4px}.rvl .cams button{font-size:11px;padding:3px 7px}
.rvstage{position:relative;border:1px solid #1a2430;border-radius:8px;overflow:hidden;min-height:0}#rvc{width:100%;height:100%;display:block;cursor:grab}#rvtags{position:absolute;inset:0;pointer-events:none}
.rvtag{position:absolute;transform:translate(-50%,-50%);font:600 11px Inter,sans-serif;letter-spacing:.06em;color:#e6ecf3;background:#0b0f14c8;border:1px solid #2a3647;border-radius:4px;padding:1px 6px;white-space:nowrap}
.rvleg{position:absolute;left:8px;bottom:6px;display:flex;gap:12px;font-size:11px;color:#9fb0c3}.rvleg i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:4px;vertical-align:-1px}
.rvr{display:flex;flex-direction:column;gap:8px;min-height:0;overflow:auto}.rvr .tdcard{display:block;position:static;width:auto;max-height:none;box-shadow:none}
.rvmode{font-weight:700;letter-spacing:.06em;font-size:13px;margin-bottom:4px}#rvro .kv div{font-size:11.5px}.rvcap{margin-top:6px;border-left:3px solid #c79a52;background:#141a22;padding:5px 8px;font-size:11.5px;color:#cbd5e1;border-radius:3px;line-height:1.4}

.tbx{fill:url(#tpan);stroke:#2a3647;stroke-width:1.2}.tbxh{fill:#18212d}.tlbl{fill:#c9d3df;font:700 13px Inter,sans-serif;letter-spacing:.1em}.tsm{fill:#9fb0c3;font:12px Inter,sans-serif}.tsm2{fill:#e6ecf3;font:600 11px Inter,sans-serif}
.tcu{fill:none;stroke:#b8703f;stroke-linecap:round}.tcuh{fill:none;stroke:#f2b07c;stroke-opacity:.55;stroke-linecap:round}.trv{fill:#6e5226;stroke:#c79a52;stroke-width:1.3}
.twl{fill:none;stroke:#c23a3a;stroke-width:3}.twl2{fill:none;stroke:#3a72c2;stroke-width:2.5}.twhip{fill:none;stroke:#4a4f57;stroke-width:7;stroke-linecap:round}.twy{stroke:#e9c84f;stroke-width:2.5}
.tins{fill:#1b1d20;stroke:#34383f}.tsv{fill:#7a6236;stroke:#e0b56a;stroke-width:1.2}.tfan{fill:#0a0f15;stroke:#3a4a5e;stroke-width:2}.those{fill:none;stroke:#a07be0;stroke-width:3.5;stroke-dasharray:6 4}
.tair{fill:none;stroke:#5aa0ff;stroke-width:4;stroke-linecap:round}.tair2{fill:none;stroke:#ff8a5a;stroke-width:4;stroke-linecap:round}
.tpt circle{fill:#1d2733;stroke:#9fb0c3;stroke-width:1.5}.tmkt{font:700 11px Inter,sans-serif}
#tdsvg{background:radial-gradient(ellipse at 40% 35%,#111924,#080b10)}
