main{max-width:1180px;margin:auto;padding:0 clamp(16px,4vw,44px)}.intro{padding:52px 0 26px;max-width:830px}.intro h1{font-size:clamp(3.5rem,8vw,6rem);margin-bottom:20px}.credit{font-size:1rem;color:var(--ink-soft);margin-top:20px}.chapters{display:flex;flex-wrap:wrap;gap:24px;margin:12px 0 32px;font:14px var(--sans)}.panel{background:var(--paper-card);border:1px solid var(--rule);padding:clamp(18px,3vw,32px);margin-bottom:28px;border-radius:5px;scroll-margin-top:20px}.section-head{display:flex;justify-content:space-between;gap:16px;align-items:center;flex-wrap:wrap;margin-bottom:16px}.tag,.label{font:12px var(--sans);letter-spacing:.04em;color:var(--dawn)}.tag{padding:6px 10px;border:1px solid var(--rule)}.hint{font-size:1rem;color:var(--ink-soft);line-height:1.5;margin:12px 0}.presets,.buttons{display:flex;flex-wrap:wrap;gap:10px;margin:16px 0}button,select,input,textarea{font:16px var(--serif);color:var(--ink);background:var(--paper);border:1px solid var(--rule);border-radius:4px}button{padding:10px 15px;min-height:44px;cursor:pointer;font-weight:500}button:hover{border-color:var(--rust)}button:disabled{opacity:.45;cursor:not-allowed}.primary{background:var(--rust);color:var(--paper);border:1px solid var(--rust);font-weight:600}.primary:hover{filter:brightness(1.1)}label{display:flex;flex-direction:column;gap:7px;font-size:1rem}select,input,textarea{padding:10px;min-width:0}textarea{width:100%;resize:vertical;font:16px/1.6 var(--sans);letter-spacing:.06em}input[type=range]{padding:12px 0;accent-color:var(--rust);width:100%}.rotor-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.rotor{border:1px solid var(--rule);padding:16px;display:grid;grid-template-columns:1fr 1fr;gap:12px}.rotor h3{grid-column:1/-1;font-size:1.2rem}.rotor>label:first-of-type{grid-column:1/-1}.settings-bottom{display:flex;gap:16px;align-items:end;flex-wrap:wrap;margin-top:16px}.plug-label{flex:1;min-width:180px}.window-strip{display:flex;gap:25px;align-items:center;padding:24px 0;border-block:1px solid var(--rule);margin:24px 0}.window-strip p{font-size:1rem;color:var(--ink-soft);max-width:52ch}#windows{display:flex;gap:12px;margin-top:10px}#windows span{display:grid;place-items:center;width:60px;height:65px;font:36px var(--sans);background:var(--paper);border:1px solid var(--rule);border-radius:4px}#windows span.moved{border-color:var(--rust);color:var(--rust)}.workbench{display:grid;grid-template-columns:1fr 1fr;gap:32px}.key-area{margin-top:14px}.key-row{display:flex;justify-content:center;gap:7px;margin-bottom:10px}.key-row button,.lamp{border-radius:50%;width:38px;height:38px;min-height:38px;padding:0;display:grid;place-items:center;font:16px var(--sans);flex-shrink:0}.lamp{background:var(--paper);color:var(--ink-soft);border:1px solid var(--rule)}.lamp.on{background:var(--rust);color:var(--paper);box-shadow:0 0 22px var(--rust-soft);border-color:var(--rust)}.key-label{display:block;margin-top:26px}.key-row button.active{border-color:var(--dawn);color:var(--dawn)}.tape{border-top:1px solid var(--rule);padding-top:16px;margin-top:18px}.tape output{display:block;font:17px/1.8 var(--sans);letter-spacing:.12em;overflow-wrap:anywhere;max-height:150px;overflow:auto;margin:8px 0 18px}#output-tape{color:var(--rust)}#settings-error{color:var(--rust)}.signal{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin:22px 0}.signal-stage{background:var(--paper);padding:12px 6px;text-align:center;border-top:2px solid var(--rust)}.signal-stage.return{border-color:var(--dawn)}.signal-stage small{display:block;font:12px/1.5 var(--sans);color:var(--ink-soft)}.signal-stage b{display:block;font:28px var(--sans);color:var(--rust);margin-top:8px}.signal-stage.return b{color:var(--dawn)}.path-summary{font-size:1rem;color:var(--ink-soft)}details{border-top:1px solid var(--rule);margin-top:22px;padding-top:18px}summary{cursor:pointer;color:var(--dawn);font-size:1.1rem;min-height:44px}.explanation p{margin:14px 0;max-width:80ch}.insights{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:28px}.insights h3{font-size:1.25rem;margin-bottom:12px}.insights p{font-size:1rem;color:var(--ink-soft)}#codebreaking>p{margin:14px 0}#codebreaking>label{margin:18px 0}.alignment-scroll{overflow:auto;background:var(--paper);padding:16px;border:1px solid var(--rule)}.alignment{display:grid;gap:8px;width:max-content}.align-row{display:flex;gap:3px}.align-cell{width:25px;height:34px;display:grid;place-items:center;font:16px var(--sans);border:1px solid transparent}.align-cell.covered{border-color:var(--dawn)}.align-cell.conflict{background:var(--rust);color:var(--paper);border-color:var(--rust);text-decoration:underline double}progress{width:100%;height:14px;accent-color:var(--dawn);margin-top:16px}#search-status,#crib-status{font-size:1rem;color:var(--ink-soft)}#candidates{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}.sources{max-width:800px;margin:60px 0}.sources h2{margin-bottom:22px}.sources p{margin:18px 0}.watch-links{display:flex;gap:20px;flex-wrap:wrap;align-items:center;margin:24px 0}.video-link{padding:12px 18px;border-radius:4px}.closing{font-style:italic;color:var(--rust)}footer{display:flex;justify-content:space-between;gap:20px}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--dawn);outline-offset:4px}@media(max-width:900px){.workbench{grid-template-columns:1fr}.key-row button,.lamp{width:42px;height:42px;min-height:42px}.insights{grid-template-columns:1fr}.signal{grid-template-columns:repeat(4,1fr)}}@media(max-width:550px){.rotor{padding:10px;gap:8px;grid-template-columns:1fr}.rotor>label:first-of-type{grid-column:auto}.rotor-grid{gap:7px}.rotor h3{font-size:1rem}.window-strip{flex-direction:column;align-items:flex-start}.key-row{gap:4px}.key-row button,.lamp{width:28px;height:34px;min-height:34px;font-size:14px}.signal{grid-template-columns:repeat(3,1fr)}.chapters{gap:16px;font-size:12px}.settings-bottom button{width:100%}.intro{padding-top:36px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

.loop-signal{grid-template-columns:repeat(4,minmax(0,1fr))}#bombe-loop>p{margin:14px 0}
