:root{--paper:#f5dfae;--brass:#e9bc6c;--mint:#a5ddd2;--board-width:min(860px,calc(100vw - 232px),calc((100dvh - 295px)*1.33333))}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;width:100%}body{font-family:Trebuchet MS,Segoe UI,sans-serif;color:var(--paper);background:radial-gradient(ellipse at 45% 0,#62404a,#241d25 80%);user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}body:before{content:"";position:fixed;inset:0;opacity:.08;pointer-events:none;background:repeating-linear-gradient(45deg,transparent 0 5px,#e9bc6c 6px,transparent 7px 12px)}
button{font:inherit;cursor:pointer;color:inherit;border:1px solid #d4ad7066;border-radius:5px;background:#362831;touch-action:manipulation}button:focus-visible{outline:3px solid #bcf4e5;outline-offset:2px}button:disabled{opacity:.4;cursor:default}button[hidden],input[hidden]{display:none!important}main{position:relative;width:calc(var(--board-width) + 184px);margin:16px auto 0}header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;padding-left:15px;gap:12px}.wordmark{font:bold 34px/.95 Georgia,serif;letter-spacing:.08em}.wordmark span{color:#e4ac66}.wordmark small{display:block;font:8px Trebuchet MS,sans-serif;letter-spacing:.2em;margin-top:8px;color:#d9b797}nav{display:flex;gap:5px}nav button{padding:8px 9px;font-size:11px}#help-button{width:32px;border-radius:50%;background:#efd8b020}#cabinet{padding:9px;border:1px solid #bd8f5b;border-radius:10px;background:linear-gradient(110deg,#4a2b35,#302730);box-shadow:0 18px 60px #0006,inset 0 0 0 3px #251d2544}.dashboard{display:grid;grid-template-columns:repeat(5,1fr);text-align:center;padding:1px 0 9px;border-bottom:1px solid #b28e5f66}.dashboard div+div{border-left:1px solid #a5805144}.dashboard small{display:block;font-size:8px;letter-spacing:.09em;color:#d6b998}.dashboard strong{display:block;font:24px Georgia,serif;margin-top:3px;font-variant-numeric:tabular-nums}#save-state{font:12px Trebuchet MS,sans-serif;line-height:25px}.warning{color:#ffb8a2}#mission{width:100%;display:flex;align-items:center;gap:12px;border:0;background:#281e2780;padding:9px 7px;text-align:left;margin-top:6px;min-height:35px}#mission b{font-size:10px;letter-spacing:.04em;white-space:nowrap;color:var(--brass)}#mission span{font-size:11px;flex:1;line-height:1.3}#mission i{font-size:9px;font-style:normal;white-space:nowrap;color:#b5d7c9}.workshop{display:grid;grid-template-columns:154px minmax(0,1fr);gap:10px;padding-top:8px}.rack{display:flex;flex-direction:column;gap:7px;padding:8px;background:#221e2680;border:1px solid #b28e5f44;border-radius:5px}.rack-heading{text-align:center;font-size:10px;letter-spacing:.05em;color:var(--brass)}#pieces{display:grid;grid-template-columns:1fr 1fr;gap:5px}#pieces button{display:grid;justify-items:center;padding:3px 1px;font-size:9px}#pieces svg{width:58px;height:58px}#pieces small{font-size:9px;margin-top:3px;color:#d5c2a4}#pieces button[aria-pressed=true]{background:#694334;border-color:#f6d08c;box-shadow:0 0 0 1px #e1b263}#rotate{min-height:42px;font-size:24px}#rotate span{font-size:10px}kbd{font:inherit;color:#d5b99b;border:1px solid #a68d6b;border-radius:3px;padding:1px 3px}#lift{min-height:38px;font-size:10px;letter-spacing:.06em}#lift[aria-pressed=true]{background:#92505b;border-color:#f6d08c}.rack button:active{filter:brightness(1.25)}.instrument{margin:auto 0;text-align:center;color:#c8ae8a}.instrument small{font-size:7px;letter-spacing:.05em}#route-check{font-size:11px;line-height:1.5;padding:0 5px}.ready{color:#a8ebd5}.rack-bottom{display:grid;gap:7px;margin-top:auto}.rack-bottom button{min-height:38px;font-size:11px;font-weight:bold}#launch{min-height:55px;background:#28534a;border-color:#77b8a2;letter-spacing:.03em}#launch span{display:block;font-size:8px;font-weight:normal;margin-top:6px}.board-frame{min-width:0}.board-label{display:flex;justify-content:space-between;font-size:9px;letter-spacing:.06em;margin:0 1px 6px;color:#e2bd87}.board-label span+span{font-size:8px;color:#c39b82}#board{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));aspect-ratio:4/3;padding:4px;gap:2px;border:3px solid #ab8453;border-radius:5px;background:#181d24;box-shadow:0 2px 0 #e4bc75}.cell{position:relative;display:block;aspect-ratio:1;min-width:0;padding:0;border:1px solid #8a847038;border-radius:2px;background:linear-gradient(145deg,#42434a,#2b3038);overflow:hidden}.cell:before{content:"";position:absolute;inset:5px;border:1px solid #d7c8a510;pointer-events:none}.cell svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.cell.block{background:repeating-linear-gradient(135deg,#252831 0 8px,#34343b 8px 16px)}.cell.cursor{outline:2px dashed #ffe0a0;outline-offset:-4px;z-index:1}.cell.wet{background:linear-gradient(145deg,#365353,#243b42)}.cell.head{box-shadow:inset 0 0 0 3px #b1e8d2}.cell.problem{outline:3px solid #ffa8a1;outline-offset:-4px}.cell.marked{box-shadow:inset 0 0 0 2px #d6ac64}.cell.source,.cell.drain{background:linear-gradient(135deg,#775442,#493a38);border-color:#e1b56e}.mark{position:absolute;inset:4px auto auto 4px;padding:3px 6px;border-radius:50%;background:#ebd0a0;color:#392a2e;font:bold 14px/1 Georgia,serif;pointer-events:none;box-shadow:0 1px 3px #0006}.mark.switch{background:#c4b6e5}.mark.heater,.mark.radiator{background:#efac7b}.tag,.mini-tag{position:absolute;left:0;right:0;bottom:2px;font-size:7px;letter-spacing:.04em;text-align:center;pointer-events:none}.mini-tag{font-size:6px;color:#d5d8e5}.pressure{height:15px;display:flex;align-items:center;gap:8px;font-size:9px;margin-top:7px}.pressure>div{flex:1;height:5px;background:#151e25;border-radius:5px;overflow:hidden}.pressure i{display:block;width:0;height:100%;background:#9cdfcd}.pressure span:first-child{min-width:125px}#stock{color:#d2b797;font-size:8px}#status{min-height:32px;display:flex;align-items:center;justify-content:center;text-align:center;font-size:11px;line-height:1.35;padding:7px 3px 1px;color:#f7d99f}footer{text-align:center;font-size:8px;color:#be9e8c;margin:11px 0}
.modal{position:fixed;inset:0;display:none;place-items:center;padding:16px;overflow:auto;background:#171923ee;z-index:1000}.modal.is-visible{display:grid}.modal-card{width:min(760px,100%);max-height:calc(100dvh - 32px);overflow-y:auto;padding:28px;border:1px solid #ce9b61;border-radius:10px;background:linear-gradient(120deg,#56333e,#302932);box-shadow:0 25px 80px #0008}.eyebrow{font-size:10px;letter-spacing:.13em;color:#d6af7d}.modal h1,.modal h2{font:normal 42px/1.08 Georgia,serif;margin:14px 0}.modal em{color:#9ce0d0;font-style:italic}.modal p{font-size:14px;line-height:1.55}.guide{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin:20px 0}.guide p{font-size:12px;border-top:2px solid #bd915d;padding-top:12px;margin:0}.guide b{color:#e8b96f}.fine{font-size:11px!important;color:#d9bfa5}.level-guide{padding:8px 15px;background:#252630;border-left:3px solid #8bbaaa;margin:15px 0}.level-guide p{font-size:12px;margin:4px 0}.primary{background:#a5ddd2;color:#183c37;border-color:#d3f2dc;font-weight:bold;min-height:46px;padding:12px 22px}.result-card{text-align:center;width:min(530px,100%)}.result-card button{display:block;margin:12px auto;min-height:40px;padding:9px 20px}.stars{font-size:35px;letter-spacing:.1em;color:#f1c476}.dialog-heading{display:flex;justify-content:space-between;align-items:center}.dialog-heading button{width:42px;height:42px;font-size:26px}.ledger-card h3{font-size:11px;letter-spacing:.09em;margin:22px 0 8px;color:#e9bc6c}.level-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}.level-row button{min-height:44px;padding:6px 2px;font-size:12px}.level-row .current{border-color:#b4efdb;background:#315049}.save-tools{display:flex;gap:10px;margin-top:22px}.save-tools button{min-height:44px;padding:9px 16px}
body.touch-device{--board-width:min(calc(100vw - 136px),calc((100dvh - 133px)*1.33333))}body.touch-device main{width:calc(var(--board-width) + 120px);margin-top:3px}body.touch-device header{height:28px;margin-bottom:2px;padding:0 46px 0 0;gap:5px}body.touch-device .wordmark{font-size:19px;letter-spacing:.03em}body.touch-device .wordmark small{display:none}body.touch-device nav{gap:3px}body.touch-device nav button{padding:6px;font-size:9px}body.touch-device #pause,body.touch-device #reset{display:none}body.touch-device #cabinet{padding:4px}body.touch-device .dashboard{padding:0 0 4px}body.touch-device .dashboard small{font-size:7px;letter-spacing:0;line-height:9px}body.touch-device .dashboard strong{font-size:15px;line-height:17px;margin-top:0}body.touch-device #save-state{font-size:9px;line-height:17px}body.touch-device #mission{min-height:20px;margin-top:3px;padding:3px 4px;gap:5px}body.touch-device #mission b{font-size:8px;max-width:107px;overflow:hidden;text-overflow:ellipsis}body.touch-device #mission span{font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}body.touch-device #mission i{font-size:8px}body.touch-device .workshop{grid-template-columns:102px minmax(0,1fr);gap:7px;padding-top:4px}body.touch-device .rack{padding:4px;gap:5px}body.touch-device .rack-heading{font-size:8px}body.touch-device #pieces{gap:4px}body.touch-device #pieces svg{width:39px;height:39px}body.touch-device #pieces button{font-size:7px;padding:1px 0}body.touch-device #pieces small{font-size:8px;margin-top:1px}body.touch-device #rotate{min-height:34px;font-size:21px}body.touch-device #rotate span{font-size:9px}body.touch-device #lift{min-height:32px;font-size:9px}body.touch-device kbd{display:none}body.touch-device .instrument{display:none}body.touch-device .rack-bottom{gap:5px}body.touch-device #speed{min-height:28px;font-size:10px}body.touch-device #launch{min-height:40px;font-size:10px}body.touch-device #launch span{font-size:7px;margin-top:4px}body.touch-device .board-label{font-size:7px;line-height:9px;margin-bottom:3px}body.touch-device .board-label span+span{display:none}body.touch-device #board{padding:2px;gap:1px;border-width:2px}body.touch-device .pressure{font-size:8px;height:10px;margin-top:4px;gap:4px}body.touch-device .pressure span:first-child{min-width:112px}body.touch-device #stock{display:none}body.touch-device #status{height:25px;min-height:25px;font-size:9px;line-height:1.2;padding:4px 2px 0}body.touch-device .mark{font-size:9px;padding:1px 3px;inset:2px auto auto 2px}body.touch-device .tag{font-size:5px}body.touch-device .mini-tag{font-size:5px}body.touch-device footer{display:none}body.touch-device:has(#instruction-modal.is-visible) .rack{visibility:hidden}
@media(orientation:portrait) and (max-width:900px){body.touch-device main{width:calc(100vw - 12px);margin:7px auto}body.touch-device header{height:42px}body.touch-device .dashboard{padding:2px 0 6px}body.touch-device .dashboard small{font-size:8px}body.touch-device .dashboard strong{font-size:17px;line-height:22px}body.touch-device #save-state{line-height:22px}body.touch-device #mission{padding:7px 5px;display:block;min-height:50px}body.touch-device #mission b{display:block;max-width:none;font-size:10px;margin-bottom:3px}body.touch-device #mission span{white-space:normal;font-size:11px;display:block}body.touch-device #mission i{display:none}body.touch-device .workshop{display:flex;flex-direction:column-reverse;gap:10px}body.touch-device .rack{display:grid;grid-template-columns:106px 64px 1fr;grid-template-rows:44px 44px;gap:5px;padding:6px}body.touch-device .rack-heading{display:none}body.touch-device #pieces{grid-row:1/3}body.touch-device #pieces svg{width:44px;height:57px}body.touch-device #rotate{grid-column:2;grid-row:1;min-height:44px}body.touch-device #rotate span{display:none}body.touch-device #lift{grid-column:2;grid-row:2;min-height:44px}body.touch-device .rack-bottom{grid-column:3;grid-row:1/3;margin:0;grid-template-rows:1fr 1fr}body.touch-device #status{height:42px;min-height:42px;font-size:10px;padding:5px 3px 2px}body.touch-device .board-label{font-size:9px;margin:3px 0 5px}body.touch-device .tag{font-size:6px}.guide{grid-template-columns:1fr;gap:10px}.modal h1{font-size:34px}.modal-card{padding:22px}.level-row button{font-size:10px}}
@media(max-height:500px){.modal-card{padding:15px 20px}.modal h1{font-size:28px;margin:10px 0}.modal p{font-size:12px}.guide{gap:12px;margin:12px 0}.guide p{font-size:11px}.eyebrow{font-size:9px}.primary{padding:10px 16px}.level-guide{margin:9px 0}.level-guide p{font-size:11px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
body.touch-device{--board-width:min(calc(100vw - 136px),calc((100dvh - 140px)*1.33333))}body.touch-device main{margin-top:2px}body.touch-device .board-label{display:none}body.touch-device #status{height:22px;min-height:22px;padding-top:2px}.save-tools{flex-wrap:wrap}@media(orientation:portrait) and (max-width:900px){body.touch-device .board-label{display:flex}body.touch-device #status{height:42px;min-height:42px}}

/* Blender-rendered layers: no 3D runtime; pivots exported by export_ui.py. */
.instrument{margin:auto 0;pointer-events:none}.boiler-art{position:relative;width:100%;aspect-ratio:1;isolation:isolate}.boiler-art img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}.boiler-hot{opacity:0;transition:opacity .35s}.boiler-wheel{transform-origin:50% 61.70735%;animation:valve-turn 8s linear infinite;animation-play-state:paused}.boiler-needle{transform-origin:50% 38.29271%;transform:rotate(var(--needle-angle,-50deg));transition:transform .45s ease-out}.boiler-caption b{display:block;color:#d9bf93;font-size:9px;letter-spacing:.12em}.boiler-caption #route-check{font-size:10px;line-height:1.4;margin:6px 0}.boiler-caption small{display:block;font-size:7px;line-height:1.4;letter-spacing:.02em}.instrument[data-state=idle] .boiler-wheel,.instrument[data-state=blocked] .boiler-wheel{animation:none}.instrument:is([data-state=running],[data-state=paused],[data-state=complete]) .boiler-hot{opacity:1}.instrument[data-state=running] .boiler-wheel{animation-play-state:running}.instrument[data-state=running] .boiler-caption b,.instrument[data-state=complete] .boiler-caption b{color:var(--mint)}.instrument[data-state=blocked] .boiler-caption b{color:#ffb8a2}.boiler-steam{position:absolute;left:82%;top:13%;width:14%;height:16%;opacity:0}.boiler-steam i{position:absolute;left:15%;bottom:0;width:30%;height:35%;border-radius:50%;background:#c9e9d5;opacity:0;animation:boiler-puff 2.4s ease-out infinite;animation-play-state:paused}.boiler-steam i:nth-child(2){left:45%;animation-delay:.8s}.boiler-steam i:nth-child(3){left:30%;animation-delay:1.6s}.instrument:is([data-state=running],[data-state=paused]) .boiler-steam{opacity:1}.instrument[data-state=running] .boiler-steam i{animation-play-state:running}@keyframes valve-turn{to{transform:rotate(360deg)}}@keyframes boiler-puff{0%{opacity:0;transform:translateY(0) scale(.5)}20%{opacity:.45}100%{opacity:0;transform:translateY(-160%) scale(1.5)}}
@media(orientation:landscape) and (min-aspect-ratio:3/2){body.touch-device .instrument{--instrument-side:min(104px,calc((100vw - var(--board-width) - 120px)/2 - 12px));display:block;position:absolute;top:94px;left:calc(-1 * var(--instrument-side) - 6px);width:var(--instrument-side);margin:0}body.touch-device .boiler-caption b{font-size:8px}body.touch-device .boiler-caption #route-check{font-size:9px}body.touch-device .boiler-caption small{font-size:7px}}
@media(orientation:portrait) and (max-width:900px){body.touch-device .instrument{display:flex;align-items:center;justify-content:center;grid-column:1/-1;grid-row:3;gap:5px;margin:0;height:110px}body.touch-device .boiler-art{width:126px;flex:none}body.touch-device .boiler-caption{max-width:175px}body.touch-device .rack{grid-template-rows:44px 44px 110px}body.touch-device .boiler-caption b{font-size:10px}body.touch-device .boiler-caption #route-check{font-size:11px}}
@media(max-height:740px){body:not(.touch-device) .instrument{--instrument-side:clamp(72px,calc((100vw - var(--board-width) - 184px)/2 - 12px),136px);position:absolute;top:190px;left:calc(-1 * var(--instrument-side) - 8px);width:var(--instrument-side);margin:0}body:not(.touch-device) .rack{gap:5px;padding:6px}body:not(.touch-device) #rotate{min-height:38px}body:not(.touch-device) #lift{min-height:34px}body:not(.touch-device) #speed{min-height:32px}body:not(.touch-device) #launch{min-height:48px}}
