*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;font-family:Arial,Helvetica,sans-serif;color:#23322e;letter-spacing:0}body{background:#edf1ee}button,a,input,select{touch-action:manipulation}button,a{-webkit-tap-highlight-color:transparent}button,select{font:inherit}button{border:1px solid #cbd3ce;border-radius:6px;background:#f9fbf9;color:inherit;cursor:pointer;min-height:36px;padding:8px 12px;display:inline-flex;align-items:center;justify-content:center;gap:7px;transition:background .15s,border-color .15s}button:hover{background:#e0e9df;border-color:#819788}button:disabled{opacity:.45;cursor:default}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid #44785a;outline-offset:4px}a{color:inherit;text-decoration:none}button img,a img{width:17px;height:17px;flex:none}#app{height:100dvh;min-height:650px;position:relative;overflow:hidden}#stage{position:absolute;inset:0}#scene{display:block;width:100%;height:100%;touch-action:none}header{position:absolute;left:36px;right:36px;top:26px;display:flex;align-items:center;justify-content:space-between;gap:16px}.brand{display:flex;align-items:center;gap:12px;font-size:13px;font-weight:700}.brand-mark{width:39px;height:39px;border:1px solid #425a4c;border-radius:50%;display:grid;place-items:center;font-size:23px;font-weight:400}.brand-sub{display:block;font-size:9px;font-weight:400;margin-top:5px}.header-right{display:flex;align-items:center;gap:20px}.primary{background:#284e3b;border-color:#284e3b;color:#fff}.primary:hover{background:#38684e}.primary img{filter:invert(1)}.status{font-size:11px;display:flex;align-items:center;gap:7px}.status:before{content:"";width:6px;height:6px;background:#97a39b;border-radius:50%}.status.live:before{background:#358356}.character-info{position:absolute;left:40px;top:132px;max-width:230px;pointer-events:none}.eyebrow{font-size:10px;font-weight:700;display:flex;gap:25px;align-items:center}.eyebrow span{color:#7e8d83;font-weight:400}h1{font-size:44px;font-weight:400;margin:14px 0 11px;line-height:1.05}#character-detail{font-size:9px;line-height:1.6;margin:0;color:#64736a}.character-nav{display:flex;gap:8px;margin-top:22px;pointer-events:auto}.icon{width:38px;height:38px;min-height:38px;padding:0}.small{width:28px;height:28px;min-height:28px;background:transparent;border-color:transparent}.small img{width:15px;height:15px}#expression-panel{position:absolute;right:36px;top:125px;width:224px;max-height:calc(100% - 370px);overflow:auto;scrollbar-width:thin}.panel-title{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #cdd6cf;padding-bottom:11px;margin-bottom:15px}h2{font-size:14px;font-weight:500;margin:0}.presets{display:grid;grid-template-columns:1fr 1fr;gap:6px}.presets button{font-size:11px;min-height:31px;padding:6px}.selected{background:#dce8d7;border-color:#76946c;color:#2a5130}.sliders{margin:20px 0 7px}label{display:block;font-size:11px;margin:0 0 17px}output{float:right;color:#78887b;font-size:10px;font-variant-numeric:tabular-nums}input[type=range]{appearance:none;display:block;width:100%;height:3px;background:#c8d3c9;margin:12px 0 0;accent-color:#557e47;cursor:pointer}input[type=range]::-webkit-slider-thumb{appearance:none;width:11px;height:11px;border-radius:50%;background:#557e47;border:2px solid #edf1ee;box-shadow:0 0 0 1px #557e47}details{border-top:1px solid #cdd6cf;border-bottom:1px solid #cdd6cf;padding:12px 0;font-size:11px}summary{cursor:pointer}summary span{float:right;color:#839287}select{display:block;margin:12px 0;width:100%;font-size:10px;padding:8px 4px;background:#f7faf7;border:1px solid #cbd3ce;border-radius:4px}.channel-value{margin:12px 0 4px}.panel-actions{display:flex;gap:6px;margin-top:12px;flex-wrap:wrap}.panel-actions button{padding:5px 8px;font-size:10px;min-height:30px;flex:1}.panel-actions img{width:13px;height:13px}.view-tools{position:absolute;left:40px;right:36px;bottom:190px;display:flex;justify-content:space-between;gap:12px;pointer-events:none}.view-tools>*{pointer-events:auto}.segmented{display:flex;gap:3px;background:#e5ebe5;border:1px solid #ccd6ca;padding:3px;border-radius:7px}.segmented button{font-size:10px;border:0;background:transparent;min-height:30px;padding:5px 10px}.segmented button.selected{background:#fff;box-shadow:0 1px 3px #29473215}.segmented img{width:14px;height:14px}.tool-group{display:flex;gap:6px}#panel-toggle{display:none}footer{position:absolute;bottom:0;left:0;right:0;padding:17px 40px 15px;background:#f7f9f4eF;border-top:1px solid #cfd8cc;backdrop-filter:blur(14px)}.roster-heading{display:flex;justify-content:space-between;align-items:center;font-size:9px;font-weight:600;margin-bottom:10px}.roster-heading a{display:flex;align-items:center;gap:5px;font-weight:400}.roster-heading img{width:13px;height:13px}#roster{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:9px;max-width:960px;margin:auto}.character{height:86px;border:1px solid #d6ddd2;background:#edf1e9;padding:0 6px 6px;display:flex;flex-direction:column;justify-content:flex-end;gap:0;overflow:hidden;border-radius:6px;position:relative}.character img{width:100%;height:65px;object-fit:contain;mix-blend-mode:multiply}.character span{font-size:10px;line-height:14px}.character.selected{border-color:#688557;background:#e0eacf;box-shadow:inset 0 0 0 1px #688557}.character.selected:after{content:"";position:absolute;right:7px;top:7px;background:#628445;width:5px;height:5px;border-radius:50%}.footer-meta{display:flex;justify-content:space-between;font-size:8px;color:#7b897d;margin-top:12px}.meta-divider{margin:0 9px;color:#bdc7b9}#loading{position:absolute;top:86px;left:50%;transform:translateX(-50%);font-size:11px;color:#42594a;background:#f9fbf5ed;border:1px solid #cbd4c7;padding:8px 15px;border-radius:4px}#loading[hidden]{display:none}#notice{position:absolute;bottom:245px;left:50%;transform:translateX(-50%);width:min(90%,440px);background:#fff7ef;color:#743d23;border:1px solid #d8ad8b;border-radius:5px;padding:14px;font-size:12px;line-height:1.5}#camera-preview{position:absolute;left:40px;top:330px;width:150px;aspect-ratio:4/3;object-fit:cover;border:1px solid #bacbbd;border-radius:6px;transform:scaleX(-1)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
@media(min-width:1600px){#expression-panel{right:60px;width:240px}.character-info{left:60px}header{left:56px;right:56px}}
@media(max-height:790px) and (min-width:801px){#expression-panel{top:108px;max-height:calc(100% - 320px)}.character-info{top:120px}.sliders{margin-top:12px}label{margin-bottom:14px}.view-tools{bottom:177px}footer{padding-top:12px;padding-bottom:11px}.character{height:77px}.character img{height:56px}}
@media(max-width:1000px){#expression-panel{right:22px;width:190px}.character-info{left:24px;max-width:160px}h1{font-size:34px}header{left:22px;right:22px}.view-tools{left:24px;right:22px}footer{padding-left:24px;padding-right:24px}.header-right{gap:10px}}
@media(max-width:800px){#app{min-height:580px}header{left:18px;right:18px;top:17px}.brand{font-size:11px;gap:8px}.brand-mark{width:32px;height:32px;font-size:20px}.brand-sub{font-size:8px}.header-right .status{display:none}#camera-toggle{font-size:10px;padding:8px 10px;min-height:33px}.character-info{left:22px;top:92px;max-width:210px}h1{font-size:32px;margin:9px 0 6px}.eyebrow{font-size:8px}#character-detail{font-size:8px}.character-nav{display:none}#expression-panel{display:none;top:auto;bottom:200px;right:18px;background:#f7faf5f5;border:1px solid #becbb8;border-radius:6px;padding:16px;width:240px;max-height:calc(100% - 290px);box-shadow:0 8px 25px #23453216}#expression-panel.open{display:block}#panel-toggle{display:inline-flex}.view-tools{left:18px;right:18px;bottom:159px;gap:7px}.segmented button{padding:4px 7px;font-size:9px}.segmented img{display:none}.tool-group{gap:4px}.tool-group .icon{width:31px;height:34px;min-height:34px}.tool-group .icon img{width:15px;height:15px}#fullscreen{display:none}footer{padding:12px 18px}.roster-heading{font-size:8px}#roster{display:flex;overflow-x:auto;gap:7px;scrollbar-width:none}.character{flex:0 0 70px;height:75px}.character img{height:54px}.character span{font-size:9px}.footer-meta{font-size:7px;margin-top:10px}.meta-divider{margin:0 4px}#camera-preview{top:89px;left:auto;right:18px;width:86px}#loading{top:65px;font-size:9px;max-width:75%;text-align:center}#notice{bottom:209px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
.installation #app{height:100vh;min-height:0}
.installation header,.installation .character-info,.installation #expression-panel,.installation .view-tools,.installation footer,.installation #camera-preview{display:none!important}
.installation #notice{bottom:25px}
#scene-tabs{position:absolute;z-index:2;top:16px;left:50%;transform:translateX(-50%);display:flex;max-width:calc(100% - 24px);border-bottom:1px solid #8baba755;background:#071b20ed}
#scene-tabs[hidden]{display:none}
#scene-tabs button{flex:1 0 auto;min-height:44px;padding:10px 18px;border:0;border-bottom:2px solid transparent;border-radius:0;background:transparent;color:#c5d5d5;font-size:13px;white-space:nowrap}
#scene-tabs button:hover{background:#214347;color:#fff}
#scene-tabs button[aria-selected=true]{border-bottom-color:#d2f38c;color:#eaffbf}
#scene-tabs button:focus-visible{outline:2px solid #d2f38c;outline-offset:-4px}
.installation #swap-cue{top:72px}
@media(max-width:480px){#scene-tabs{top:10px}#scene-tabs button{padding:10px 12px;font-size:12px}}
#camera-retry{position:absolute;left:50%;bottom:100px;transform:translateX(-50%)}
#camera-retry[hidden]{display:none}
#swap-cue{position:absolute;top:8px;left:50%;transform:translateX(-50%);width:104px;height:52px;display:flex;align-items:center;justify-content:space-between;pointer-events:none;color:#57675e}
#swap-cue[hidden]{display:none}#swap-cue img{width:25px;height:25px}.swap-arrow{opacity:0}
#swap-cue[data-state=armed] .swap-arrow{opacity:1}
.swap-progress{position:absolute;bottom:0;left:0;width:100%;height:4px;background:#367a52;transform:scaleX(var(--progress,0));transform-origin:left;transition:transform .08s linear}
#swap-cue{width:144px;height:64px;padding:10px 12px;background:#071b20ed;border:1px solid #e8bd64;border-radius:6px;overflow:hidden}
#swap-cue img{width:30px;height:30px;filter:brightness(0) invert(1)}
#swap-cue .swap-progress{height:5px;background:#e8bd64}
#swap-cue[data-state=armed]{border-color:#d2f38c;background:#234038f5}
#swap-cue[data-state=armed] .swap-progress{background:#d2f38c}
/* Tell the visitor what the ring is waiting for; a silent progress bar reads as broken. */
#swap-cue{height:auto;width:176px;flex-wrap:wrap;row-gap:6px;padding:10px 12px 13px}
#swap-cue::after{flex-basis:100%;text-align:center;font:600 12px/1.2 system-ui,sans-serif;color:#fff;content:'Hold your palm still'}
#swap-cue[data-state=armed]::after{content:'Swipe left or right'}
#camera-preview{object-fit:contain;background:#101413}
#camera-framing{width:min(1100px,calc(100% - 32px));max-height:92dvh;padding:16px;border:1px solid #bacbbd;border-radius:6px;background:#f9fbf9;color:#23322e;overflow:auto}
#camera-framing::backdrop{background:#101413b3}
.framing-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px}
.framing-heading h2{font-size:16px}
#camera-framing canvas{display:block;width:100%;height:auto;max-height:65dvh;object-fit:contain;background:#101413;transform:scaleX(-1)}
.framing-heading h2{margin-right:auto}
#save-trace{width:auto;height:auto;min-width:0;margin-right:10px;white-space:nowrap;padding:6px 10px;font-size:12px;border:1px solid #bacbbd;border-radius:4px;background:#fff;color:#23322e;cursor:pointer}
.framing-readings{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:14px 0 0;font-size:12px}
.framing-readings dt{color:#64736a;margin-bottom:5px}.framing-readings dd{margin:0;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}
.framing-readings [data-state=near-edge],.framing-readings [data-state=outside-frame]{color:#925211}
