:root{color-scheme:dark;--bg:#0B0E10;--text:#D9E2DC;--muted:#84958A;--accent:#A8DDB8;--line:#29332e;font-family:"IBM Plex Mono","Cascadia Mono","SFMono-Regular",Consolas,"Liberation Mono",monospace;font-size:14px}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);line-height:1.7}button,input{font:inherit}button,a,input{-webkit-tap-highlight-color:transparent}::selection{background:var(--accent);color:var(--bg)}.console{max-width:1040px;margin:auto;padding:36px 40px 24px;min-height:100svh;display:flex;flex-direction:column}.system-bar{display:flex;justify-content:space-between;gap:20px;padding-bottom:20px;border-bottom:1px solid var(--line);font-size:12px;color:var(--muted)}.separator{margin:0 10px;color:var(--line)}.status{color:var(--accent);white-space:nowrap;font-size:11px;letter-spacing:.1em}.status span{font-size:9px;margin-right:7px}.intro{padding:70px 0 46px}.welcome{margin:0 0 24px;color:var(--muted)}.accent{color:var(--accent)}.welcome .accent{margin-right:10px}h1{font-size:clamp(40px,7.5vw,76px);font-weight:500;line-height:1.15;letter-spacing:-.06em;margin:0 0 15px}.cursor{color:var(--accent);animation:blink 1.4s steps(1,end) infinite}.subtitle{font-size:12px;letter-spacing:.24em;color:var(--accent);margin:0}.description{margin:28px 0 0;color:var(--muted);max-width:580px}.terminal{border-top:1px solid var(--line);padding:22px 0}.terminal-heading{display:flex;justify-content:space-between;gap:16px;font-size:12px}.muted{color:var(--muted)}.hint{margin:24px 0 12px;color:var(--muted)}.commands{display:flex;flex-wrap:wrap;gap:6px 10px;margin-bottom:22px}.commands button{border:1px solid var(--line);background:transparent;color:var(--text);padding:4px 10px;border-radius:3px;cursor:pointer}.commands button:hover{border-color:var(--accent);color:var(--accent)}button:focus-visible,a:focus-visible,input:focus-visible,.output:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.output{max-height:360px;overflow:auto;overflow-wrap:anywhere;scrollbar-color:var(--line) var(--bg)}.entry{padding-bottom:20px}.echo{color:var(--accent);margin:0 0 8px}.response{white-space:pre-wrap;margin:0;color:var(--text);line-height:1.8}.response.error{color:var(--muted)}#terminal-form{display:flex;align-items:center;gap:10px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:16px 0}.prompt{color:var(--accent);white-space:nowrap}#command{width:100%;min-width:0;border:0;background:transparent;color:var(--text);caret-color:var(--accent);padding:4px 2px;outline-offset:2px}#command::placeholder{color:var(--muted);opacity:.7}.execute{color:var(--accent);background:transparent;border:1px solid var(--line);border-radius:3px;padding:4px 11px;cursor:pointer}.execute:hover{border-color:var(--accent)}.keyboard-help{font-size:11px;color:var(--muted);margin:12px 0 0}.keyboard-help span{padding:0 9px}footer{margin-top:auto;padding-top:48px;display:flex;justify-content:space-between;gap:16px;color:var(--muted);font-size:11px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:20px;top:-100px;padding:8px;background:var(--bg);color:var(--accent)}.skip-link:focus{top:10px}@keyframes blink{50%{opacity:0}}@media(prefers-reduced-motion:reduce){.cursor{animation:none}}@media(max-width:600px){.console{padding:22px 22px 20px}.system-bar{font-size:10px;gap:8px}.separator{margin:0 5px}.intro{padding:48px 0 36px}.subtitle{font-size:10px;letter-spacing:.18em}.description{font-size:13px}.terminal-heading{font-size:11px}.commands{gap:8px}.commands button{padding:7px 10px}.prompt-name{display:none}#command{font-size:16px}.execute{min-height:40px;min-width:40px}.keyboard-help{line-height:2}.keyboard-help span{padding:0 4px}footer{flex-direction:column;gap:4px;padding-top:32px}.output{max-height:320px}}
/* Terminal window revision: all page content is rendered as terminal text. */
body{background:#080a0c;padding:48px 24px}.console{max-width:1040px;min-height:0;margin:0 auto;padding:0;border:1px solid #3b4941;border-radius:9px;overflow:hidden;background:var(--bg);box-shadow:0 24px 80px #0006}.window-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;min-height:44px;padding:0 18px;border-bottom:1px solid #344038;background:#151b18;color:var(--muted);font-size:12px}.window-controls{display:flex;gap:7px}.window-controls i{display:block;width:9px;height:9px;border-radius:50%;border:1px solid #66766b;background:#26332b}.window-mark{color:var(--accent)}.window-body{padding:30px 32px 24px}.intro{padding:0 0 22px}.banner{font:inherit;font-size:clamp(9px,1.8vw,20px);line-height:1.2;letter-spacing:0;white-space:pre;margin:18px 0 16px;color:var(--text);max-width:100%;overflow-x:auto}.subtitle{font-size:inherit;letter-spacing:0;color:var(--accent);margin:0 0 20px}.welcome{margin:0}.description{margin:0;max-width:none;color:var(--text)}.intro>.muted{margin:12px 0 0}.terminal{border:0;padding:0}.hint{margin:0;color:var(--text)}.command-label{margin:12px 0 0}.commands{gap:0 12px;margin:0 0 22px}.commands button{border:0;border-radius:0;padding:4px 0;color:var(--accent)}.commands button:hover{text-decoration:underline}#terminal-form{border:0;padding:4px 0}.execute{border:0;border-radius:0}.keyboard-help{margin:12px 0 0}.output{max-height:360px}footer{margin:0;padding-top:26px;display:flex;flex-direction:column;gap:0}.window-controls{flex-shrink:0}@media(max-width:600px){body{padding:16px 10px}.console{border-radius:6px}.window-bar{padding:0 12px;font-size:10px;gap:8px}.window-body{padding:22px 16px 18px}.banner{font-size:clamp(7px,1.7vw,10px)}.subtitle{font-size:12px}.description{font-size:13px}.commands{gap:0 15px}.commands button{min-height:44px;padding:8px 0}.keyboard-help{font-size:10px}footer{padding-top:22px}.window-mark{display:none}}
/* 0.0.2: viewport-sized terminal with one internal scrolling surface. */
body{height:100vh;height:100dvh;padding:5vh 24px;padding:5dvh 24px;overflow:hidden}.console{height:90vh;height:90dvh;min-height:0;display:flex;flex-direction:column}.window-bar{flex:0 0 44px}.window-body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-color:var(--line) var(--bg);scrollbar-width:thin}.output{max-height:none;overflow:visible}.banner{flex-shrink:0}@media(max-width:600px){body{padding:5vh 10px;padding:5dvh 10px}.console{height:90vh;height:90dvh}.window-body{padding:22px 16px 18px}.output{max-height:none}}
/* 0.1.0: fixed input dock, external copyright; current palette pending selection. */
body{padding:3vh 24px 0;padding:3dvh 24px 0;display:flex;flex-direction:column;align-items:center;gap:0}.console{width:100%;flex:0 0 90vh;flex-basis:90dvh}.input-dock{flex-shrink:0;padding:14px 32px 12px;border-top:1px solid var(--line);background:var(--bg)}.input-dock #terminal-form{padding:0}.input-dock .keyboard-help{margin:6px 0 0}.site-footer{padding:0;margin:0;flex:1;min-height:0;display:flex;align-items:center;justify-content:center;text-align:center;width:100%;font-size:11px;color:var(--muted)}.banner-response{margin:0;line-height:1.2}@media(max-width:600px){body{padding:3vh 10px 0;padding:3dvh 10px 0}.input-dock{padding:10px 16px}.site-footer{font-size:10px}}
/* 0.1.1: selected Midnight Cyan palette; typography remains unchanged. */
:root{--page:#080D16;--bg:#101827;--bar:#172236;--text:#E6EDF7;--muted:#96A8C1;--accent:#62DBF5;--line:#30415B}body{background:var(--page)}.console{border-color:var(--line)}.window-bar{background:var(--bar);border-color:var(--line)}.window-controls i{background:var(--bg);border-color:var(--muted)}.site-footer{max-width:1040px;flex-direction:row;justify-content:space-between;gap:12px;text-align:left}.site-footer .keyboard-help,.site-footer .copyright{margin:0;font-size:11px;line-height:1.5}.copyright{flex-shrink:0;text-align:right}.keyboard-help{min-width:0}.site-footer .keyboard-help span{padding:0 5px}@media(max-width:600px){.site-footer{flex-direction:row;gap:8px;padding:0}.site-footer .keyboard-help,.site-footer .copyright{font-size:9px}.site-footer .keyboard-help span{padding:0 2px}}
/* 0.1.2: persistent pointer focus and cyber window chrome. */
#command,#command:focus,#command:focus-visible{border:0;outline:none;box-shadow:none}.window-status{color:var(--accent);white-space:nowrap;font-size:11px;letter-spacing:.04em}.window-controls i{border:0;box-shadow:0 0 7px currentColor}.window-controls i:nth-child(1){color:#FF4F78;background:#FF4F78}.window-controls i:nth-child(2){color:#FFAA45;background:#FFAA45}.window-controls i:nth-child(3){color:#4DE6AA;background:#4DE6AA}@media(max-width:600px){.window-status{font-size:9px}.window-bar{gap:6px}.window-controls{gap:5px}.window-bar>span:nth-child(2){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}
/* 0.1.3: static vector scanlines across the entire viewport. */
body::after{content:"";position:fixed;inset:0;z-index:10;background-image:url("../icons/scanlines.svg");background-repeat:repeat;background-size:4px 4px;pointer-events:none;user-select:none}.skip-link:focus{z-index:11}
/* 0.2.0: SnakeEat module. */
.window-body{position:relative}.snake-panel{position:absolute;inset:0;padding:20px 26px;background:var(--bg);display:flex;flex-direction:column;align-items:center;overflow:auto;z-index:2}.snake-panel[hidden]{display:none}.game-active .input-dock{display:none}.game-active .window-body{overflow:hidden}.game-active .intro,.game-active .terminal{visibility:hidden}.snake-hud{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--accent);font-size:12px;flex-shrink:0}.snake-exit{background:none;border:1px solid var(--line);color:var(--muted);padding:4px 8px;cursor:pointer}.snake-board{position:relative;flex:1;min-height:120px;aspect-ratio:1;max-width:100%;max-height:660px;margin:12px auto;display:flex;align-items:center;justify-content:center}.snake-board canvas{display:block;width:100%;height:100%;object-fit:contain}.snake-message{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#101827e8;text-align:center}.snake-message[hidden]{display:none}.snake-message h2{font-size:clamp(32px,7vw,72px);letter-spacing:-.05em;color:var(--accent);margin:0 0 70px;font-weight:500}.snake-start{font-size:clamp(12px,2vw,18px);animation:breathe 2.4s ease-in-out infinite;margin:0}.snake-guide{font-size:11px;color:var(--muted);margin:0;flex-shrink:0}.snake-controls{display:none;gap:10px;margin-top:8px;flex-shrink:0}.snake-controls button{background:var(--bar);border:1px solid var(--line);color:var(--accent);width:44px;height:40px;touch-action:manipulation}@keyframes breathe{0%,100%{opacity:.25}50%{opacity:1}}@media(pointer:coarse){.snake-controls{display:flex}}@media(max-width:600px){.snake-panel{padding:12px}.snake-hud{font-size:10px}.snake-message h2{margin-bottom:45px}.snake-guide{font-size:9px}}@media(prefers-reduced-motion:reduce){.snake-start{animation:none}}
/* 0.2.1: four-cell map clearance and bottom status row. */
.snake-panel{display:block;padding:0;overflow:hidden}.snake-board{position:absolute;width:var(--board-size,60%);height:var(--board-size,60%);max-width:none;max-height:none;min-height:0;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;aspect-ratio:1;border:2px solid #4AA3FF;box-shadow:0 0 5px #4AA3FF;box-sizing:content-box}.snake-hud{position:absolute;top:12px;left:16px;right:16px;width:auto}.snake-bottom{position:absolute;bottom:14px;left:16px;right:16px;display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:12px;color:var(--accent)}.snake-guide{text-align:right;margin:0}.snake-controls{position:absolute;right:16px;bottom:40px}.snake-score{white-space:nowrap}@media(max-width:600px){.snake-panel{padding:0}.snake-bottom{left:10px;right:10px;font-size:10px;gap:8px}.snake-guide{font-size:8px}.snake-hud{left:10px;right:10px}.snake-controls{right:10px;gap:4px}.snake-controls button{width:32px;height:32px}}
/* 0.2.2: rectangular board and map-aligned footer. */
.snake-board{width:var(--board-width,60%);height:var(--board-height,50%);aspect-ratio:26/22}.snake-bottom{width:calc(var(--board-width,60%) + 4px);left:50%;right:auto;transform:translateX(-50%);box-sizing:border-box}.snake-bottom .snake-guide{min-width:0;overflow-wrap:anywhere}@media(max-width:600px){.snake-bottom{left:50%;right:auto;gap:6px}}
/* 0.2.3: board-attached score/help and automatic status lamp. */
.snake-board{aspect-ratio:38/24}.snake-bottom{top:calc(50% + var(--board-half-height,25%) + 10px);bottom:auto;align-items:flex-start}.snake-mode{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:3px;padding:4px 9px;color:var(--text)}.snake-auto-light{display:inline-block;width:7px;height:7px;border-radius:50%;background:#263b31;box-shadow:none}.snake-mode[data-state="AUTO"] .snake-auto-light{background:#4DFF91;box-shadow:0 0 5px #4DFF91,0 0 10px #4DFF9180}.snake-controls{bottom:12px}@media(max-width:600px){.snake-bottom{top:calc(50% + var(--board-half-height,25%) + 10px);bottom:auto}.snake-mode{padding:3px 7px}}

/* 0.3.2: mouse-independent game rendering. */
.snake-panel{pointer-events:none;contain:layout paint}.snake-board canvas{pointer-events:none;transform:translateZ(0);backface-visibility:hidden}.snake-panel .snake-controls,.snake-panel .snake-exit{display:none}body:has(.game-active)::after{display:none}.snake-panel{background-image:url("../icons/scanlines.svg")}

/* 0.3.3: SVG map rendering */
.snake-map{display:block;width:100%;height:100%;pointer-events:none}.snake-exit-hint{color:var(--muted);font-size:11px}.snake-board{isolation:isolate}
/* 0.3.4: restore the requested Esc button only. */
.snake-panel .snake-exit{display:inline-block;pointer-events:auto}
/* 0.3.7: swap only the requested status and footer positions. */
.snake-hud .snake-exit{order:0}.snake-hud .snake-mode{order:1}.snake-bottom .snake-guide{order:0;text-align:left}.snake-bottom .snake-score{order:1;text-align:right}
/* 0.3.8: uppercase game text; lamp before AUTO label. */
.snake-panel{text-transform:uppercase}.snake-mode{flex-direction:row-reverse}
/* 0.3.9: logo preserves its own letter case. */
.snake-message h2{text-transform:none}
/* 0.4.0: mobile-only controls; desktop selectors stay unchanged. */
.snake-panel.mobile-game{pointer-events:auto}.mobile-game .snake-board{pointer-events:auto;touch-action:manipulation}.snake-panel.mobile-game .snake-controls{display:grid;grid-template-columns:48px 48px 48px;grid-template-rows:48px 48px 48px;gap:5px;position:absolute;left:50%;right:auto;top:calc(50% + var(--board-half-height,25%) + 42px);bottom:auto;transform:translateX(-50%);margin:0}.mobile-game .snake-controls button{width:48px;height:48px;border-radius:12px;background:linear-gradient(#25354b,#142033);border:1px solid #506681;box-shadow:0 3px 0 #080D16;color:var(--text);font-size:18px;padding:0;touch-action:none}.mobile-game .snake-controls button:active{transform:translateY(2px);box-shadow:0 1px 0 #080D16;color:var(--accent)}.pad-up{grid-column:2;grid-row:1}.pad-left{grid-column:1;grid-row:2}.pad-right{grid-column:3;grid-row:2}.pad-down{grid-column:2;grid-row:3}
/* Reserve controller space only on mobile clients. */
.mobile-game .snake-board{top:calc(50% - 85px)}.mobile-game .snake-bottom{top:calc(50% - 85px + var(--board-half-height,25%) + 10px)}.snake-panel.mobile-game .snake-controls{top:calc(50% - 85px + var(--board-half-height,25%) + 42px)}
/* Keep held mobile direction controls free of browser text selection. */
.mobile-game .snake-controls,.mobile-game .snake-controls button{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
/* Reduce only the space above the initial banner to one fifth. */
.window-body{padding-top:6px}.intro>.banner{margin-top:3.6px}
@media(max-width:600px){.window-body{padding-top:4.4px}}
/* One text-row rhythm throughout terminal content; ASCII banners are exempt. */
.window-body{--terminal-row:28px}
.intro{padding-bottom:0}
.intro>p,.intro>.muted,.terminal>.hint,.entry>.echo,.entry>.response:not(.banner){margin:0;font-size:inherit;line-height:var(--terminal-row)}
.terminal>.commands{margin:0;row-gap:0}
.terminal>.commands button{padding-top:0;padding-bottom:0;min-height:var(--terminal-row);line-height:var(--terminal-row)}
.entry{padding-bottom:0}
@media(max-width:600px){.window-body{--terminal-row:44px}}
body.mobile-terminal .window-body{--terminal-row:22px}
/* Mobile terminal keyboard, matching Snake's separate controller buttons. */
.keyboard-toggle{display:flex;align-items:center;gap:7px;min-width:60px;min-height:44px;padding:0 6px;margin-left:-6px;background:none;border:0;cursor:pointer;touch-action:none}
.keyboard-toggle,.mobile-keyboard,.mobile-keyboard button{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.mobile-keyboard{width:100%;max-width:1040px;flex-shrink:0;margin-top:8px;padding:8px;border:1px solid var(--line);border-radius:9px;background:var(--bg)}
.mobile-keyboard[hidden]{display:none}
.keyboard-row{display:flex;justify-content:center;gap:4px;margin-bottom:4px}
.keyboard-row:last-child{margin-bottom:0}
.mobile-keyboard button{min-width:0;flex:1;min-height:44px;padding:0 2px;border-radius:9px;background:linear-gradient(#25354b,#142033);border:1px solid #506681;box-shadow:0 3px 0 #080D16;color:var(--text);font:inherit;font-size:clamp(8px,2.6vw,12px);white-space:nowrap;overflow:hidden;touch-action:none}
.mobile-keyboard .key-space{flex:2}
.mobile-keyboard button.key-held,.mobile-keyboard button:active,.mobile-keyboard button[aria-pressed="true"]{transform:translateY(2px);box-shadow:0 1px 0 #080D16;color:var(--accent)}
body.keyboard-open .console{flex-basis:calc(90dvh - var(--soft-keyboard-height,252px));min-height:160px}
body.keyboard-open{overflow-y:auto}
body.mobile-terminal #terminal-form{position:relative}
body.mobile-terminal #command{caret-color:transparent;color:transparent;-webkit-text-fill-color:transparent}
body.mobile-terminal #command::placeholder{color:transparent;-webkit-text-fill-color:transparent}
.mobile-input-display{position:absolute;z-index:2;pointer-events:none;overflow:hidden;color:var(--text);white-space:pre;display:flex;align-items:center}
.mobile-input-display[hidden]{display:none}
.mobile-input-track{display:inline-flex;align-items:center;flex-shrink:0;white-space:pre}
.caret-placeholder{color:var(--muted);opacity:.7}
.mobile-input-caret{display:inline-block;flex:0 0 2px;width:2px;min-height:14px;background:var(--accent);animation:mobile-caret-blink 1s steps(1,end) infinite}
.mobile-input-caret[hidden]{display:none}
@keyframes mobile-caret-blink{0%,49.99%{opacity:1}50%,100%{opacity:0}}
@media(prefers-reduced-motion:reduce){.mobile-input-caret{animation:none}}
