/* Signal Box v0.17.10 — fixed validation prototype. */
body.gr-signal-box-page{background:#090807;color:#e7d9b8}
.gr-signal-page{min-height:100%;padding:0 0 48px;font-family:"Cormorant Garamond",Georgia,serif;background:radial-gradient(circle at 50% 20%,#231b10 0,#0c0a08 52%,#050403 100%)}
.gr-signal-nav{display:flex;justify-content:space-between;align-items:center;max-width:920px;margin:0 auto;padding:18px 22px 10px}
.gr-signal-nav a{color:#d7b965;text-decoration:none;font-family:Cinzel,Georgia,serif;letter-spacing:.08em;font-size:clamp(13px,1.5vw,18px)}
.gr-signal-game{width:min(96vw,760px);margin:0 auto}
.gr-signal-head{text-align:center;margin:4px auto 18px;padding:16px 20px;border:1px solid rgba(191,151,63,.55);background:linear-gradient(180deg,rgba(38,30,19,.96),rgba(15,13,10,.97));box-shadow:inset 0 0 0 3px rgba(111,79,31,.22)}
.gr-signal-head h1{margin:0;color:#d9b764;font-family:Cinzel,Georgia,serif;font-weight:400;letter-spacing:.11em;font-size:clamp(30px,6vw,54px)}
.gr-signal-head p{margin:.42em 0 0;color:#eadbb6;font-size:clamp(16px,2.4vw,22px)}
.gr-signal-machine{padding:clamp(12px,2.5vw,24px);border:2px solid #7b5d2c;background:linear-gradient(145deg,#18130d,#090806);box-shadow:0 16px 44px rgba(0,0,0,.6),inset 0 0 0 4px #2b2012}
.gr-signal-board-wrap{position:relative;width:min(78vw,560px);margin:clamp(74px,12vw,96px) auto;aspect-ratio:1;border:clamp(5px,1vw,9px) solid #8d682c;background:#050403;box-shadow:0 0 0 3px #2e2111,0 0 0 5px rgba(210,166,69,.25)}
.gr-signal-grid{position:absolute;inset:0;display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(5,1fr);gap:0;background:#050403}
.gr-signal-tile{position:relative;display:block;width:100%;height:100%;padding:0;border:0;background:#080706;overflow:hidden;cursor:pointer;touch-action:manipulation}
.gr-signal-tile img{display:block;width:100%;height:100%;object-fit:contain;transform-origin:50% 50%;transition:transform 150ms ease;pointer-events:none;user-select:none}
.gr-signal-tile:focus-visible{outline:3px solid #efd178;outline-offset:-3px;z-index:3}
.gr-signal-tile.is-fixed{cursor:default}
.gr-signal-terminal{position:absolute;z-index:5;width:27%;aspect-ratio:1374/1145;pointer-events:none;transform-origin:50% 50%}
.gr-signal-terminal img{display:block;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 7px 8px rgba(0,0,0,.58))}
/* Source: left edge, row 3; its asset connector points right. */
.gr-signal-source{left:-25.8%;top:50%;transform:translateY(-50%)}
/* Destination A: top edge, CENTRE column; connector rotated downward. */
.gr-signal-dest-a{left:50%;top:-25.5%;transform:translateX(-50%) rotate(270deg)}
/* Destination B: right edge, row 3; connector rotated left. */
.gr-signal-dest-b{right:-25.8%;top:50%;transform:translateY(-50%) rotate(180deg)}
/* Destination C: bottom edge, CENTRE column; connector rotated upward. */
.gr-signal-dest-c{left:50%;bottom:-25.5%;transform:translateX(-50%) rotate(90deg)}
.gr-signal-controls{display:flex;justify-content:center;gap:18px;flex-wrap:wrap;margin-top:4px}
.gr-signal-controls button,.gr-signal-modal-actions button,.gr-signal-modal-actions a{min-height:46px;padding:11px 23px;border:1px solid #a77c32;background:linear-gradient(#332516,#171109);color:#e4c77b;font-family:Cinzel,Georgia,serif;font-size:15px;letter-spacing:.07em;text-decoration:none;cursor:pointer}
.gr-signal-controls button:hover,.gr-signal-controls button:focus-visible,.gr-signal-modal-actions button:hover,.gr-signal-modal-actions a:hover{background:linear-gradient(#4a351b,#21170c);color:#ffe5a0}
.gr-signal-controls button:disabled{opacity:.42;cursor:not-allowed}
.gr-signal-prototype-note{text-align:center;margin:14px 0 0;color:#8f805f;font-family:Cinzel,Georgia,serif;font-size:11px;letter-spacing:.08em}
.gr-signal-modal[hidden]{display:none}
.gr-signal-modal{position:fixed;inset:0;z-index:1200;display:grid;place-items:center;padding:22px;background:rgba(0,0,0,.78)}
.gr-signal-modal-card{width:min(92vw,520px);padding:32px 28px;text-align:center;border:2px solid #a37b36;background:#130f09;box-shadow:0 18px 60px #000}
.gr-signal-modal-card h2{margin:0 0 10px;color:#e1bd60;font-family:Cinzel,Georgia,serif;font-weight:400;letter-spacing:.09em;font-size:clamp(26px,5vw,40px)}
.gr-signal-modal-card p{font-size:20px}
.gr-signal-modal-actions{display:flex;justify-content:center;gap:12px;flex-wrap:wrap;margin-top:22px}
@media(max-width:560px){
 .gr-signal-page{padding-bottom:24px}.gr-signal-nav{padding:12px 12px 8px}.gr-signal-game{width:100%}.gr-signal-head{margin-left:8px;margin-right:8px;padding:10px 10px 12px}.gr-signal-machine{padding:12px 8px 18px;border-left:0;border-right:0}.gr-signal-board-wrap{width:82vw;margin-top:19vw;margin-bottom:19vw}.gr-signal-terminal{width:30%}.gr-signal-source{left:-28.8%}.gr-signal-dest-b{right:-28.8%}.gr-signal-dest-a{top:-28.5%}.gr-signal-dest-c{bottom:-28.5%}
}
@media(prefers-reduced-motion:reduce){.gr-signal-tile img{transition:none}}

/* v0.17.25 original-artwork integration — visual layer only; JS unchanged. */
.gr-signal-game{width:min(100%,760px)}
.gr-signal-head{display:none}
.gr-signal-machine{position:relative;width:100%;aspect-ratio:1223/1286;padding:0;border:0;background:transparent;box-shadow:none;overflow:visible}
.gr-signal-original-panel{position:absolute;inset:0;background:url('../images/signal-box-original-panel.png') center/100% 100% no-repeat;pointer-events:none}
.gr-signal-board-wrap{position:absolute;left:18.48%;top:20.95%;width:62.55%;height:58.2%;margin:0;aspect-ratio:auto;border:0;background:#15120e;box-shadow:none}
.gr-signal-grid{inset:0;gap:0;background:#15120e}
.gr-signal-tile{background:#171512;border:1px solid #5b4527;box-shadow:inset 0 0 0 2px #0c0a08}
.gr-signal-tile img{object-fit:fill}
.gr-signal-terminal{width:27%}
.gr-signal-source{left:-25.8%;top:50%}
.gr-signal-dest-a{left:50%;top:-25.5%}
.gr-signal-dest-b{right:-25.8%;top:50%}
.gr-signal-dest-c{left:50%;bottom:-25.5%}
.gr-signal-controls{position:absolute;inset:0;display:block;margin:0;pointer-events:none}
.gr-signal-controls .gr-signal-reset,.gr-signal-controls .gr-signal-new{position:absolute;top:88.3%;width:28%;height:6.6%;min-height:0;padding:0;border:0;background:transparent;color:transparent;font-size:0;pointer-events:auto;cursor:pointer}
.gr-signal-controls .gr-signal-reset{left:15.4%}
.gr-signal-controls .gr-signal-new{left:56.7%}
.gr-signal-controls .gr-signal-reset:hover,.gr-signal-controls .gr-signal-reset:focus-visible,.gr-signal-controls .gr-signal-new:hover{background:rgba(240,198,96,.10);outline:2px solid #caa65a}
.gr-signal-controls .gr-signal-new:disabled{opacity:1;cursor:not-allowed}
.gr-signal-controls .gr-signal-solve-test{position:absolute;top:100.8%;left:50%;transform:translateX(-50%);pointer-events:auto;z-index:10}
.gr-signal-prototype-note{position:absolute;top:108%;left:0;right:0;margin:0}
.gr-signal-page{padding-bottom:125px}
@media(max-width:560px){
.gr-signal-game{width:100%}.gr-signal-machine{padding:0;border:0}
.gr-signal-board-wrap{left:18.48%;top:20.95%;width:62.55%;height:58.2%;margin:0}
.gr-signal-terminal{width:27%}.gr-signal-source{left:-25.8%}.gr-signal-dest-b{right:-25.8%}.gr-signal-dest-a{top:-25.5%}.gr-signal-dest-c{bottom:-25.5%}
.gr-signal-controls .gr-signal-reset,.gr-signal-controls .gr-signal-new{min-height:0}
}

/* v0.17.27: only extend the artwork at the header-to-board seam; original board dimensions and terminal offsets preserved. */
.gr-signal-machine{aspect-ratio:1223/1391}
.gr-signal-board-wrap{top:calc(100% * 374.417 / 1391);height:calc(100% * 748.452 / 1391)}
.gr-signal-controls .gr-signal-reset,.gr-signal-controls .gr-signal-new{top:calc(100% * 1240.938 / 1391);height:calc(100% * 84.876 / 1391)}
@media(max-width:560px){.gr-signal-board-wrap{top:calc(100% * 374.417 / 1391);height:calc(100% * 748.452 / 1391)}}

/* v0.17.37 — approved independent shell, retaining v0.17.21 game DOM and JS. */
.gr-signal-page{padding-bottom:50px}
.gr-signal-game{width:min(96vw,760px);margin:0 auto}
.gr-signal-machine.gr-signal-shell{position:relative;width:100%;height:auto;aspect-ratio:auto;padding:15px 22px 22px;border:9px ridge #725126;background:radial-gradient(ellipse at 50% 40%,#28221b,#11100e 70%);box-shadow:inset 0 0 0 3px #21180d,0 20px 70px #000;overflow:visible}
.gr-signal-shell .gr-shell-header{display:grid;grid-template-columns:1fr 3fr 1fr;align-items:start;gap:12px;min-height:188px}
.gr-signal-shell .gr-shell-raven{display:block;width:100%;aspect-ratio:1;object-fit:cover;border:3px solid #82602c;border-radius:50%;filter:brightness(.8)}
.gr-signal-shell .gr-shell-title-frame{padding:7px 8px;border:4px ridge #9a7135;background:#100e0c}
.gr-signal-shell .gr-shell-title-frame h1{margin:0;text-align:center;color:#d7b46d;font-family:Georgia,serif;letter-spacing:.09em;font-size:clamp(24px,5vw,47px);font-weight:400;text-shadow:0 2px 3px #000}
.gr-signal-shell .gr-shell-instructions{margin-top:12px;padding:10px 8px;border:4px ridge #99713c;background:#100e0b;color:#e7cb91;text-align:center;font-family:Georgia,serif;font-size:clamp(11px,1.65vw,16px);line-height:1.3}
.gr-signal-shell .gr-shell-motto{color:#d7b46d;font-family:Georgia,serif;font-size:clamp(9px,1.4vw,15px);letter-spacing:.08em;text-align:center;line-height:1.6}
.gr-signal-shell .gr-signal-board-wrap{position:relative;left:auto;top:auto;right:auto;bottom:auto;width:70%;height:auto;aspect-ratio:auto;margin:44px auto 35px;padding:7px;border:8px ridge #9e763a;background:#110f0c;box-shadow:0 0 0 3px #251a0c,0 6px 15px #000}
.gr-signal-shell .gr-signal-grid{position:relative;inset:auto;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));grid-template-rows:repeat(5,minmax(0,1fr));gap:3px;background:#110f0c}
.gr-signal-shell .gr-signal-tile{position:relative;display:block;width:100%;height:auto;aspect-ratio:1;padding:0;border:0;background:#15130f;box-shadow:none;overflow:hidden;min-width:0;cursor:pointer}
.gr-signal-shell .gr-signal-tile img{display:block;width:100%;height:100%;object-fit:fill}
.gr-signal-shell .gr-signal-terminal{position:absolute;width:25%;aspect-ratio:1374/1145;z-index:5;pointer-events:none}
.gr-signal-shell .gr-signal-source{left:-13%;top:50%;right:auto;bottom:auto;transform:translate(-50%,-50%)}
.gr-signal-shell .gr-signal-dest-a{left:50%;top:-13%;right:auto;bottom:auto;transform:translate(-50%,-50%) rotate(90deg)}
.gr-signal-shell .gr-signal-dest-b{right:-13%;top:50%;left:auto;bottom:auto;transform:translate(50%,-50%) rotate(180deg)}
.gr-signal-shell .gr-signal-dest-c{left:50%;bottom:-13%;right:auto;top:auto;transform:translate(-50%,50%) rotate(270deg)}
.gr-signal-shell .gr-signal-controls{position:relative;inset:auto;display:flex;gap:12px;justify-content:space-around;align-items:stretch;margin:48px 10px 2px;pointer-events:auto}
.gr-signal-shell .gr-signal-controls .gr-signal-reset,.gr-signal-shell .gr-signal-controls .gr-signal-new{position:static;top:auto;left:auto;right:auto;bottom:auto;transform:none;width:44%;height:auto;min-height:42px;padding:12px 2px;border:5px ridge #926a32;background:#15120e;color:#d7b46d;font-family:Georgia,serif;font-size:clamp(12px,2vw,19px);letter-spacing:.06em;cursor:pointer;pointer-events:auto}
.gr-signal-shell .gr-signal-controls .gr-signal-new:disabled{opacity:.55;cursor:not-allowed}
.gr-signal-shell .gr-signal-controls button:focus-visible{outline:3px solid #ffe5a0;outline-offset:3px}
@media(max-width:550px){.gr-signal-machine.gr-signal-shell{padding:10px 12px;border-width:6px}.gr-signal-shell .gr-shell-header{min-height:130px;gap:5px}.gr-signal-shell .gr-signal-board-wrap{width:72%;margin:35px auto;padding:3px;border-width:5px}.gr-signal-shell .gr-signal-grid{gap:1px}.gr-signal-shell .gr-shell-title-frame{border-width:2px}.gr-signal-shell .gr-shell-instructions{border-width:2px;margin-top:6px;padding:5px 2px}.gr-signal-shell .gr-signal-controls{margin-top:32px}.gr-signal-shell .gr-signal-controls .gr-signal-reset,.gr-signal-shell .gr-signal-controls .gr-signal-new{border-width:3px;padding:7px 0}}
