:root{--bg:#f4f6f8;--panel:#fff;--ink:#17202a;--muted:#667085;--line:#d8dee6;--accent:#155eef;--accent-soft:#eef4ff;--closed:#168a5b;--cont:#7c3aed;--warn:#b7791f;--danger:#c63c3c;--wire:#0f766e;--ext:#b45309;--shadow:0 8px 24px rgba(16,24,40,.06)}
*{box-sizing:border-box}body{margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:var(--bg);color:var(--ink);line-height:1.45}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}.app{max-width:1500px;margin:auto;padding:22px}.topbar{display:flex;gap:16px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;margin-bottom:18px}.topbar h1{margin:0;font-size:clamp(1.45rem,2.3vw,2.2rem)}.topbar p{margin:.35rem 0 0;color:var(--muted);max-width:850px}.actions{display:flex;gap:8px;flex-wrap:wrap}.btn{border:1px solid var(--line);background:#fff;color:var(--ink);padding:9px 13px;border-radius:8px;font-weight:650}.btn:hover{background:#f8fafc}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.danger{color:var(--danger)}.card{background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow);padding:16px;min-width:0}.grid-main{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(330px,.8fr);gap:16px}.switch-details{margin-bottom:16px}.switch-details .controls{grid-template-columns:repeat(4,minmax(0,1fr))}.section-title{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.section-title h2{margin:0;font-size:1.05rem}.section-title p{margin:.25rem 0 0;color:var(--muted);font-size:.9rem}.controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:12px}.field label,.field-label{display:block;font-size:.8rem;font-weight:700;color:#344054;margin-bottom:5px}.field input,.field select,select,input[type=text]{width:100%;min-height:42px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:8px 10px;color:var(--ink)}.angle-row{display:flex;gap:8px;align-items:end;flex-wrap:wrap}.secondary-editor{margin-top:10px}.angle-row .field{min-width:135px;flex:1}.angle-nav{display:flex;gap:6px}.angle-nav button{min-width:42px;min-height:42px;border:1px solid var(--line);background:#fff;border-radius:8px}.cam-wrap{display:flex;justify-content:center;padding:4px 0}.cam-svg{width:min(100%,384px);height:auto}.summary-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.summary{border:1px solid var(--line);border-radius:8px;background:#fafbfc;padding:10px}.single-summary{margin-top:12px}.summary .k{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.summary .v{font-weight:750;margin-top:3px;overflow-wrap:anywhere}.switches{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:10px}.check{display:flex;align-items:center;gap:8px;font-weight:650}.check input{width:18px;height:18px}.note{font-size:.82rem;color:var(--muted)}.warning{border-left:4px solid var(--warn);background:#fffaf0;padding:10px 12px;border-radius:8px;font-size:.84rem}.physical-card{margin-top:16px}.physical-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:8px;background:#fff;margin-top:12px}.physical-svg{display:block;width:100%;min-width:1120px;height:auto}.mini-cam{pointer-events:none}.legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:9px;font-size:.82rem;color:#475467}.state-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:16px;margin-top:16px}.pair-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-top:12px}.pair-btn{min-height:68px;border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px;text-align:center}.pair-btn strong{display:block}.pair-btn small{display:block;margin-top:3px;color:var(--muted)}.pair-btn[data-state="1"]{border-color:var(--closed);background:#effaf5}.pair-btn[data-state="2"]{border-color:var(--cont);background:#f5f3ff}.pair-btn.selected{outline:2px solid var(--accent);outline-offset:1px}.jumper-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.validation{margin-top:10px;border:1px solid var(--line);border-radius:8px;padding:10px;font-size:.82rem}.validation.ok{border-color:var(--closed);background:#f0fdf4}.validation.warn{border-color:var(--warn);background:#fffaf0}.validation.bad{border-color:var(--danger);background:#fff5f5}.jumper-list{display:grid;gap:7px;margin-top:10px}.jumper-item{display:flex;justify-content:space-between;align-items:center;gap:8px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fafbfc}.tag{display:inline-block;border-radius:999px;padding:2px 7px;font-size:.7rem;font-weight:800;margin-right:6px}.tag.internal{background:#e6fffa;color:#115e59}.tag.external{background:#fff7ed;color:#9a3412}.matrix-card{margin-top:16px}.table-wrap{overflow:auto;max-width:100%;border:1px solid var(--line);border-radius:8px;margin-top:12px}.matrix{border-collapse:collapse;min-width:1050px;width:100%;font-size:.75rem}.matrix th,.matrix td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);text-align:center;padding:0}.matrix thead th{background:#f8fafc;padding:7px 5px;position:sticky;top:0;z-index:3}.matrix .angle-cell{position:sticky;left:0;z-index:2;background:#fff;min-width:76px}.matrix thead .angle-cell{z-index:4;background:#f8fafc}.matrix tr.defined .angle-cell{background:var(--accent-soft)}.matrix button.cell{position:relative;width:100%;min-height:34px;border:0;background:transparent;overflow:visible;color:var(--ink)}.matrix button.cell .track{position:absolute;left:50%;top:4px;bottom:4px;width:22px;transform:translateX(-50%);border-radius:4px;z-index:0}.matrix button.cell .mark{position:relative;z-index:2;display:inline-grid;place-items:center;min-width:22px;min-height:22px;font-size:1rem;font-weight:900;line-height:1;color:inherit}.matrix button.cell .return-mark{position:absolute;right:3px;top:2px;z-index:3;font-size:.62rem;font-weight:800;color:#9a3412;white-space:nowrap}.matrix button.cell.closed .track{background:var(--closed)}.matrix button.cell.closed .mark{color:#fff}.matrix button.cell.cont .track{top:0;bottom:0;background:var(--cont)}.matrix button.cell.cont:not(.cont-prev) .track{top:6px;border-top-left-radius:8px;border-top-right-radius:8px}.matrix button.cell.cont:not(.cont-next) .track{bottom:6px;border-bottom-left-radius:8px;border-bottom-right-radius:8px}.matrix button.cell.cont .mark{color:#fff}.matrix button.cell.selected-cell{outline:2px solid var(--accent);outline-offset:-2px}.matrix tr.selected{outline:2px solid var(--accent);outline-offset:-2px}.rules{margin-top:16px}.rules-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.rule{border:1px solid var(--line);border-radius:8px;padding:10px;background:#fafbfc;font-size:.84rem}.rule b{display:block;margin-bottom:3px}.status{margin-top:10px;color:var(--muted);font-size:.82rem}.footer{margin-top:18px;color:var(--muted);font-size:.78rem;text-align:center}.hidden{display:none!important}
.cam-meta{margin-top:12px}.cam-constraint{margin-top:12px}.matrix button.cell.cam-blocked{background:#f2f4f7;color:#98a2b3;cursor:not-allowed}.matrix button.cell.cam-blocked .mark{font-size:.85rem}.matrix button.cell.cam-conflict{outline:3px solid var(--danger);outline-offset:-3px}.cam-return-key{justify-content:center;margin-top:0}.cam-return-key span{display:flex;align-items:center;gap:7px}.return-key-line{display:inline-block;width:30px;border-top:4px solid #b7791f}.return-key-line.spring{border-top-color:#c63c3c;border-top-style:dashed}.table-wrap{position:relative}.matrix{position:relative;z-index:1;min-width:1130px}.matrix .position-cell{position:sticky;left:0;z-index:3;background:#fff;min-width:72px;width:72px}.matrix .angle-cell{left:72px;z-index:3}.matrix thead .position-cell,.matrix thead .angle-cell{z-index:6;background:#f8fafc}.matrix tr.defined .position-cell{background:var(--accent-soft)}.position-label{display:inline-grid;place-items:center;min-height:34px;font-weight:850;color:var(--accent)}.return-arrow-layer{position:absolute;left:0;top:0;z-index:4;pointer-events:none;overflow:visible}
.cam-stage-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0 18px;margin-top:12px}.cam-stage-item{min-width:0;padding:14px 6px 16px;border-top:1px solid var(--line);text-align:center}.cam-stage-item h3{margin:0;font-size:.95rem}.cam-stage-mapping{display:flex;justify-content:center;gap:12px;flex-wrap:wrap;margin-top:3px;font-size:.72rem;font-weight:800}.cam-stage-mapping .outer{color:#155eef}.cam-stage-mapping .inner{color:#0f766e}.stage-cam-svg{display:block;width:min(100%,280px);height:auto;aspect-ratio:1;margin:4px auto}.cam-stage-usage{font-size:.72rem;font-weight:700;color:#475467}.cam-stage-warning{margin-top:6px;color:var(--danger);font-size:.72rem;font-weight:800}.cam-stage-item.has-conflict{background:#fff5f5}.profile-key-line{display:inline-block;width:30px;border-top:5px solid}.profile-key-line.outer{border-color:#155eef}.profile-key-line.inner{border-color:#0f766e}.jumper-description{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.jumper-swatch{width:18px;height:6px;border-radius:2px;box-shadow:0 0 0 1px rgba(16,24,40,.12)}.hidden-column{display:none!important}.switch-details .controls{grid-template-columns:repeat(5,minmax(0,1fr))}.overview-only{grid-template-columns:1fr}.jumper-section{margin-top:16px}.jumper-section .field{max-width:420px}.jumper-section .jumper-grid{max-width:850px}.jumper-section #addJumper{max-width:420px}.return-editor{display:grid;grid-template-columns:minmax(190px,1fr) minmax(170px,240px) minmax(140px,220px);gap:12px;align-items:end;margin-top:12px;padding:12px;border:1px solid var(--line);border-radius:8px;background:#f8fafc}.return-selection{align-self:center}.return-selection span{display:block;font-size:.72rem;font-weight:750;color:var(--muted);text-transform:uppercase}.return-selection strong{display:block;margin-top:3px}
.rules-grid{gap:0 20px}.rule{border:0;border-top:1px solid var(--line);border-radius:0;background:transparent;padding:10px 0}@media(max-width:1200px){.switch-details .controls{grid-template-columns:repeat(3,minmax(0,1fr))}.cam-stage-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:980px){.grid-main,.state-layout{grid-template-columns:1fr}.pair-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.cam-stage-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:620px){.app{padding:12px}.controls,.summary-grid,.rules-grid,.jumper-grid,.return-editor,.cam-stage-grid{grid-template-columns:1fr}.pair-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.actions{width:100%}.actions .btn{flex:1}.card{padding:13px}}
@media print{body{background:#fff}.app{max-width:none;padding:0}.actions,.state-actions,#status,.footer{display:none!important}.card{box-shadow:none;break-inside:avoid}.grid-main,.state-layout{grid-template-columns:1fr}.table-wrap{overflow:visible}.matrix{font-size:8px;min-width:0}.physical-svg{min-width:0}.physical-scroll{overflow:visible}}
@media(max-width:980px){.switch-details .controls{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:620px){.switch-details .controls{grid-template-columns:1fr}}
.icon-btn{width:42px;padding:9px;line-height:1;font-size:1.25rem}.switch-details .controls{grid-template-columns:repeat(4,minmax(0,1fr))}.config-summary{margin-top:12px}.config-summary .note{margin-top:3px}.shaft-summary{margin-top:8px}.return-editor{position:sticky;top:8px;z-index:8;grid-template-columns:minmax(170px,1fr) repeat(3,minmax(150px,220px));box-shadow:0 5px 15px rgba(16,24,40,.08)}.programme-key{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin-top:10px;color:#475467;font-size:.78rem}.programme-key span{display:flex;gap:6px;align-items:center}.programme-key i{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:4px;font-style:normal;font-weight:900}.blocked-swatch{background:#f2f4f7;color:#98a2b3}.closed-swatch{background:var(--closed);color:#fff}.continuous-swatch{background:var(--cont);color:#fff}.position-toggle{width:100%;min-height:34px;border:0;background:transparent;color:#98a2b3;font-weight:850}.position-toggle:hover{background:#eef4ff;color:var(--accent)}.position-toggle.active{background:var(--accent-soft);color:var(--accent)}.matrix thead tr:first-child th[data-stage-col]{border-bottom:1px solid var(--line);font-size:.72rem;color:#344054}.matrix thead tr:nth-child(2) th{top:34px}.matrix thead .position-cell,.matrix thead .angle-cell{vertical-align:middle}.matrix tr.defined .position-cell{background:#fff}.matrix tr.defined .position-toggle.active{background:var(--accent-soft)}
.print-programme{display:none}
.matrix .return-cell{position:sticky;left:148px;z-index:3;background:#fff;min-width:88px;width:88px}.matrix thead .return-cell{z-index:6;background:#f8fafc;vertical-align:middle}.return-swatch.position{background:#fff7ed;color:#b7791f;border:1px solid #b7791f}.return-swatch.spring{background:#fff5f5;color:#c63c3c;border:1px dashed #c63c3c}
.return-editor{grid-template-columns:minmax(190px,1fr) minmax(170px,240px) minmax(140px,220px)}.matrix .position-label{display:grid;place-items:center;width:100%;min-height:34px;font-weight:850;color:var(--accent)}.matrix .position-label.active{background:var(--accent-soft)}
.programme-key .return-swatch{width:auto;min-width:26px;padding:0 3px}
@media(max-width:1200px){.switch-details .controls{grid-template-columns:repeat(3,minmax(0,1fr))}.return-editor{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:980px){.switch-details .controls{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:620px){.switch-details .controls,.return-editor{grid-template-columns:1fr}.return-editor{position:static}.actions .icon-btn{flex:0 0 42px}}
@media print{@page{size:A4 landscape;margin:10mm}.switch-details,.cam-overview-card,.physical-card{break-after:page;page-break-after:always}.cam-overview-card{break-before:page;page-break-before:always}.return-editor{display:none}.programme-key{break-inside:avoid}.cam-stage-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.cam-stage-item{break-inside:avoid}.matrix-card{break-before:page;page-break-before:always}.matrix-card>.table-wrap{display:none}.print-programme{display:block;margin-top:12px}.print-programme-page{display:grid;grid-template-columns:1fr 1fr;gap:18px;break-after:page;page-break-after:always}.print-programme-page:last-child{break-after:auto;page-break-after:auto}.print-stage{break-inside:avoid}.print-stage h3{margin:0 0 6px;font-size:11px}.print-stage table{width:100%;border-collapse:collapse;font-size:8px}.print-stage th,.print-stage td{border:1px solid #9ca3af;padding:2px 4px;text-align:center;height:16px}.print-stage th{background:#eef2f6}.physical-card{break-before:page;page-break-before:always}.jumper-section #addJumper,.rules{display:none!important}.config-summary{break-inside:avoid}}
.version-label{display:inline-block;margin-bottom:3px;color:var(--accent);font-size:.72rem;font-weight:850;text-transform:uppercase}.catalogue-source{align-self:center;color:var(--accent);font-size:.78rem;font-weight:700;text-decoration:none}.catalogue-source:hover{text-decoration:underline}.catalogue-source.error{color:var(--danger)}
@media print{.version-label,.catalogue-source{display:none!important}}
