:root{font-family:"Helvetica Neue",Arial,sans-serif;color:#272b27;background:#f3f1eb;font-synthesis:none;--ink:#272b27;--muted:#72766c;--line:#d7d9cf;--paper:#fafbf6;--accent:#ab672a;--accent-soft:#e9ddc7;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:default;opacity:.42}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:3px solid #ab672a;outline-offset:4px}button{transition:background .2s,transform .2s,border-color .2s}button:not(:disabled):active{transform:translateY(1px)}button:not(:disabled):hover{border-color:#909785}beer-lab{display:block;max-width:1600px;margin:auto;padding:26px 38px 32px}.masthead{display:flex;justify-content:space-between;align-items:center;padding-bottom:20px;border-bottom:1px solid var(--line)}.wordmark{display:flex;gap:10px;align-items:center;font-size:15px;font-weight:650;letter-spacing:-.4px}.wordmark svg{width:23px;height:28px;color:var(--accent)}.edition,.eyebrow,.section-label{font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:1.6px}.edition{color:var(--muted)}.page-head{display:flex;justify-content:space-between;gap:35px;align-items:end;padding:28px 0 30px}.eyebrow{color:var(--accent);margin:0 0 9px}h1{font-size:44px;font-weight:500;line-height:1.05;letter-spacing:-2px;margin:0}.intro{max-width:420px;margin:0;color:#656b60;font-size:14px;line-height:1.55}.lab-grid{display:grid;grid-template-columns:minmax(0,1fr) 314px;gap:22px}.workspace{min-width:0;display:flex;flex-direction:column}.viewport-wrap{position:relative;min-height:465px;aspect-ratio:1.62;background:#e8ebe2;border:1px solid #d6dacf;border-radius:9px;overflow:hidden}robot-viewport{display:block;width:100%;height:100%;position:absolute;inset:0}robot-viewport canvas{display:block;width:100%;height:100%;outline:none;touch-action:none}.viewport-top{position:absolute;top:18px;left:19px;right:19px;display:flex;align-items:center;justify-content:space-between;gap:12px;pointer-events:none}.viewport-title{font-family:var(--mono);font-size:10px;letter-spacing:1px;display:flex;gap:8px;align-items:center}.live-dot{width:6px;height:6px;background:#8d9385;border-radius:50%}.is-running .live-dot{background:var(--accent);animation:breathe 2s ease-in-out infinite}.view-tools{display:flex;gap:5px;pointer-events:auto}.icon-button{height:30px;width:30px;display:grid;place-items:center;border:1px solid #cdd1c5;background:#f8faf2d9;border-radius:5px;color:#535b4b}.icon-button svg{width:15px;height:15px}.viewport-bottom{position:absolute;left:18px;right:18px;bottom:15px;display:flex;justify-content:space-between;align-items:center;gap:10px;pointer-events:none}.view-hint{font-family:var(--mono);font-size:9px;letter-spacing:.2px;color:#67705e}.model-chip{font-size:10px;padding:6px 8px;border:1px solid #d2d5ca;border-radius:4px;background:#f7f8f0dd;color:#565d4d;line-height:1.4;max-width:65%}.loading-scene,.scene-error{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:#e8ebe2;color:#69705f;font-size:13px;padding:30px;text-align:center}.loading-bars{display:grid;grid-template-columns:14px 14px 14px;gap:6px;align-items:end;height:38px}.loading-bars i{display:block;height:25px;background:#cbd0c1;border-radius:2px;animation:load 1s ease-in-out infinite alternate}.loading-bars i:nth-child(2){height:38px;animation-delay:.2s}.loading-bars i:nth-child(3){height:18px;animation-delay:.4s}.scene-error p{max-width:400px;line-height:1.6;margin:0}.scene-error button{padding:9px 15px;background:var(--paper);border:1px solid #cbd0c1;border-radius:4px}.hidden{display:none!important}.phase-track{margin-top:17px;display:grid;grid-template-columns:repeat(5,1fr);gap:5px}.phase-step{position:relative;padding-top:13px;border-top:2px solid #d4d8cd;color:#858b7e;min-width:0}.phase-step.active{border-top-color:var(--accent);color:#8f5726}.phase-step.past{border-top-color:#8e9c7c;color:#5b6651}.phase-number{display:block;font-family:var(--mono);font-size:9px;margin-bottom:5px;letter-spacing:.5px}.phase-name{font-size:11px}.control-panel{background:#fafbf6;border:1px solid #dcdfd3;border-radius:9px;padding:22px;align-self:start}.control-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:20px}.section-label{margin:0;color:#7b8172;font-size:9px}.mode-badge{font-family:var(--mono);font-size:9px;color:#637052;display:flex;align-items:center;gap:6px}.mode-badge:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}.mode-badge.running{color:var(--accent)}.mode-badge.fault{color:#9d493b}.phase-title{margin:0 0 6px;font-size:23px;font-weight:500;letter-spacing:-.8px}.phase-description{font-size:12px;color:#7b8074;line-height:1.5;min-height:36px;margin:0 0 21px}.field-label{display:block;font-size:11px;color:#6d7464;margin-bottom:9px}.segmented{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:3px;background:#ecefe5;border:1px solid #e4e7dd;border-radius:6px;margin-bottom:16px}.segmented button{border:1px solid transparent;background:transparent;border-radius:4px;padding:9px 6px;font-size:11px;color:#6e7564}.segmented button.selected{background:#fffef9;border-color:#d9ddcf;color:#2d3527;box-shadow:0 1px 2px #37472a0c}.start-button{border:1px solid #905824;background:#ad6d31;border-radius:5px;color:#fffaf0;min-height:43px;width:100%;display:flex;align-items:center;justify-content:center;gap:10px;font-size:12px}.start-button:not(:disabled):hover{background:#975c28;border-color:#8c5322}.start-button svg{height:13px;width:13px}.secondary-buttons{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.secondary-buttons button{background:transparent;border:1px solid #d9ddcf;border-radius:5px;color:#6a735e;font-size:11px;padding:9px 6px}.control-divider{border:0;border-top:1px solid #e1e4d9;margin:21px 0}.tune-row{display:flex;justify-content:space-between;align-items:center;margin:0 0 15px;gap:9px}.tune-row .field-label{margin:0}.speed-buttons{display:flex;gap:4px}.speed-buttons button{font-family:var(--mono);font-size:10px;border:1px solid transparent;background:transparent;color:#7b826e;border-radius:4px;padding:6px 8px}.speed-buttons button.selected{border-color:#d3dac6;background:#edf1e5;color:#39482f}.range-head{display:flex;justify-content:space-between;align-items:center}.range-head output{font-family:var(--mono);font-size:10px;color:#6b7343}input[type=range]{display:block;width:100%;margin:11px 0 6px;accent-color:#9b6b37;height:17px}.range-labels{display:flex;justify-content:space-between;font-family:var(--mono);font-size:8px;color:#a2a794}.telemetry{display:grid;grid-template-columns:1fr 1fr;gap:22px 14px}.telemetry dt{font-size:10px;color:#818975;margin-bottom:5px}.telemetry dd{font-family:var(--mono);font-size:18px;letter-spacing:-.8px;margin:0;color:#414d35}.telemetry small{font-size:9px;color:#8b927f;letter-spacing:0}.progress-block{margin-top:20px}.progress-heading{display:flex;justify-content:space-between;font-size:10px;color:#7d8671}.progress-heading output{font-family:var(--mono);color:#4c5941}.progress-track{height:4px;border-radius:2px;background:#e5e9dd;overflow:hidden;margin-top:8px}.progress-fill{background:#a87a42;transform:scaleX(0);transform-origin:left;height:100%;transition:transform .2s}.connection-note{font-size:10px;line-height:1.55;color:#8a907e;margin:16px 0 0}.inline-error{background:#f2e7dc;color:#8c4d2c;border:1px solid #e5ceba;padding:10px 12px;font-size:11px;line-height:1.5;border-radius:5px;margin:0 0 16px}.detail-grid{display:grid;grid-template-columns:minmax(0,1fr) 314px;gap:22px;margin-top:28px}.event-panel{border-top:1px solid var(--line);padding-top:17px}.detail-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.detail-title h2,.apparatus h2{font-size:12px;font-weight:500;margin:0}.detail-title span{font-family:var(--mono);font-size:9px;color:#939b85}.event-list{list-style:none;padding:0;margin:0;max-height:142px;overflow:auto;scrollbar-width:thin}.event-list li{display:grid;grid-template-columns:54px 1fr;gap:12px;padding:8px 0;border-bottom:1px solid #e6e8df;font-size:11px;line-height:1.4;color:#69725d}.event-list time{font-family:var(--mono);font-size:10px;color:#979f8b}.event-empty{font-size:12px;color:#8a927d;line-height:1.6;padding:5px 0}.apparatus{border-top:1px solid var(--line);padding-top:17px}.apparatus dl{margin:15px 0 12px}.apparatus dl div{display:flex;justify-content:space-between;gap:12px;padding:5px 0;font-size:10px}.apparatus dt{color:#929a84}.apparatus dd{margin:0;color:#626e53;text-align:right}.apparatus a{font-size:10px;color:#8a6d49;text-underline-offset:3px}.page-footer{margin-top:25px;padding-top:15px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:12px;font-size:9px;color:#959d87;line-height:1.5}.page-footer strong{font-weight:400;color:#657253}.status-disconnected .mode-badge{color:#9d493b}@keyframes breathe{50%{opacity:.35}}@keyframes load{to{opacity:.3;transform:scaleY(.7)}}@media(min-width:1600px){.viewport-wrap{aspect-ratio:1.72}}@media(max-width:1100px){beer-lab{padding:22px}.lab-grid,.detail-grid{grid-template-columns:minmax(0,1fr) 285px;gap:16px}.control-panel{padding:19px}.viewport-wrap{min-height:460px;aspect-ratio:auto}.intro{max-width:345px}h1{font-size:38px}}@media(max-width:850px){.lab-grid,.detail-grid{grid-template-columns:1fr}.viewport-wrap{aspect-ratio:1.42;min-height:360px}.control-panel{display:grid;grid-template-columns:1fr 1fr;gap:0 30px}.control-overview{grid-row:span 2}.controls-config .control-divider:first-child{margin-top:0}.control-panel>.inline-error{grid-column:1/-1}.detail-grid{gap:25px}.intro{max-width:300px}.page-head{padding:23px 0}.apparatus dl{display:grid;grid-template-columns:1fr 1fr;gap:0 35px}.model-chip{max-width:70%}.connection-note{max-width:280px}.telemetry{gap:15px}}@media(max-width:590px){beer-lab{padding:18px 15px 24px}.masthead{padding-bottom:15px}.edition{font-size:8px;letter-spacing:.6px}.page-head{display:block;padding:22px 0}h1{font-size:37px;margin-bottom:14px}.intro{max-width:none;font-size:12px}.viewport-wrap{min-height:340px;aspect-ratio:1.05}.viewport-top{top:12px;left:12px;right:12px}.viewport-title{font-size:8px;letter-spacing:.5px}.viewport-bottom{left:12px;right:12px;bottom:10px;align-items:end}.view-hint{font-size:8px;max-width:75px;line-height:1.6}.model-chip{font-size:8px;max-width:69%}.phase-track{margin:14px 0 3px;gap:4px}.phase-name{font-size:9px}.phase-number{font-size:8px}.control-panel{display:block;padding:20px}.control-overview{margin-bottom:20px}.phase-description{min-height:0}.control-heading{margin-bottom:15px}.telemetry{grid-template-columns:repeat(4,1fr);gap:8px}.telemetry dd{font-size:17px}.telemetry dt{font-size:9px}.apparatus dl{display:block}.page-footer{display:block}.page-footer span{display:block;margin-top:5px}.phase-title{font-size:22px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
/* Adaptive controller and the actual observation cameras. */
#controller{display:block;width:100%;min-height:41px;border:1px solid #d9ddcf;border-radius:5px;background:#fffef9;color:#3f4b35;padding:8px 30px 8px 10px;font-size:11px;text-overflow:ellipsis}.controller-note{font-size:10px;line-height:1.55;color:#7a826f;margin:9px 0 13px}.inference-card{padding:11px 12px;margin-bottom:18px;border:1px solid #e0e4d6;border-radius:5px;background:#f0f2ea}.inference-heading{display:flex;align-items:center;gap:7px;font-size:10px;color:#7c8275}.inference-heading strong{font-weight:500}.inference-indicator{width:5px;height:5px;border-radius:50%;background:#9ca391;flex-shrink:0}.inference-card.ready .inference-indicator{background:#71844e}.inference-card.selected{border-color:#c9b998}.inference-card p{font-size:10px;line-height:1.5;color:#858c7b;margin:7px 0 10px;overflow-wrap:anywhere}.inference-readings{display:flex;gap:23px;margin:0}.inference-readings div{display:flex;gap:7px;font-family:var(--mono);font-size:9px}.inference-readings dt{color:#909984}.inference-readings dd{color:#576747;margin:0}.decision-line{display:flex;justify-content:space-between;align-items:start;gap:12px;border-top:1px solid #e0e4d6;padding-top:8px;margin-top:9px;font-size:9px;color:#8b9480}.decision-line span:last-child{color:#636f54;text-align:right;overflow-wrap:anywhere}.placement-row{display:flex;gap:10px;align-items:stretch;margin:0 0 16px}.placement-row>button{display:flex;justify-content:space-between;align-items:center;gap:10px;flex:1;min-width:0;border:1px solid #d7ddcb;border-radius:5px;background:#f3f5ed;padding:10px;color:#617050;text-align:left;font-size:10px;line-height:1.4}.placement-row>button span{font-size:17px;line-height:1}.placement-row label{display:flex;flex-direction:column;gap:3px;width:66px;color:#8a947c;font-size:8px;letter-spacing:.5px;text-transform:uppercase}.placement-row input{width:100%;min-height:28px;min-width:0;padding:4px 5px;border:1px solid #d9ddcf;border-radius:4px;color:#626e53;background:#fffef9;font-family:var(--mono);font-size:10px;-moz-appearance:textfield}.placement-row input::-webkit-inner-spin-button,.placement-row input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.camera-panel{margin-top:25px;border-top:1px solid var(--line);padding-top:15px}.camera-panel summary{cursor:pointer;display:flex;align-items:center;gap:9px;font-size:12px;list-style:none;min-height:25px}.camera-panel summary::-webkit-details-marker{display:none}.camera-panel summary:before{content:'+';font-family:var(--mono);color:#7f8971;font-size:13px;width:9px}.camera-panel[open] summary:before{content:'−'}.camera-panel summary:focus-visible{outline:3px solid var(--accent);outline-offset:4px}.camera-status{margin-left:auto;color:#8c957f;font-family:var(--mono);font-size:9px;text-align:right}.camera-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:12px}.camera-feed{margin:0;min-width:0}.camera-image{position:relative;display:grid;place-items:center;background:#e7eae0;border:1px solid #d6dccc;border-radius:6px;overflow:hidden;aspect-ratio:1.6;min-height:135px}.camera-image img{display:block;width:100%;height:100%;position:absolute;inset:0;object-fit:contain;background:#d9ded1}.camera-image img[hidden]{display:none}.camera-image p{font-size:10px;color:#879379;line-height:1.5;margin:20px;text-align:center}.camera-feed figcaption{display:flex;justify-content:space-between;gap:10px;margin-top:8px;font-size:10px;color:#68765a}.camera-feed figcaption span:last-child{font-family:var(--mono);font-size:8px;color:#96a087}.camera-note{font-size:10px;line-height:1.6;color:#929a85;margin:12px 0 0}.camera-unavailable .camera-note{color:#977256}.camera-unavailable .camera-status{color:#997251}@media(max-width:850px){.control-panel{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.control-overview{grid-row:span 2}.camera-image{aspect-ratio:1.7}.camera-grid{gap:15px}}@media(max-width:590px){#controller{font-size:12px;min-height:43px}.controller-note,.inference-card p{font-size:11px}.inference-heading{font-size:11px}.placement-row>button{font-size:11px;min-height:44px}.placement-row label{width:78px}.placement-row input{font-size:12px;min-height:31px}.inference-readings div,.decision-line{font-size:10px}.camera-panel{margin-top:22px}.camera-grid{gap:10px}.camera-image{aspect-ratio:1;min-height:0}.camera-feed figcaption{display:block;font-size:10px}.camera-feed figcaption span{display:block}.camera-feed figcaption span:last-child{margin-top:4px;font-size:8px}.camera-status{font-size:8px}.camera-note{font-size:10px}}
