.portal-dialog{position:fixed;inset:0;margin:0;width:100%;height:100%;max-width:none;max-height:none;border:0;padding:0;background:#080a09;color:#d9d3be;overflow:auto;overscroll-behavior:contain}.portal-dialog::backdrop{background:#080a09}.portal-dialog button{font:inherit;min-height:48px;cursor:pointer}.portal-dialog button:focus-visible{outline:3px solid #ec7d35;outline-offset:6px}.visitor-gateway{min-height:100%;display:flex;flex-direction:column;justify-content:center;padding:clamp(24px,7vw,110px);background:#f3f0e7;color:#323c43;position:relative}.visitor-gateway .welcome{font:600 clamp(15px,2vw,24px)/1.3 monospace;letter-spacing:.15em}.visitor-number{font:700 clamp(76px,20vw,300px)/1 monospace;letter-spacing:-.08em;margin:20px 0 40px;color:#35414a}.visitor-actions{display:flex;gap:20px;flex-wrap:wrap}.visitor-actions button{padding:18px 26px;background:#35414a;color:#f3f0e7;border:1px solid #35414a}.visitor-actions button+button{background:#ed803c;color:#242f35;border-color:#ed803c}.visitor-note{font:12px/1.5 monospace;margin-top:32px;max-width:430px}.portal-tools{position:absolute;z-index:30;right:24px;top:20px;display:flex;gap:14px}.portal-tools button{background:#151a17;border:1px solid #747b6b;color:#e1e3d5;padding:8px 15px}.crt-stage{min-height:100%;display:grid;place-items:center;padding:100px 24px 60px;background:radial-gradient(ellipse at 50% 75%,#22271f 0, #080a09 65%)}.crt-machine{width:min(820px,100%);transform:translateY(28px);opacity:0;transition:opacity 1.2s,transform 1.6s}.portal-dialog[data-phase=ready] .crt-machine{opacity:1;transform:none}.crt-case{padding:clamp(16px,4vw,46px);border-radius:26px 26px 12px 12px;background:linear-gradient(135deg,#b5ad93,#716f60 60%,#98917b);box-shadow:inset 3px 3px 2px #ded4b5,inset -5px -6px 6px #383b32,0 35px 65px #000}.crt-bezel{padding:18px;border-radius:40px;background:linear-gradient(135deg,#393d32,#111710);box-shadow:inset 4px 6px 12px #070907}.crt-screen{position:relative;overflow:hidden;border-radius:40% / 8%;background:radial-gradient(ellipse,#15241a,#061009);color:#b6d89e;padding:clamp(22px,4vw,48px);min-height:350px;font:clamp(14px,1.7vw,19px)/1.6 monospace;text-shadow:0 0 7px #8bad71;box-shadow:inset 0 0 35px #000,0 0 16px #8aaf6b22}.crt-screen:after{content:'';position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,transparent 0 3px,#0002 3px 4px);box-shadow:inset 0 0 50px #0009}.crt-screen h1{font:inherit;font-weight:bold;letter-spacing:.08em;margin:16px 0}.crt-screen ul{list-style:none;padding:0;margin:22px 0}.crt-screen li{padding:4px 0;color:#839976}.crt-screen li span{float:right;font-size:.75em}.crt-cursor{display:inline-block;animation:cursor 1.1s steps(1) infinite}.crt-chin{display:flex;justify-content:space-between;margin-top:22px;font:12px monospace;letter-spacing:.12em;color:#21291f}.crt-chin i{display:inline-block;width:6px;height:6px;background:#b8ce84;box-shadow:0 0 6px #aec181;border-radius:50%}.crt-base{height:42px;width:65%;margin:auto;background:linear-gradient(#55594c,#96917b);clip-path:polygon(8% 0,92% 0,100% 100%,0 100%)}.crt-keyboard{height:55px;margin:0 auto;width:85%;transform:perspective(300px) rotateX(25deg);border:14px solid #767768;border-radius:7px;background:repeating-linear-gradient(90deg,transparent 0 26px,#1b231f 26px 30px),repeating-linear-gradient(0deg,#a1a28e 0 12px,#222c24 12px 16px);box-shadow:0 25px 40px #000}.portal-freeze{position:fixed;inset:0;z-index:20;pointer-events:none;overflow:hidden}.portal-shard{position:absolute;inset:0;overflow:hidden;transition:transform 1.3s cubic-bezier(.5,0,.8,.4),opacity 1s;will-change:transform; background:#f3f0e7}.portal-facsimile{position:absolute;left:0;width:100%;pointer-events:none}.portal-cracks{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity .5s;filter:drop-shadow(1px 1px 1px #fff)}.portal-dialog[data-phase=crack] .portal-cracks{opacity:1}.portal-dialog[data-phase=break] .portal-shard{transform:translate(var(--dx),var(--dy)) rotate(var(--rot));opacity:0}.portal-dialog[data-phase=off] .crt-screen{animation:collapse .55s ease-in forwards}.portal-dialog[data-phase=off] .crt-machine{opacity:0;transition-delay:.5s}.portal-dialog[data-phase=leaving]{opacity:0;transition:opacity .25s}.portal-active .portable-companion{visibility:hidden!important}.portal-active{overflow:hidden!important}@keyframes cursor{50%{opacity:0}}@keyframes collapse{45%{transform:scaleY(.008);filter:brightness(4)}80%,100%{transform:scale(.001);opacity:0}}@media(max-width:600px){.crt-screen{min-height:330px}.crt-screen li span{float:none;display:block}.crt-bezel{padding:10px}.portal-tools{right:16px;top:16px}.crt-keyboard{height:35px}}@media(prefers-reduced-motion:reduce){.portal-dialog *{animation:none!important;transition-duration:.15s!important}.crt-machine{transform:none}.portal-shard{will-change:auto}}
.portal-dialog[data-phase=ready] .crt-screen{animation:phosphor-warmup 1.1s ease-out both}@keyframes phosphor-warmup{0%{transform:scaleY(.008);filter:brightness(3);opacity:.3}20%{transform:scaleY(.012) scaleX(.96);opacity:.8}35%{transform:scaleY(1.01) translateX(1px);filter:brightness(1.5)}58%{transform:translateX(-1px);filter:brightness(.92)}80%,100%{transform:none;filter:brightness(1)}}
.portal-tools{position:fixed}@media(max-width:600px){.crt-stage{padding-left:12px;padding-right:12px}.crt-case{padding:12px}.crt-screen{padding:20px 16px}}
/* F–01 hardware / coarse raster pass. All styling is scoped to the portal. */
@font-face{font-family:TerminalCells;src:url('assets/terminal-cells.ttf') format('truetype');font-display:swap}
.crt-stage{background:#060706;padding-top:100px;padding-bottom:45px}
.crt-machine{width:min(860px,100%);transition:opacity .18s steps(2),transform .18s steps(2);transform:translateY(6px)}
.crt-case{position:relative;padding:38px 44px 24px;border-radius:12px 14px 6px 6px;background:#33342d;border:2px solid #45463b;border-top:8px solid #4b4c41;border-bottom:12px solid #20231d;box-shadow:inset 5px 0 #3e4035,inset -7px 0 #272a23,2px 24px 30px #000}
.crt-case:before{content:'';position:absolute;left:9px;top:38px;bottom:74px;width:13px;background:repeating-linear-gradient(0deg,#141712 0 3px,#3b3e32 3px 8px)}
.crt-case:after{content:'';position:absolute;right:14px;top:15px;width:5px;height:5px;background:#181b16;border-radius:50%;box-shadow:0 470px #181b16,-800px 0 #181b16}
.crt-bezel{padding:22px 26px 28px;border-radius:45px 45px 52px 52px;background:#171c16;border:3px solid #282d24;box-shadow:inset 8px 12px 14px #080b08,inset -3px -3px #474b3a}
.crt-screen{min-height:400px;padding:36px 34px 40px;border-radius:50% / 8%;background:#030b04;color:#7fd66c;font:20px/1.65 TerminalCells,monospace;text-shadow:1px 0 #74c76688,-1px 0 #74c76655,2px 1px 2px #6abd6280,0 0 8px #6bce5770;box-shadow:inset 0 0 42px 12px #000,0 0 9px #477d3525;transform:perspective(1000px) rotateX(.7deg);letter-spacing:.02em}
.crt-screen:before{content:'';position:absolute;z-index:2;inset:0;pointer-events:none;border-radius:inherit;background:radial-gradient(ellipse at 28% 0%,#b6cbb70b 0,transparent 48%),linear-gradient(115deg,transparent 20%,#d6e1cd04 28%,transparent 33%);box-shadow:inset 12px 0 25px #0008,inset -12px 0 25px #0008}
.crt-screen:after{z-index:3;background:repeating-linear-gradient(0deg,#0005 0 1px,transparent 1px 3px),repeating-linear-gradient(90deg,#0001 0 1px,transparent 1px 3px);box-shadow:inset 0 0 45px #000a}
.crt-screen h1{font:inherit;letter-spacing:inherit;font-weight:normal;margin:0}
.crt-screen p{margin:24px 0}.crt-screen ul{margin:30px 0 24px}.crt-screen li{padding:0;color:inherit}.crt-screen li span{float:none;font:inherit}
.crt-screen .terminal-heading{margin-bottom:28px}.crt-screen .terminal-status{font:inherit;color:#65ab56;margin-top:26px}
.crt-cursor{background:#7fd66c;width:.62em;height:1em;vertical-align:-.1em;box-shadow:0 0 6px #76c45c;animation:cursor 1s steps(1) infinite;color:transparent}
.crt-chin{margin-top:24px;align-items:center;color:#999b85;font:10px/1.3 monospace;letter-spacing:.12em}.crt-chin b{font-weight:normal;border:1px solid #666855;padding:5px 9px;background:#292c24}.crt-chin i{width:5px;height:5px;background:#8bb358;box-shadow:0 0 3px #789542}.crt-hardware{display:flex;gap:14px;align-items:center}.crt-hardware:before{content:'';width:96px;height:15px;background:repeating-linear-gradient(90deg,#141812 0 3px,transparent 3px 6px)}.crt-hardware:after{content:'';width:18px;height:18px;background:#1c2019;border:2px solid #565948;box-shadow:inset 2px 2px #34392b}
.crt-base{height:45px;width:54%;background:#262a21;border-bottom:5px solid #161a13;clip-path:polygon(12% 0,88% 0,100% 100%,0 100%)}
.crt-keyboard{height:64px;width:91%;border:17px solid #3e4135;border-bottom:22px solid #34382c;border-radius:3px;background:repeating-linear-gradient(90deg,transparent 0 23px,#151a12 23px 28px),repeating-linear-gradient(0deg,#686b55 0 11px,#1a2016 11px 16px);box-shadow:0 15px 25px #000;transform:perspective(350px) rotateX(22deg)}
.portal-tools button{border:0;background:transparent;color:#a4b198;font:14px/1.5 TerminalCells,monospace;padding:8px}.portal-tools button:before{content:'['}.portal-tools button:after{content:']'}.portal-tools button:focus-visible{outline:2px solid #93c879;outline-offset:2px}
.portal-dialog[data-phase=ready] .crt-screen{animation:phosphor-start 780ms steps(1,end) both}
@keyframes phosphor-start{0%{background:#baf994;transform:scaleY(.004) scaleX(.7);filter:brightness(4);opacity:.5}14%{background:#93d872;transform:scaleY(.012);filter:brightness(3)}27%{background:#112618;transform:scaleY(.84) translateX(3px);filter:brightness(1.8)}39%{background:#030b04;transform:scaleY(1) translateX(-2px);filter:brightness(.6)}52%{transform:translateX(1px);filter:brightness(1.4)}66%{transform:translateX(-1px);filter:brightness(.85)}80%,100%{transform:perspective(1000px) rotateX(.7deg);filter:brightness(1)}}
@media(max-width:600px){.crt-stage{padding:86px 8px 35px}.crt-case{padding:24px 15px 19px;border-top-width:6px}.crt-case:before{left:3px;width:6px}.crt-bezel{padding:15px 9px 19px;border-radius:28px}.crt-screen{min-height:330px;padding:26px 14px;font-size:15px;line-height:1.8}.crt-screen p{margin:18px 0}.crt-screen ul{margin:24px 0}.crt-hardware{gap:8px}.crt-hardware:before{width:35px}.crt-chin{letter-spacing:.03em;font-size:9px}.crt-keyboard{height:42px;border-width:10px;border-bottom-width:15px}.portal-tools{gap:4px;right:8px}.portal-tools button{font-size:12px}}
@media(prefers-reduced-motion:reduce){.portal-dialog[data-phase=ready] .crt-screen{animation:none;transform:none}.crt-cursor{animation:none}.crt-machine{transition:none}}
.terminal-semantic{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
/* Scuffed moulding and dust, deliberately very low contrast. */
.crt-case{background-color:#33342d;background-image:repeating-linear-gradient(176deg,transparent 0 67px,#b7b79a04 68px,transparent 69px 109px),repeating-linear-gradient(91deg,transparent 0 113px,#00000008 114px,transparent 115px 183px)}
/* Reserve each line's final footprint so typing never resizes the hardware. */
.crt-screen [data-type]{position:relative}
.crt-screen span[data-type]{display:inline-block}
.crt-screen .terminal-semantic{position:static;display:block;width:auto;height:auto;margin:0;overflow:visible;clip-path:none;white-space:normal;opacity:0}
.crt-screen .terminal-typed{position:absolute;inset:0;display:block}
/* Player terminal: real accessible input beneath three decorative raster cells. */
.crt-screen{min-height:440px}.crt-screen button{border:0;border-radius:0;background:none;color:inherit;font:inherit;text-align:left;padding:8px 0;text-shadow:inherit}.crt-screen button:before{content:'> '}.crt-screen button:disabled{opacity:.5;cursor:default}.crt-screen button:focus-visible{outline:2px solid #7fd66c;outline-offset:3px}.initials-line{position:relative;width:7ch;height:2.2em;margin-top:8px}.initials-line input{position:absolute;inset:0;width:100%;height:100%;opacity:0;z-index:1;font-size:20px;cursor:text}.initials-line:focus-within{outline:1px dashed #7fd66c;outline-offset:4px}#initials-cells{display:flex;gap:.4ch;align-items:center;height:100%;pointer-events:none}.initial-cell{width:1.5ch;text-align:center}.initial-cell.is-caret{color:#030b04;background:#7fd66c;animation:cursor 1s steps(1) infinite}#initials-help{font-size:.75em;margin:16px 0}.hub-programs small{display:block;font:inherit;font-size:.7em;color:#81bb72;margin:0 0 8px 3ch}.crt-screen #terminal-content p{margin:22px 0}.crt-screen .terminal-status{font-size:.8em}.crt-screen #playground-module canvas{max-width:100%}@media(max-width:600px){.crt-screen{min-height:420px}.crt-screen #terminal-content{font-size:14px}.crt-screen #terminal-content p{margin:18px 0}}@media(prefers-reduced-motion:reduce){.initial-cell.is-caret{animation:none}}

/* Quiet phosphor and mobile choreography; boot instability ends with connection. */
.boot-line{display:block;min-height:1.65em}.sr-boot{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.portal-dialog[data-terminal=boot] .crt-screen{animation:terminal-sync .7s steps(1) both}
@keyframes terminal-sync{0%{transform:translateX(1px);filter:brightness(.92)}35%{transform:translateX(-1px)}70%{filter:brightness(1.04)}100%{transform:none;filter:none}}
.hub-programs button{width:100%;min-height:48px}.hub-programs button:before{content:''}.hub-programs button:disabled{opacity:.72}.hub-programs small{margin-left:3ch}
@media(max-width:600px){.crt-stage{padding:72px 6px 16px;align-items:start}.crt-case{padding:12px 8px 12px}.crt-bezel{padding:9px 5px;border-radius:20px}.crt-screen{padding:22px 12px;min-height:410px;font-size:16px;line-height:1.65;transform:none;border-radius:20px}.crt-screen #terminal-content{font-size:16px}.crt-screen h1{font-size:16px}.crt-screen .terminal-heading{font-size:14px;margin-bottom:18px}.crt-keyboard{display:none}.crt-base{height:22px}.crt-chin{margin-top:12px}.portal-tools{left:8px;right:8px;justify-content:flex-end;gap:8px;top:8px}.portal-tools button{font-size:13px;min-height:48px}.initials-line{height:48px;width:9ch}.initials-line input{font-size:20px}.crt-screen #terminal-content p{margin:16px 0}.crt-screen .hub-programs{margin:18px 0}.hub-programs small{font-size:13px}.portal-dialog[data-phase=ready] .crt-screen{animation-duration:.4s}}
@media(prefers-reduced-motion:reduce){.portal-dialog[data-terminal=boot] .crt-screen{animation:none;filter:none;transform:none}}

.game-answer{display:block;width:3ch;min-height:48px;background:#030b04;color:#7fd66c;border:1px dashed #7fd66c;border-radius:0;font:20px TerminalCells,monospace;margin:14px 0;padding:6px;text-shadow:inherit}.game-answer:focus-visible{outline:2px solid #7fd66c;outline-offset:3px}.yn-actions{display:flex;gap:32px;flex-wrap:wrap}.yn-actions button{min-width:96px;min-height:48px}

#invitation-form label{display:inline-block}.game-answer{display:inline-block;vertical-align:middle;margin:0 0 0 1ch;border:0;border-bottom:2px solid #7fd66c;caret-color:#7fd66c}.game-answer:focus-visible{outline:1px dashed #7fd66c;outline-offset:2px}.yn-actions{margin-top:22px}
/* The cabinet has one size per viewport; program content scrolls inside it. */
.portal-dialog.portal-dialog:not(.is-world) .crt-machine{width:min(940px,100%)}
.portal-dialog.portal-dialog:not(.is-world) .crt-case{padding:18px 24px 12px}
.portal-dialog.portal-dialog:not(.is-world) .crt-bezel{padding:12px}
.portal-dialog.portal-dialog:not(.is-world) .crt-screen{height:clamp(340px,calc(100dvh - 210px),620px);min-height:0;display:flex;flex-direction:column;padding:24px;box-sizing:border-box}
.portal-dialog.portal-dialog:not(.is-world) #terminal-content,.portal-dialog.portal-dialog:not(.is-world) #playground-module{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain}
.portal-dialog.portal-dialog:not(.is-world) #terminal-content[hidden],.portal-dialog.portal-dialog:not(.is-world) #playground-module[hidden]{display:none}
.portal-dialog.portal-dialog:not(.is-world) .crt-stage{padding:72px 12px 20px;align-items:start}
.portal-dialog.portal-dialog:not(.is-world) .crt-chin{margin-top:12px}
@media(max-width:600px){.portal-dialog.portal-dialog:not(.is-world) .crt-case{padding:8px 4px}.portal-dialog.portal-dialog:not(.is-world) .crt-bezel{padding:6px}.portal-dialog.portal-dialog:not(.is-world) .crt-screen{padding:18px 12px}}
.portal-dialog.portal-dialog:not(.is-world) .crt-stage{grid-template-columns:minmax(0,1fr)}
.portal-dialog.portal-dialog:not(.is-world) .crt-machine{min-width:0;max-width:100%;justify-self:center}

/* Full-scene C64 raster load, isolated from the cabinet and game modules. */
.c64-load{position:absolute;inset:0;min-height:100%;background:#000;display:grid;place-content:center;overflow:hidden;padding:80px 0 55px;pointer-events:none}
.c64-art{position:relative;width:min(100vw,calc((100dvh - 135px)*1.5));aspect-ratio:3/2;overflow:hidden;background:#000}
.c64-strip{position:absolute;left:0;right:0;top:calc(var(--row)*100%/64);height:calc(100%/64 + .5px);overflow:hidden;clip-path:inset(0 100% 0 0);animation:c64-draw 150ms steps(8,end) var(--delay) forwards}
.c64-strip img{position:absolute;width:100%;height:auto;left:0;top:0;transform:translateY(calc(var(--row)*-100%/64));max-width:none}
.c64-art:after{content:'';position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,#0002 0 1px,transparent 1px 4px);animation:c64-colour 4.8s steps(1,end)}
.c64-status{position:absolute;bottom:12px;left:12px;right:12px;text-align:center;font:12px/1.5 monospace;color:#a6c6ac;margin:0}
.portal-dialog[data-phase=loading]>.crt-stage{visibility:hidden}
.portal-dialog[data-phase=loading] .portal-tools{position:fixed;background:#000d;border-radius:4px;max-width:calc(100% - 16px);flex-wrap:wrap}
@keyframes c64-draw{from{clip-path:inset(0 100% 0 0);filter:brightness(1.25)}to{clip-path:inset(0);filter:brightness(1)}}
@keyframes c64-colour{0%,37%,42%,73%,78%,100%{background-color:transparent}39%,75%{background-color:#513c7620}}
@media(prefers-reduced-motion:reduce){.c64-strip{animation:none;clip-path:inset(0)}.c64-art:after{animation:none}}
