:root{font-family:system-ui,-apple-system,Segoe UI,sans-serif;color:#f1eee3;background:#101b2c;font-synthesis:none}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 78% 0%,#24405b 0,transparent 44%),#101b2c}a{color:inherit}button,input,textarea{font:inherit}button{cursor:pointer;border:1px solid #5f7b8b;background:#254052;color:#f5ead9;border-radius:8px;padding:9px 12px}button:hover,.import:hover{border-color:#ffa66e}button:focus-visible,a:focus-visible,textarea:focus-visible,input:focus-visible,.cell:focus-visible,.import:focus-within{outline:2px solid #ffb476;outline-offset:2px}.skip{position:absolute;top:-100px;left:12px;background:white;color:#182637;padding:10px;z-index:10}.skip:focus{top:10px}header,main,footer{max-width:1400px;margin:auto}header{padding:22px 30px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #3b5361}header nav{display:flex;align-items:center;gap:23px;color:#b8cbd1;font-size:12px}header nav a{text-decoration:none}.brand{display:flex;align-items:center;gap:9px;text-decoration:none;font-weight:900;letter-spacing:.09em}.intro{padding:58px 30px 36px}.eyebrow{color:#ffb780;font:700 11px ui-monospace,monospace;letter-spacing:.16em}.intro h1{font-size:clamp(60px,9vw,112px);line-height:1;letter-spacing:-.07em;margin:14px 0}.intro em{font-style:normal;color:#ffae78}.intro>p:last-child{color:#c0d0d0;font-size:19px;max-width:620px;line-height:1.55}.layout{padding:0 30px 35px;display:grid;grid-template-columns:minmax(0,1.8fr) minmax(300px,1fr);gap:20px}.map-panel,.card{background:#1b3041;border:1px solid #4c6978;border-radius:15px;padding:20px;box-shadow:0 18px 50px #07111b55}.section-head{display:flex;align-items:end;justify-content:space-between;gap:12px;flex-wrap:wrap}.section-head h2,.card h2{font-size:23px;margin:7px 0 15px;letter-spacing:-.04em}.chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:15px}.chips span{border:1px solid #49677a;border-radius:30px;padding:6px 10px;color:#dfdbca;font:700 11px ui-monospace,monospace}.toolbar,.transport,.commands,.save>div{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-bottom:13px}.toolbar button,.transport button{font-size:12px;font-weight:700}.toolbar .active,.primary{background:#ffb178;color:#172534;border-color:#ffb178}.map-wrap{overflow:auto;border:1px solid #5a7785;border-radius:9px;background:#102330}.map{display:grid;grid-template-columns:repeat(18,minmax(0,1fr));min-width:630px;aspect-ratio:18/12;touch-action:none;background:#183046}.cell{min-width:0;border:1px solid #90afbd1b;border-radius:0;padding:0;background:transparent;position:relative;color:#fff;display:grid;place-items:center;font-size:clamp(12px,1.8vw,24px);user-select:none}.cell:hover{background:#d0eff123}.cell.wall{background:#49606b;box-shadow:inset 0 0 0 3px #89a1a527}.cell.route{background:#5ca8982c}.cell.route:after{content:'';position:absolute;width:6px;height:6px;background:#9ce3b3;border-radius:50%;opacity:.8}.cell.visited{background:#ffb47425}.cell.sensor-line{box-shadow:inset 0 0 0 2px #ffdb9288}.cell.rover{color:#ffba74;text-shadow:0 0 15px #ffab67;z-index:1}.cell.rover:after{display:none}.cell.goal{color:#a7f0c2;text-shadow:0 0 14px #76dca6}.cell.goal:after{display:none}.cell.bump{animation:bump .25s ease-in-out 2}.map-foot{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:12px 0 18px;color:#bdcdd0;font:11px ui-monospace,monospace}.legend{display:inline-block;width:8px;height:8px;border-radius:50%;margin:0 4px 0 9px}.rover-dot{background:#ffb474}.goal-dot,.path-dot{background:#a7f0c2}.transport{border-top:1px solid #486273;padding-top:16px}.transport label{display:flex;align-items:center;gap:9px;color:#bccbd1;font:11px ui-monospace,monospace}.transport input{width:85px;accent-color:#ffae78}#status{min-height:38px;color:#ffd2ab;font-size:13px;line-height:1.5}aside{display:grid;gap:16px;align-content:start}.card p:not(.eyebrow){color:#bdcbcd;font-size:13px;line-height:1.55}.card textarea{width:100%;height:210px;resize:vertical;border:1px solid #607e8d;border-radius:8px;background:#0f2534;color:#ecede4;padding:14px;font:13px/1.55 ui-monospace,monospace}.commands code{padding:5px 7px;border:1px solid #4d6878;border-radius:5px;background:#183748;color:#c5e7d6;font-size:11px}.hint{font-size:11px!important}.readouts{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.readouts div{background:#102938;border-radius:8px;padding:10px 7px;min-width:0}.readouts small{display:block;color:#abc4cd;font:9px ui-monospace,monospace}.readouts strong{display:block;margin-top:7px;color:#ffd397;font:700 13px ui-monospace,monospace;overflow:hidden;text-overflow:ellipsis}.battery-track{height:8px;background:#102938;border-radius:20px;margin:14px 0}.battery-track>div{height:100%;width:100%;background:#a4e3b5;border-radius:20px;transition:width .2s}.log{height:155px;overflow:auto;display:flex;flex-direction:column-reverse;gap:5px;padding-left:23px;color:#c9d6d2;font:11px/1.4 ui-monospace,monospace}.log li:first-child{color:#ffce9b}.save button,.import{font-size:11px}.import{position:relative;border:1px solid #5f7b8b;border-radius:8px;background:#254052;padding:9px 12px;cursor:pointer}.import input{position:absolute;opacity:0;width:1px;height:1px}.next{display:flex;justify-content:space-between;margin:0 30px 35px;padding-top:22px;border-top:1px solid #465c69;font-size:13px}.next a{text-decoration:none;color:#ffb580}footer{padding:22px 30px 35px;border-top:1px solid #425b69;display:flex;justify-content:space-between;gap:10px;color:#9bb3bf;font:10px ui-monospace,monospace;letter-spacing:.1em}@keyframes bump{50%{filter:brightness(1.7)}}@media(max-width:980px){.layout{grid-template-columns:1fr}.intro{padding-top:30px}}@media(max-width:600px){header,footer{padding-left:16px;padding-right:16px}.intro{padding-left:16px;padding-right:16px}.layout{padding-left:12px;padding-right:12px}.map-panel,.card{padding:14px}header nav{gap:9px}.next{margin-left:16px;margin-right:16px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
.rover-picker{display:grid;gap:7px;color:#adc9cc;font:700 11px ui-monospace,monospace;margin:4px 0}.rover-picker select,.block-add select,.block-row select,.block-row input,.block-row textarea{background:#102b39;color:#eaf0e5;border:1px solid #587b87;border-radius:6px;padding:7px;min-width:0}.editor-tabs{display:flex;gap:7px;margin:17px 0 12px}.editor-tabs button[aria-selected=true]{border-color:#ffc08b;color:#ffd09b;background:#354851}.block-list{display:grid;gap:7px;max-height:330px;overflow:auto;padding:3px}.block-row{display:grid;grid-template-columns:minmax(100px,1fr) 54px repeat(3,30px);gap:5px;align-items:center;background:#193d4e;border-left:4px solid #8addb7;border-radius:7px;padding:6px}.block-row.loop{border-color:#ffbe85;background:#344052}.block-row.note{border-color:#648a9b;grid-template-columns:minmax(0,1fr) repeat(3,30px)}.block-row button{padding:5px 0;font-size:12px}.block-row input{width:54px}.block-row textarea{width:100%;height:34px;resize:vertical}.block-add{display:flex;align-items:center;gap:7px;margin-top:12px}.block-add label{font:700 10px ui-monospace,monospace;color:#b5d1d1}.block-add select{flex:1}.block-add button{font-size:11px}.cell.pad{background:#274f4d;color:#ffde89}.cell.pad:before{content:'⚡';position:absolute;font-size:20px;opacity:.9}.cell.pad.rover:before,.cell.pad.goal:before{opacity:.3}.pad-dot{background:#ffde89}#battery-fill{max-width:100%}[hidden]{display:none!important}@media(max-width:490px){.block-row{grid-template-columns:minmax(0,1fr) 46px repeat(3,26px)}.block-row select{font-size:11px}.block-add{flex-wrap:wrap}}
#program-check.invalid{color:#ffaca3}#program-check{color:#a6ebc2}

.block-row.executing{outline:2px solid #ffca83;box-shadow:0 0 15px #ffc18166}
.map.scout .cell.rover{color:#a5ebc6;text-shadow:0 0 16px #96e7ad}.map.hauler .cell.rover{color:#c9a7fa;text-shadow:0 0 16px #bf94ff}
/* Both track axes are explicit so symbols and pseudo-elements cannot resize a row. */
.map{position:relative;width:100%;grid-template-rows:repeat(12,minmax(0,1fr));overflow:hidden}
.cell{min-height:0;overflow:hidden;line-height:1}
.cell.goal{animation:goal-glow 2.2s ease-in-out infinite}
.cell.pad:not(.rover):before{animation:charger-flicker 2.5s ease-in-out infinite}
.cell.sensor-line{background-image:linear-gradient(135deg,transparent 20%,#ffd99716 52%,transparent 80%)}
.rover-marker{position:absolute;z-index:4;width:calc(100% / 18);height:calc(100% / 12);pointer-events:none;display:grid;place-items:center;transition:left var(--travel-duration,.29s) cubic-bezier(.2,.8,.2,1),top var(--travel-duration,.29s) cubic-bezier(.2,.8,.2,1)}
.rover-marker.snap{transition:none}
.rover-art{width:96%;height:96%;display:grid;place-items:center;transition:transform .26s ease-out;filter:drop-shadow(0 3px 7px #080e20a8)}
.rover-art svg{width:100%;height:100%;overflow:visible}
.rover-marker:before{content:'';position:absolute;inset:12%;border-radius:50%;opacity:0;pointer-events:none}
.rover-marker.scanning:before{border:2px solid #c6ffe1;animation:rover-scan .65s ease-out forwards}
.rover-marker.charging:before{border:3px solid #ffe396;box-shadow:0 0 16px #ffe396;animation:rover-charge .65s ease-out forwards}
.rover-marker.bumping .rover-art{animation:rover-bump .35s ease-in-out 2}
.rover-marker.arrived .rover-art{animation:rover-arrive .75s ease-out}
@keyframes rover-scan{0%{opacity:.9;transform:scale(.6)}100%{opacity:0;transform:scale(2.7)}}
@keyframes rover-charge{0%{opacity:1;transform:scale(.7)}60%{opacity:1;transform:scale(1.7)}100%{opacity:0;transform:scale(2.2)}}
@keyframes rover-bump{20%{translate:4px 0}60%{translate:-4px 0}100%{translate:0 0}}
@keyframes rover-arrive{45%{filter:drop-shadow(0 0 20px #a4ffd0);scale:1.25}100%{scale:1}}
@keyframes goal-glow{50%{text-shadow:0 0 24px #afffd5;filter:brightness(1.4)}}
@keyframes charger-flicker{50%{opacity:.5;filter:drop-shadow(0 0 10px #ffe2a4)}}
@media(prefers-reduced-motion:reduce){.rover-marker,.rover-art{transition:none}.rover-marker.scanning:before,.rover-marker.charging:before,.rover-marker.bumping .rover-art,.rover-marker.arrived .rover-art,.cell.goal,.cell.pad:not(.rover):before{animation:none}}
