:root{--bg: #121212;--surface: #1e1e1e;--border: #333;--accent: #ff6b00;--text: #e0e0e0;--muted: #888;--error: #ff4444;--success: #4caf50;--radius: 8px;--slot-1: #4e79a7;--slot-2: #59a14f;--slot-3: #edc949;--slot-4: #b07aa1;--slot-5: #76b7b2}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:Courier New,Courier,monospace;background:var(--bg);color:var(--text);height:100vh;overflow:hidden;display:flex;flex-direction:column;align-items:center}#app{width:100%;padding:2rem 1rem;display:flex;flex-direction:column;align-items:center;flex:1;min-height:0}header{width:100%;max-width:640px;padding-bottom:1.5rem;margin-bottom:0;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.header-left{display:flex;flex-direction:column}.header-right{flex-shrink:0}.btn-session{font-size:.9rem;padding:.5rem 1.5rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.btn-start{border-color:var(--accent);color:var(--accent);animation:pulse-glow 2s ease-in-out infinite}.btn-start:hover{background:var(--accent);color:var(--bg)}.btn-start:disabled{animation:none}.btn-begin{border-color:var(--success);color:var(--success)}.btn-begin:hover:not(:disabled){background:var(--success);color:var(--bg)}.btn-begin:disabled{opacity:.3}.btn-end{border-color:var(--error);color:var(--error)}.btn-end:hover{background:var(--error);color:var(--bg);border-color:var(--error)}.hidden{display:none!important}@keyframes pulse-glow{0%,to{box-shadow:0 0 4px transparent;opacity:.7}50%{box-shadow:0 0 12px var(--accent);opacity:1}}header h1{font-size:1.4rem;font-weight:700;color:var(--accent);letter-spacing:.05em;text-transform:uppercase}.header-user{font-size:.8rem;color:var(--muted);margin-top:.2rem}.usage-banner{width:100%;max-width:640px;background:var(--surface);border:1px solid var(--border);border-top:none;border-radius:0 0 var(--radius) var(--radius);padding:.5rem .75rem;margin-bottom:1.5rem;font-size:.75rem;color:var(--muted);position:relative;flex-shrink:0}.usage-banner .expanded-content{display:block}.usage-banner .collapsed-content,.usage-banner.collapsed .expanded-content{display:none}.usage-banner.collapsed .collapsed-content{display:block;line-height:1.6}.usage-section{margin-bottom:.35rem}.usage-section:last-child{margin-bottom:0}.usage-head{line-height:1.6}.usage-label{color:var(--text);font-weight:700}.usage-detail{display:flex;gap:.75rem;padding-left:1rem;line-height:1.4;font-size:.7rem;color:#666}.usage-detail .tok{white-space:nowrap}.usage-toggle{position:absolute;top:.4rem;right:.4rem;font-family:Courier New,Courier,monospace;font-size:.7rem;padding:0 .35rem;border:1px solid var(--border);border-radius:3px;background:transparent;color:var(--muted);cursor:pointer;line-height:1.4}.usage-toggle:hover{border-color:var(--accent);color:var(--accent)}.main-content{flex:1;display:flex;flex-direction:column;min-height:0;width:min(calc(100vw - 400px),100%);min-width:640px;align-self:center}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;margin-bottom:1rem}.card pre{font-family:Courier New,Courier,monospace;font-size:.85rem;white-space:pre-wrap;word-break:break-word;color:var(--text)}button{font-family:Courier New,Courier,monospace;font-size:.9rem;padding:.5rem 1.25rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);cursor:pointer;transition:border-color .15s,color .15s}button:hover{border-color:var(--accent);color:var(--accent)}button:disabled{opacity:.5;cursor:not-allowed}.btn-accent{border-color:var(--accent);color:var(--accent)}.float-buttons{position:fixed;top:1rem;right:1rem;display:flex;flex-direction:column;gap:.4rem;z-index:100}.btn-float{font-size:.75rem;padding:.3rem .6rem;opacity:.3;transition:opacity .2s,border-color .15s,color .15s;width:100%;text-align:center}.btn-float:hover{opacity:1}.error{color:var(--error);font-size:.85rem;margin-top:.5rem}.login-container{display:flex;flex-direction:column;align-items:center;gap:2rem;padding-top:4rem}.login-container p{color:var(--muted);font-size:.9rem}.examples{display:flex;flex-direction:column;gap:.5rem;max-width:480px;width:100%;margin-top:1rem}.examples>p{font-size:.8rem;color:var(--muted);margin-bottom:.25rem}.example-card{display:flex;flex-direction:column;gap:.2rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:.6rem .75rem;text-decoration:none;transition:border-color .15s}.example-card:hover{border-color:var(--accent)}.example-title{font-size:.85rem;font-weight:700;color:var(--accent)}.example-roster{font-size:.7rem;color:var(--muted)}.character-slots{display:flex;gap:.5rem;margin-bottom:1rem;flex-shrink:0}.slot{flex:1;aspect-ratio:1;border:1px dashed var(--border);border-radius:var(--radius);display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;position:relative;min-height:80px}.slot.empty{opacity:.3;color:var(--muted)}.slot-add-icon{width:32px;height:32px}.slot.filled{border-style:solid;border-width:2px;border-color:var(--slot-color, var(--accent));cursor:pointer;transition:border-color .15s,opacity .15s}.slot.filled:hover{opacity:.7}.slot.filled.locked{cursor:pointer}.slot.filled.locked:hover{opacity:.85}.slot-1{--slot-color: var(--slot-1)}.slot-2{--slot-color: var(--slot-2)}.slot-3{--slot-color: var(--slot-3)}.slot-4{--slot-color: var(--slot-4)}.slot-5{--slot-color: var(--slot-5)}.slot-img{width:100%;height:100%;object-fit:cover;position:absolute;top:0;left:0}.slot-name{position:relative;z-index:1;font-size:.6rem;color:var(--text);text-align:center;background:#000000b3;padding:.15rem .3rem;border-radius:3px;margin-top:auto;margin-bottom:.25rem;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.character-roster{flex:1;overflow-y:auto;min-height:0;scrollbar-width:none}.character-roster::-webkit-scrollbar{display:none}.roster-table{width:100%;border-collapse:collapse}.roster-table tr{border-bottom:1px solid var(--border)}.roster-row{cursor:pointer;transition:background .15s}.roster-row:hover{background:#ff6b0014}.roster-row.disabled{opacity:.35;cursor:default;pointer-events:none}.roster-img-cell{width:36px;padding:.35rem .5rem .35rem 0}.roster-img{width:36px;height:36px;border-radius:50%;object-fit:cover;display:block}.roster-img-placeholder{display:block;width:36px;height:36px;border-radius:50%;background:var(--border)}.roster-name{font-size:.85rem;font-weight:700;color:var(--text);padding:.35rem .5rem;white-space:nowrap}.roster-summary{font-size:.75rem;color:var(--muted);padding:.35rem 0;width:100%}.roster-loading{display:flex;justify-content:center;gap:.4rem;padding:2rem 0}.roster-loading span{width:8px;height:8px;border-radius:50%;background:var(--muted);opacity:.4;animation:typing-bounce 1.2s ease-in-out infinite}.roster-loading span:nth-child(2){animation-delay:.15s}.roster-loading span:nth-child(3){animation-delay:.3s}.char-popup{position:fixed;transform:translateY(-50%);background:var(--surface);border:1px solid var(--accent);border-radius:var(--radius);padding:.6rem .8rem;font-size:.75rem;font-family:Courier New,Courier,monospace;color:var(--text);max-width:260px;z-index:200;opacity:0;pointer-events:none;transition:opacity .2s}.char-popup.visible{opacity:1;pointer-events:auto}.char-popup strong{color:var(--accent)}.ping-tooltip{position:fixed;top:4.5rem;right:1rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:.75rem;font-size:.75rem;font-family:Courier New,Courier,monospace;white-space:pre-wrap;max-width:300px;z-index:100;opacity:0;pointer-events:none;transition:opacity .2s}.ping-tooltip.visible{opacity:1;pointer-events:auto}.ping-tooltip.error{color:var(--error);border-color:var(--error)}.active-roster{position:fixed;top:1rem;left:1rem;display:flex;flex-direction:column;gap:.5rem;z-index:100}.roster-item{width:80px;height:80px;border-radius:var(--radius);border:2px solid var(--slot-color, var(--accent));overflow:hidden;position:relative;cursor:pointer;transition:opacity .15s;background:var(--surface)}.roster-item:hover{opacity:.8}.roster-item-img{width:100%;height:100%;object-fit:cover}.roster-item-name{position:absolute;bottom:0;left:0;right:0;font-size:.55rem;font-weight:700;color:var(--text);text-align:center;background:#000000b3;padding:.15rem .2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-log{flex:1;overflow-y:auto;min-height:0;padding:.5rem 0;display:flex;flex-direction:column;gap:.5rem;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.chat-log::-webkit-scrollbar{width:6px}.chat-log::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.chat-bubble{display:flex;flex-shrink:0;gap:0;border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);overflow:hidden}.bubble-bar{width:6px;flex-shrink:0;background:var(--bubble-color, var(--accent))}.bubble-body{padding:.5rem .75rem;min-width:0;flex:1}.bubble-name{font-size:.75rem;font-weight:700;color:var(--bubble-color, var(--accent));margin-bottom:.2rem}.bubble-text{font-size:.8rem;color:var(--text);white-space:pre-wrap;word-break:break-word;line-height:1.5}.chat-input-area{flex-shrink:0;display:flex;gap:.5rem;padding-top:.75rem;border-top:1px solid var(--border);align-items:flex-end;flex-wrap:wrap}.char-count{display:none;width:100%;font-size:.65rem;color:var(--muted);text-align:right;order:-1;padding-bottom:.15rem}.char-count.warn{color:var(--error)}.chat-input-area textarea{flex:1;font-family:Courier New,Courier,monospace;font-size:.85rem;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);padding:.5rem .75rem;resize:none;min-height:2.4rem;max-height:6rem;line-height:1.4;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.chat-input-area textarea::-webkit-scrollbar{width:6px}.chat-input-area textarea::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.chat-input-area textarea:focus{outline:none;border-color:var(--accent)}.chat-input-area textarea::placeholder{color:var(--muted)}.btn-send{align-self:flex-end;border-color:var(--accent);color:var(--accent);font-size:.8rem;padding:.35rem .75rem}.btn-send:hover:not(:disabled){background:var(--accent);color:var(--bg)}.btn-pass{align-self:flex-end;font-size:.8rem;padding:.35rem .75rem;color:var(--muted);border-color:var(--border)}.btn-pass:hover:not(:disabled){border-color:var(--muted);color:var(--text)}.round-separator{flex-shrink:0;height:1px;background:var(--border);margin:.5rem 2rem}.typing-indicator{display:flex;flex-shrink:0;gap:0;border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);overflow:hidden}.typing-dots{display:flex;gap:.3rem;padding:.6rem .75rem;align-items:center}.typing-dots span{width:6px;height:6px;border-radius:50%;background:var(--typing-color, var(--text));opacity:.4;animation:typing-bounce 1.2s ease-in-out infinite}.typing-dots span:nth-child(2){animation-delay:.15s}.typing-dots span:nth-child(3){animation-delay:.3s}@keyframes typing-bounce{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}.btn-mode{font-size:.65rem;padding:.2rem .4rem;color:var(--muted);border-color:var(--border);align-self:flex-end;letter-spacing:.05em;font-weight:700}.btn-mode:hover:not(:disabled){border-color:var(--muted);color:var(--text)}@media(max-width:840px){#app{padding:1rem .5rem}header,.usage-banner{max-width:100%}.main-content{width:100%;min-width:0}.active-roster{display:none}.float-buttons{position:static;flex-direction:row;justify-content:flex-end;gap:.4rem;padding-bottom:.5rem;width:100%;max-width:640px}.btn-float{opacity:.6}}
