@import url('/approved.css');
/* Runtime additions; the approved room shell and geometry stay in approved.css. */
#login{max-width:390px;margin:12vh auto;padding:32px;background:#202820;border:1px solid #8f977c;color:#eee8d2}#login h1{font-size:28px}#login input{width:100%;min-height:44px;padding:10px;margin:10px 0;color:#f3e8d0;background:#171e19;border:1px solid #7a856e}#login button{width:100%;min-height:44px;background:#d1b17b;color:#202c22;border:0}#login .error,.error{color:#df9a78}#observer-health{font-size:10px;line-height:1.6;white-space:normal}.empty-state{padding:20px;border:1px solid #ffffff14;background:#ffffff04;line-height:1.7}.real-state{font-size:11px;color:var(--green)}.real-state.stale{color:#d7ae77}.form-actions{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.request-card textarea,.note-input{width:100%;min-height:100px;color:#eee8d8;background:#171d19;border:1px solid #657260;padding:12px}.delivery-stamp{display:inline-block;border:2px double #a2b18b;padding:4px 9px;margin-top:10px;color:#b7c09f}.log-lines{white-space:pre-wrap;word-break:break-word;max-height:48dvh;overflow:auto;font:12px/1.7 ui-monospace,monospace;user-select:text}.workstation-hit{position:absolute;z-index:60000;display:block;border:1px solid transparent;background:transparent;min-width:24px;min-height:24px;padding:0;cursor:pointer;border-radius:3px}.workstation-hit:hover,.workstation-hit:focus-visible,.workstation-hit.hint-active{border-color:#e9ce8c;box-shadow:0 0 0 2px #e9ce8c30;background:#e1c57f0c}.workstation-plate{font:8px/1.3 ui-monospace,monospace;white-space:nowrap;color:#e8d9b1;background:#21342be6;border:1px solid #6b7961;padding:2px 4px;position:absolute;left:50%;transform:translateX(-50%);bottom:-5px;pointer-events:none}.interaction-hint{position:fixed;z-index:200000;max-width:min(290px,calc(100vw - 20px));background:#172b28;border:3px double #c3b386;color:#f0e6cc;padding:10px 12px;box-shadow:4px 4px #09151299;font:12px/1.5 ui-monospace,monospace;pointer-events:none}.interaction-hint button{pointer-events:auto;display:block;min-height:44px;width:100%;margin-top:7px;background:#d1b17b;color:#203429;border:1px solid #e6d7aa}.interaction-hint small{display:block;color:#b5bea5;margin-top:4px}.scene-character[role=button]{cursor:pointer;outline:none}.scene-character[role=button]:hover,.scene-character[role=button]:focus-visible{filter:drop-shadow(1px 0 #ffe0a1) drop-shadow(-1px 0 #ffe0a1)}.hotspot{cursor:pointer}.scene-live-label{color:var(--green);font-size:10px;margin-right:8px}#scene-demo-banner{font-size:10px;color:#eac17c;border:1px solid #a87b48;padding:4px 7px}.scene-card .vm-sleeping .character-layer{animation:none}.room-link:focus-visible,.hotspot:focus-visible{outline:2px solid var(--gold);outline-offset:3px}#logout{background:transparent;color:#d3c89e;border:0;min-height:44px}.request-card button,.form-actions button{min-height:44px}button:disabled{opacity:.5;cursor:default}.scene-monitor-counts{position:absolute;left:11%;top:15%;z-index:61000;font:8px ui-monospace,monospace;color:#cce6c8;background:#152f2bde;padding:2px 4px;pointer-events:none}.sheet-dialog-portrait{width:64px;height:80px;image-rendering:pixelated;object-fit:contain;float:left;margin:0 16px 10px 0;background:#354637;border:1px solid #6c7c62}.scene-character .character-signal{pointer-events:none}
@media(max-width:760px){.workstation-hit{min-width:44px;min-height:44px}.workstation-plate{font-size:6px;bottom:-2px}.scene-monitor-counts{font-size:6px}.interaction-hint{font-size:11px}.room-link{min-height:52px}.scene-viewport{overflow:visible}.hotspots{overflow:visible}.detail-drawer{max-width:100vw}.request-card textarea{font-size:16px}}
.workstation-hit,.scene-character[role=button]{pointer-events:auto}.workstation-plate{font-size:10px}.scene-demo-visible{border-color:#bc9458}.demo-label{color:#e3be85;font-size:10px;font-weight:700}
@media(max-width:760px){.workstation-plate{font-size:7px}}
.runtime-volume{width:55px;accent-color:#b6a176;min-height:36px}.scene-character.selected{filter:drop-shadow(1px 0 #ffe0a1) drop-shadow(-1px 0 #ffe0a1)}.person-row{width:100%;text-align:left;background:transparent;border:0;color:inherit}.person-copy{flex:1;min-width:0}.person-copy small{display:block;color:var(--muted);font-size:11px;overflow-wrap:anywhere}.person-state{font-size:10px;color:var(--green)}.drawer-sample-label:before{display:none}.owner-avatar{display:inline-flex;align-items:center;justify-content:center}
@media(max-width:760px){.runtime-volume{display:none}#sound-toggle{display:none}.workstation-hit[data-kind=computer]{min-height:35px}.scene-character[role=button]{touch-action:manipulation}}
.app:not(.sidebar-expanded) .room-link:after,.hotspot:after{display:none!important}.role-row{background:transparent;border-top:0;border-left:0;border-right:0}.role-status{white-space:nowrap}#scene-demo-banner{max-width:180px}@media(max-width:760px){#scene-demo-banner{font-size:8px;max-width:130px}.role-copy strong{font-size:12px}.role-copy small{font-size:11px}}
.workstation-plate{max-width:180px;overflow:hidden;text-overflow:ellipsis}@media(max-width:760px){.workstation-plate{max-width:83px;font-size:6.8px}}
@media(max-width:760px){.workstation-hit[data-kind=computer]{min-height:44px;transform:translateY(-16px)}}
/* The static preview hid mobile hotspots; the live app keeps its touch controls. */
@media(max-width:760px){.hotspots{display:block}}
/* Readable desk plates; full names and job context also open in the tap/focus hint. */
.workstation-plate{font:11px/1.2 ui-monospace,monospace;max-width:160px;white-space:normal;text-align:center;overflow:visible;text-overflow:clip;padding:2px 4px;bottom:-15px;min-width:45px}
.plate-name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere}
.plate-state{display:block;font:9px/1.2 ui-monospace,monospace;overflow-wrap:anywhere;color:#c6d0af}
@media(max-width:760px){.workstation-plate{font-size:10px;width:68px;max-width:68px;bottom:-14px;padding:2px}.plate-state{font-size:9px}}
/* The release train is a miniature set on the existing meeting table. */
.toy-train{position:absolute;left:43.75%;top:40.90909%;width:28.125%;height:22.72727%;z-index:2;pointer-events:none}
.toy-train canvas{display:block;width:100%;height:100%;image-rendering:pixelated;pointer-events:none}
.train-hit{position:absolute;inset:0;width:100%;height:100%;min-width:44px;min-height:44px;padding:0;background:transparent;border:1px solid transparent;border-radius:0;pointer-events:auto}
.train-hit:hover,.train-hit:focus-visible,.train-hit.hint-active{outline:1px solid #d5bc83;outline-offset:2px;background:#e9d6a00a}
.train-caption{position:absolute;top:101%;left:50%;transform:translateX(-50%);padding:3px 5px;background:#253d33f5;border:1px solid #8b926c;font:10px/1.2 ui-monospace,monospace;color:#e7d9b4;white-space:nowrap}
.train-letter{border:2px double #a99c70;background:#27382f;padding:12px;margin:10px 0}.train-letter h3{margin:0 0 8px}.gate-list{list-style:none;padding:0}.gate-list li{display:flex;gap:9px;padding:8px 0;border-bottom:1px solid #ffffff16}.gate-signal{width:20px;flex:0 0 20px;text-align:center}.gate-list [data-status=failed]{color:#e6a089}.gate-list [data-status=running]{color:#e0bd78}.gate-list [data-status=passed]{color:#b6cc9f}
@media(max-width:760px){.train-caption{font-size:9px;padding:2px 3px}}
@media(min-width:761px){.workstation-plate{max-width:min(160px,calc(100% + 24px))}}
.interaction-hint{max-height:calc(100dvh - 20px);overflow-y:auto}.interaction-hint strong{display:block;overflow-wrap:anywhere}.interaction-hint small{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}

.room-connection-notice{flex:1 1 300px;grid-column:1 / -1;margin:4px 0;padding:8px 12px;color:var(--muted,#bbbba7);font:12px/1.6 sans-serif;overflow-wrap:anywhere}
@media(min-width:1100px){.main-content{grid-template-rows:minmax(0,1fr) auto}.room-connection-notice{font-size:11px;line-height:1.4}}
@media(max-width:760px) and (orientation:portrait){.main-content{grid-template-rows:auto auto auto 59px}}
/* Seated sprites extend below the desk. Keep opaque labels above it, with
   bounded text so long job names cannot cover the worker or another desk. */
.workstation-plate{top:auto;bottom:calc(100% + 3px);width:110px;max-width:160px}
.plate-state{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
@media(max-width:760px){.workstation-plate{width:68px;max-width:68px;bottom:calc(100% + 3px)}}

/* Each list owns its scroll surface; headers and sibling panels stay in view. */
.drawer-header{position:sticky;top:0;z-index:2;background:#242a23;min-width:0}
.drawer-scroll{min-width:0;overflow-x:hidden;scrollbar-gutter:stable;overscroll-behavior:contain}
#drawer-content{min-width:0;overflow-wrap:anywhere}
#drawer-content>h3,.panel-tabs{position:sticky;top:0;z-index:1;background:#242a23;padding:10px 0;margin-top:0}
.tracking-link{display:inline-block;font-size:12px;line-height:1.5;margin:8px 0;overflow-wrap:anywhere}
.task-card h3,.one-line-summary,.role-copy small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;min-width:0}
.text-preview{min-width:0;clear:both}.text-preview p{margin:8px 0;font-size:12px;line-height:1.6}
.text-preview details{margin:4px 0 12px}.text-preview summary{cursor:pointer;min-height:44px;display:flex;align-items:center;color:#d8c492;font-size:12px}
.text-preview details[open] summary:after{content:' · collapse'}
.role-row{min-width:0;width:100%;max-width:100%}.role-copy{min-width:0;flex:1}.role-status{max-width:95px;white-space:normal;font-size:10px}.activity-time{font-size:10px;color:#b5bea5}
#room-inspector{overflow:hidden;display:none;flex-direction:column;min-height:0}
#room-overview{min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-gutter:stable}
#room-overview>.overview-title{position:sticky;top:0;z-index:1;background:#242a23;padding:10px 0;margin:0}
.app.inspector-open #room-inspector{display:flex}
.inspector-top,.inspector-foot{flex-shrink:0}
#observer-health{display:block;max-height:100px;max-width:280px;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin}
#observer-health:before{content:'Observer health';display:block;position:sticky;top:0;background:#242a23;color:#d8c492}
@media(max-width:760px){#observer-health{max-height:58px;max-width:140px}.drawer-header{padding:12px 16px}.drawer-scroll{padding:6px 16px 20px}.drawer-intro{max-height:52px;overflow:auto}.detail-drawer h2{font-size:24px;margin:7px 0}.tracking-link{margin:4px 0}#room-inspector{display:none}.app.inspector-open #room-inspector{display:flex}}
