:root{--ink:#111814;--muted:#6b766f;--panel:#fffaefdb;--panel-strong:#fffffff0;--line:#11181424;--accent:#e05b36;--green:#2f7d59;--gold:#d9a23d;--shadow:0 28px 90px #28342c2e;--stage-control-safe:clamp(178px, 22vh, 212px);--shell-max-width:1840px;--shell-max-height:820px}*{box-sizing:border-box}html{min-height:100%;overflow-x:hidden}body{min-height:100dvh;color:var(--ink);-webkit-tap-highlight-color:#e05b362e;background:radial-gradient(circle at 18% 12%,#e05b3638,#0000 26rem),radial-gradient(circle at 82% 16%,#2f7d5933,#0000 30rem),linear-gradient(135deg,#fff1d9,#edf4de 55%,#d9ecf0);margin:0;font-family:Microsoft YaHei,Segoe UI,sans-serif;overflow:hidden auto}.skip-link{top:max(8px, env(safe-area-inset-top));left:max(8px, env(safe-area-inset-left));z-index:100;color:#fff;background:var(--green);border-radius:12px;padding:10px 14px;transition:transform .16s;position:fixed;transform:translateY(-160%)}.skip-link:focus-visible{transform:translateY(0)}button,textarea,select,input{font:inherit}button,select,input[type=range]{touch-action:manipulation}button:focus-visible,textarea:focus-visible,select:focus-visible,input:focus-visible,a:focus-visible{outline-offset:3px;outline:3px solid #e05b36b8}.app-shell{width:min(var(--shell-max-width), calc(100vw - 36px));height:min(var(--shell-max-height), calc(100dvh - 36px));grid-template-columns:minmax(680px,1fr) minmax(430px,560px);gap:22px;margin:18px auto;display:grid}.mobile-control-button,.mobile-stage-button{display:none}.stage-card,.control-card{border:1px solid var(--line);background:var(--panel);box-shadow:var(--shadow);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:34px}.stage-card{--stage-inset:clamp(14px, 2.2%, 22px);--stage-chat-side:clamp(18px, 3.6%, 32px);--stage-status-side:clamp(16px, 2.8%, 24px);--stage-chat-bottom:clamp(76px, 11.2%, 92px);--stage-status-bottom:clamp(18px, 3.3%, 24px);position:relative;overflow:hidden}.stage-card:before{content:"";inset:var(--stage-inset);pointer-events:none;background:#ffffff42;border-radius:28px;position:absolute}.live2d-canvas{inset:var(--stage-inset);z-index:1;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;position:absolute}.live2d-canvas.is-dragging{cursor:grabbing}.live2d-canvas canvas{display:block;width:100%!important;height:100%!important}.stage-fallback{z-index:3;border:1px solid var(--line);text-align:center;touch-action:manipulation;background:#ffffffe6;border-radius:24px;flex-direction:column;align-items:center;gap:12px;width:min(420px,100% - 40px);padding:22px;display:flex;position:absolute;top:42%;left:50%;transform:translate(-50%,-50%);box-shadow:0 18px 50px #28342c24}.stage-fallback[hidden]{display:none}.stage-fallback strong{font-size:20px}.stage-fallback span{color:var(--muted);line-height:1.55}.stage-fallback button{background:var(--green);min-height:44px;padding:10px 18px}.drop-overlay{left:var(--stage-chat-side);right:var(--stage-chat-side);top:var(--stage-chat-bottom);bottom:var(--stage-chat-bottom);z-index:10;border:3px dashed var(--green);pointer-events:none;background:#2f7d5926;border-radius:24px;transition:opacity .2s;position:absolute}.drop-overlay[hidden]{opacity:0;display:block!important}.drop-overlay:not([hidden]){opacity:1}.drop-overlay-content{color:var(--green);flex-direction:column;align-items:center;gap:12px;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.drop-overlay-icon{font-size:42px;line-height:1}.drop-overlay-text{letter-spacing:.04em;font-size:clamp(16px,1.6vw,22px);font-weight:900}.live2d-canvas.is-drag-over{cursor:copy}.model-scale-panel{z-index:5;background:#ffffffed;border:1px solid #11181424;border-radius:18px;width:min(260px,100% - 44px);padding:12px 14px;position:absolute;top:18%;left:50%;box-shadow:0 16px 44px #28342c29}.model-scale-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.model-scale-title{color:var(--muted);font-size:13px;font-weight:900}.model-scale-close{width:26px;height:26px;color:var(--ink);cursor:pointer;background:#ffffffdb;border:1px solid #1118141a;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:16px;font-weight:900;line-height:1;display:flex}.model-scale-panel .model-scale-label{color:var(--muted);justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;font-size:13px;font-weight:900;display:flex}.model-scale-panel input{width:100%;accent-color:var(--green)}.model-scale-panel button:not(.model-scale-close){color:#fff;background:var(--green);cursor:pointer;border:0;border-radius:999px;width:100%;margin-top:8px;padding:9px 12px;font-weight:900}.reply-bubble{left:var(--stage-chat-side);z-index:3;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none;background:#ffffffe0;border:1px solid #1118141f;border-radius:24px 24px 24px 10px;width:clamp(200px,32%,310px);min-width:160px;max-width:min(480px,100% - 44px);padding:12px 14px 16px;transition:box-shadow .15s;position:absolute;top:clamp(118px,22%,170px);box-shadow:0 18px 52px #28342c21}.reply-bubble.is-dragging{cursor:grabbing;box-shadow:0 22px 64px #28342c38}.reply-bubble-header{pointer-events:auto;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.reply-bubble-header span{color:var(--muted);font-size:12px;font-weight:900}.reply-bubble-controls{gap:4px;display:flex}.reply-bubble-controls button.bubble-font-btn{width:36px;height:36px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #1118141a;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:11px;font-weight:900;line-height:1;display:flex}.reply-bubble-controls button.bubble-font-btn:hover{color:var(--ink);background:#2f7d591f}.reply-bubble p{pointer-events:none;overflow-wrap:anywhere;margin:0;font-size:clamp(13px,1.05vw,17px);font-weight:800;line-height:1.5}.reply-bubble.is-thinking p{letter-spacing:.14em;font-size:28px}.bubble-resize-handle{cursor:nwse-resize;opacity:0;pointer-events:auto;width:16px;height:16px;transition:opacity .15s;position:absolute;bottom:0;right:0}.bubble-resize-handle:after{content:"";border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);width:8px;height:8px;position:absolute;bottom:4px;right:4px}.reply-bubble:hover .bubble-resize-handle{opacity:1}.stage-chat-form{left:var(--stage-chat-side);right:var(--stage-chat-side);bottom:var(--stage-chat-bottom);z-index:3;border:1px solid var(--line);background:#ffffffd6;border-radius:24px;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;padding:12px;display:grid;position:absolute;box-shadow:0 18px 52px #28342c1c}.stage-chat-form label{color:var(--muted);font-size:12px;font-weight:900}.stage-chat-form textarea{resize:vertical;width:100%;min-height:48px;max-height:120px;color:var(--ink);font:inherit;background:#ffffffeb;border:1px solid #1118141f;border-radius:18px;outline:none;padding:10px 12px;line-height:1.5}.stage-chat-form textarea:focus{border-color:#e05b369e;box-shadow:0 0 0 4px #e05b361f}.chat-actions{align-items:center;gap:8px;display:flex}.stage-chat-form button{background:var(--gold);padding:10px 14px}.history-button{width:38px;height:38px;color:var(--ink);border:1px solid var(--line);justify-content:center;align-items:center;padding:0;font-size:21px;display:flex;background:#fffc!important}.status-panel{left:var(--stage-status-side);right:var(--stage-status-side);bottom:var(--stage-status-bottom);z-index:3;border:1px solid var(--line);color:var(--muted);background:#ffffffc7;border-radius:20px;justify-content:space-between;align-items:center;gap:18px;padding:14px 18px;display:flex;position:absolute}.status-panel strong{color:var(--ink)}.control-card{padding:28px;overflow:auto}.control-header{position:relative}.eyebrow{color:var(--green);letter-spacing:.08em;text-transform:uppercase;margin:0 0 10px;font-weight:900}.title-row{align-items:center;gap:10px;display:flex;position:relative}h1{white-space:nowrap;letter-spacing:-.05em;margin:0;font-size:clamp(30px,2.8vw,42px);line-height:1}.help-button{width:30px;height:30px;color:var(--ink);border:1px solid var(--line);background:#ffffffd1;padding:0}.tooltip{z-index:5;border:1px solid var(--line);width:min(360px,80vw);color:var(--muted);opacity:0;pointer-events:none;background:#fffffff5;border-radius:18px;padding:14px 16px;line-height:1.6;transition:opacity .16s,transform .16s;position:absolute;top:40px;left:0;transform:translateY(-6px);box-shadow:0 18px 52px #28342c29}.help-button:hover+.tooltip,.help-button:focus+.tooltip{opacity:1;transform:translateY(0)}h2{margin:0 0 12px;font-size:18px}.info{border:1px solid var(--line);background:var(--panel-strong);border-radius:24px;margin-top:18px;padding:18px}.rate-control{border:1px solid var(--line);background:#ffffffb8;border-radius:24px;margin-top:18px;padding:16px}.rate-control span{color:var(--muted);font-size:13px;font-weight:800}.rate-control{grid-template-columns:auto 1fr auto;align-items:center;gap:12px;display:grid}.rate-control input{width:100%;accent-color:var(--accent)}.rate-control strong{text-align:right;min-width:48px}.grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:18px;display:grid}button{color:#fff;background:var(--ink);cursor:pointer;text-align:center;overflow-wrap:anywhere;border:0;border-radius:999px;justify-content:center;align-items:center;min-width:0;min-height:44px;padding:12px 16px;font-weight:900;line-height:1.25;display:inline-flex}.grid>button:first-child{background:var(--accent)}.grid>button:nth-child(2){background:var(--green)}.grid>button{width:100%;min-height:48px;padding:10px 12px}.side-panel{border:1px solid var(--line);color:var(--ink);background:#ffffffb8;border-radius:24px;margin-top:14px;padding:16px;box-shadow:0 18px 52px #28342c1f}.side-panel header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:12px;display:flex}.side-panel header button{color:var(--ink);border:1px solid var(--line);background:#ffffffc2;flex:none;padding:8px 12px}.side-panel p{color:var(--muted);margin:8px 0 0;line-height:1.6}.action-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.action-list button{background:var(--ink);border-radius:16px;padding:10px 12px}.action-list button.is-active{color:var(--ink);background:#ffe2a6;box-shadow:inset 0 0 0 2px #e05b3673}.voice-list{color:var(--muted);gap:10px;display:grid}.voice-config,.reference-config-fields{gap:14px;display:grid}.reference-config-fields[hidden]{display:none}.voice-config h3{margin:0 0 8px;font-size:14px}.voice-list button{border:1px solid var(--line);width:100%;color:var(--ink);text-align:left;background:#ffffffb8;border-radius:18px;gap:5px;padding:12px 14px;display:grid}.voice-list button.is-active{background:#ffe2a6;box-shadow:inset 0 0 0 2px #2f7d5959}.voice-list strong{font-size:14px}.voice-list span{color:var(--green);font-size:12px;font-weight:900}.voice-list small{color:var(--muted);line-height:1.45}.reference-picker,.reference-text{gap:8px;display:grid}.reference-picker span,.reference-text span{color:var(--muted);font-size:13px;font-weight:900}.reference-picker select,.reference-text textarea{border:1px solid var(--line);width:100%;color:var(--ink);font:inherit;background:#ffffffd6;border-radius:16px;outline:none}.reference-picker select{padding:10px 12px}.reference-text textarea{resize:vertical;min-height:92px;padding:11px 12px;line-height:1.55}.reference-picker select:focus,.reference-text textarea:focus{border-color:#2f7d5980;box-shadow:0 0 0 4px #2f7d591f}.voice-config audio{width:100%}.log-panel pre{color:#f4f0e7;white-space:pre-wrap;background:#151a16;border-radius:18px;max-height:min(42vh,360px);margin:0;padding:14px;line-height:1.6;overflow:auto}.history-list{max-height:min(46vh,390px);color:var(--muted);gap:12px;display:grid;overflow:auto}.history-item{background:#ffffff9e;border:1px solid #1118141a;border-radius:18px;gap:8px;padding:10px;display:grid}.history-meta{color:var(--muted);font-size:12px}.history-bubble{border-radius:15px;max-width:88%;padding:9px 11px;line-height:1.5}.history-bubble.user{color:#fff;background:var(--green);border-bottom-right-radius:5px;justify-self:end}.history-bubble.robot{color:var(--ink);border:1px solid var(--line);background:#ffffffeb;border-bottom-left-radius:5px;justify-self:start}.camera-config,.audio-config{gap:12px;display:grid}.camera-config label,.audio-config label{gap:8px;display:grid}.camera-config label span,.audio-config label span{color:var(--muted);font-size:13px;font-weight:900}.camera-config select,.audio-config select{border:1px solid var(--line);width:100%;color:var(--ink);font:inherit;background:#ffffffd6;border-radius:16px;outline:none;padding:10px 12px}.camera-config select:focus,.audio-config select:focus{border-color:#2f7d5980;box-shadow:0 0 0 4px #2f7d591f}.camera-actions,.audio-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.camera-actions button,.audio-actions button{border-radius:16px;padding:10px 12px}.camera-actions button:first-child,.camera-actions button:nth-child(4),.audio-actions button:first-child,.audio-actions button:nth-child(4){color:var(--ink);border:1px solid var(--line);background:#ffffffd1}.audio-transcript{background:#ffffffb8;border:1px solid #1118141a;border-radius:18px;gap:6px;padding:12px;display:grid}.audio-transcript span{color:var(--muted);font-size:13px;font-weight:900}.audio-transcript strong{color:var(--ink);line-height:1.55}.camera-window{z-index:20;cursor:grab;-webkit-user-select:none;user-select:none;contain:layout paint style;background:#101511;border:1px solid #ffffffeb;border-radius:10px;width:min(360px,100vw - 32px);position:fixed;bottom:26px;right:26px;overflow:hidden;transform:translateZ(0);box-shadow:0 18px 56px #1118143d}.camera-window:active{cursor:grabbing}.camera-window video{width:100%;aspect-ratio:var(--camera-aspect-ratio,16 / 9);object-fit:cover;pointer-events:none;backface-visibility:hidden;background:#101511;display:block;transform:translateZ(0)}.camera-resize-handle{cursor:nwse-resize;width:28px;height:28px;position:absolute;bottom:0;right:0}.audio-window{z-index:20;cursor:grab;-webkit-user-select:none;user-select:none;background:#101511f0;border:1px solid #ffffffeb;border-radius:999px;width:auto;padding:10px;position:fixed;bottom:26px;left:26px;overflow:hidden;box-shadow:0 18px 56px #1118143d}.audio-window:active{cursor:grabbing}.audio-meter{background:#ffffff2e;border-radius:999px;width:14px;height:132px;overflow:hidden}.audio-meter span{border-radius:inherit;width:100%;height:100%;transform:scaleY(var(--audio-level,0));transform-origin:bottom;background:linear-gradient(#ff8370,#ffe08a,#8fe6b7);transition:transform 70ms linear;display:block}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;width:1px;height:1px;margin:-1px;position:absolute;overflow:hidden}dl{gap:10px;margin:0;display:grid}dl div{border-bottom:1px solid var(--line);justify-content:space-between;gap:12px;padding-bottom:10px;display:flex}dt{color:var(--muted)}dd{text-align:right;margin:0;font-weight:800}code{background:#11181414;border-radius:6px;padding:2px 5px}@media (width<=1180px){body{overflow:auto}.app-shell{aspect-ratio:auto;grid-template-columns:1fr;width:calc(100vw - 28px);height:auto;max-height:none}.stage-card{min-height:70vh}.reply-bubble{max-width:calc(100% - 44px);top:18px;left:22px}.stage-chat-form{grid-template-columns:1fr;bottom:100px}.camera-window{width:calc(100vw - 28px);bottom:14px;right:14px}.audio-window{bottom:14px;left:14px}.mobile-control-button{top:max(14px, env(safe-area-inset-top));right:max(14px, env(safe-area-inset-right));z-index:4;background:var(--green);border:1px solid #ffffffe6;justify-content:center;align-items:center;min-height:42px;padding:9px 14px;display:inline-flex;position:absolute;box-shadow:0 10px 30px #1118142e}.mobile-stage-button{min-height:42px;color:var(--ink);border:1px solid var(--line);background:#ffffffd6;justify-content:center;align-items:center;margin-bottom:16px;padding:9px 14px;display:inline-flex}.stage-card,.control-card{scroll-margin-top:max(8px, env(safe-area-inset-top))}}.backend-list{gap:16px;display:grid}.backend-module{background:#287d5a12;border-radius:12px;padding:11px 12px}.backend-module h3{color:#66746d;text-transform:uppercase;letter-spacing:.05em;margin:0 0 8px;font-size:13px}.backend-value{color:#1a4d36;font-size:13px;display:block}.backend-detail{color:#66746d;margin:5px 0 0;font-size:12px;line-height:1.5}.perception-panel{border-color:#287d5a}.perception-content{padding:12px 0}.perception-scene{color:#1a4d36;background:#287d5a14;border-radius:12px;min-height:40px;margin:0 0 10px;padding:10px 12px;font-size:13px;line-height:1.6}.perception-detail{grid-template-columns:1fr 1fr 1fr;gap:8px;margin:0;font-size:12px;display:grid}.perception-detail dt{color:#66746d}.perception-detail dd{color:#17211c;font-weight:700}@media (width<=720px){body{background:linear-gradient(#fce7ef,#f7edf7 55%,#e8f3ee)}.app-shell{gap:0;width:100%;margin:0}.stage-card,.control-card{box-shadow:none;border-left:0;border-right:0;border-radius:0}.stage-card{--stage-inset:8px;--stage-chat-side:max(12px, env(safe-area-inset-left));--stage-status-side:max(12px, env(safe-area-inset-left));height:100dvh;min-height:560px}.stage-card:before{border-radius:24px;inset:8px}.status-panel{top:max(12px, env(safe-area-inset-top));right:max(100px, calc(88px + env(safe-area-inset-right)));border-radius:999px;width:auto;min-width:0;min-height:44px;padding:9px 12px;font-size:12px;bottom:auto}.status-panel span{display:none}.status-panel strong{text-overflow:ellipsis;white-space:nowrap;font-size:0;overflow:hidden}.status-panel strong:after{content:attr(data-mobile-label);font-size:12px}.reply-bubble{top:auto;right:max(12px, env(safe-area-inset-right));bottom:calc(116px + env(safe-area-inset-bottom));overscroll-behavior:contain;cursor:default;touch-action:pan-y;border-radius:18px;width:auto;max-width:none;max-height:132px;padding:11px 13px 14px;overflow-y:auto}.reply-bubble p{font-size:max(16px,1rem);line-height:1.45}.reply-bubble-controls button.bubble-font-btn{width:44px;height:44px;font-size:13px}.bubble-resize-handle{display:none}.stage-chat-form{bottom:calc(16px + env(safe-area-inset-bottom));border-radius:18px;grid-template-columns:minmax(0,1fr) auto;gap:8px;padding:8px}.stage-chat-form>label{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.stage-chat-form textarea{resize:none;border-radius:14px;min-height:46px;max-height:96px;padding:11px 12px;font-size:max(16px,1rem)}.chat-actions{gap:6px}.stage-chat-form button{min-width:48px;min-height:46px;padding:10px 12px}.history-button{width:46px;height:46px}.control-card{padding:24px max(16px, env(safe-area-inset-right)) calc(28px + env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));background:#ffffffe6;overflow:visible}h1{white-space:normal;text-wrap:balance;font-size:30px}.grid{grid-template-columns:repeat(2,minmax(0,1fr))}.grid button,.side-panel button,.camera-actions button,.audio-actions button{min-height:48px}.side-panel{overflow-wrap:anywhere;overscroll-behavior:contain;box-shadow:none;border-radius:16px}.perception-detail{grid-template-columns:1fr}.camera-window{right:max(12px, env(safe-area-inset-right));bottom:calc(12px + env(safe-area-inset-bottom));left:max(12px, env(safe-area-inset-left));width:auto;max-height:38dvh}.audio-window{left:max(12px, env(safe-area-inset-left));bottom:calc(12px + env(safe-area-inset-bottom))}}@media (width<=380px){.mobile-control-button{right:max(10px, env(safe-area-inset-right));min-width:76px;padding-inline:12px}.status-panel{left:max(10px, env(safe-area-inset-left));right:max(94px, calc(84px + env(safe-area-inset-right)))}.reply-bubble,.stage-chat-form{left:max(10px, env(safe-area-inset-left));right:max(10px, env(safe-area-inset-right))}.stage-chat-form button{padding-inline:10px}.control-card{padding-inline:max(12px, env(safe-area-inset-right))}}@media (width<=340px){.grid,.action-list,.camera-actions,.audio-actions{grid-template-columns:1fr}}@media (height<=600px) and (orientation:landscape) and (width<=960px){.app-shell{gap:0;width:100%;margin:0}.stage-card{border-left:0;border-right:0;border-radius:0;height:100dvh;min-height:100dvh}.reply-bubble{left:max(12px, env(safe-area-inset-left));right:auto;top:max(12px, env(safe-area-inset-top));width:min(34vw,320px);max-height:100px;bottom:auto;overflow-y:auto}.stage-chat-form{left:64vw;right:max(12px, env(safe-area-inset-right));bottom:calc(12px + env(safe-area-inset-bottom))}.status-panel{left:max(12px, env(safe-area-inset-left));right:auto;bottom:calc(12px + env(safe-area-inset-bottom));width:min(34vw,320px);padding:10px 12px;font-size:12px}.reply-bubble-controls,.status-panel span{display:none}}@media (hover:none){.bubble-resize-handle{opacity:0}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
