:root{color-scheme:dark;--bg: #0a0b10;--bg-elev: #13151c;--bg-elev-2: #1b1e29;--text: #f5f6fa;--text-dim: rgba(245, 246, 250, .65);--text-faint: rgba(245, 246, 250, .42);--accent: #8b7dff;--accent-2: #22d3ee;--line: rgba(255, 255, 255, .1);--danger: #ff6a75;--ok: #34d399;--touch: 44px;--nav-h: calc(56px + env(safe-area-inset-bottom, 0px)) ;--radius: 14px;--font: "Noto Sans SC", "PingFang SC", "Segoe UI", system-ui, sans-serif}*{box-sizing:border-box}html,body,#app{margin:0;height:100%}body{font-family:var(--font);background:radial-gradient(ellipse at 50% 0%,#161826 0%,var(--bg) 55%);color:var(--text);-webkit-font-smoothing:antialiased}button,input,textarea{font:inherit;color:inherit}a{color:var(--accent);text-decoration:none}.app-shell{min-height:100%;padding-bottom:var(--nav-h)}.app-shell.no-nav{padding-bottom:0}.page{min-height:100%;display:flex;flex-direction:column}.discover-page{height:100%;max-height:100vh;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain}.pull-area{display:flex;align-items:flex-end;justify-content:center;overflow:hidden;color:var(--text-faint);font-size:12px;transition:height .12s ease-out}.list-footer{padding:8px 16px 28px;text-align:center;color:var(--text-faint);font-size:12px;min-height:40px}.list-footer .err{color:var(--danger)}.page-header{position:sticky;top:0;z-index:10;padding:12px 16px calc(8px + env(safe-area-inset-top,0px));padding-top:calc(12px + env(safe-area-inset-top,0px));background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}.page-header h1{margin:0;font-size:22px;font-weight:700;letter-spacing:.02em}.page-header p{margin:4px 0 0;color:var(--text-dim);font-size:13px}.tabs{display:flex;gap:6px;padding:10px 16px 0;overflow-x:auto;-webkit-overflow-scrolling:touch}.tab{flex:none;min-height:36px;padding:0 14px;border-radius:999px;border:1px solid transparent;background:transparent;color:var(--text-dim);font-size:14px}.tab.active{background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--text);border-color:color-mix(in srgb,var(--accent) 40%,transparent)}.card-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:14px 16px 24px}.char-card{display:flex;flex-direction:column;border:none;padding:0;border-radius:var(--radius);overflow:hidden;background:var(--bg-elev);text-align:left;min-height:220px;box-shadow:0 8px 24px #00000047}.char-card .cover{aspect-ratio:3 / 4;width:100%;object-fit:cover;background:linear-gradient(160deg,#2a2f42,#12141c)}.char-card .meta{padding:10px 10px 12px}.char-card .title{font-size:14px;font-weight:600;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.char-card .sub{margin-top:4px;font-size:11px;color:var(--text-faint);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.bottom-nav{position:fixed;left:0;right:0;bottom:0;height:var(--nav-h);padding-bottom:env(safe-area-inset-bottom,0px);display:grid;grid-template-columns:1fr 1fr 1fr;background:color-mix(in srgb,var(--bg-elev) 92%,transparent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-top:1px solid var(--line);z-index:40}.bottom-nav a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--text-faint);font-size:11px;min-height:56px}.bottom-nav a.active{color:var(--accent)}.list{display:flex;flex-direction:column}.list-item{display:flex;gap:12px;align-items:center;padding:14px 16px;border-bottom:1px solid var(--line);background:transparent;border-left:none;border-right:none;border-top:none;width:100%;text-align:left;min-height:var(--touch)}.list-item .avatar{width:48px;height:48px;border-radius:50%;object-fit:cover;background:var(--bg-elev-2);flex:none}.list-item .avatar-fallback{display:grid;place-items:center;font-size:16px;font-weight:600;color:#fff;background:color-mix(in srgb,var(--accent) 55%,#5b4bb8)}.list-item .body{min-width:0;flex:1}.list-item .row-top{display:flex;align-items:baseline;gap:8px}.list-item .name{font-size:15px;font-weight:600;min-width:0;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.list-item .time{flex:none;font-size:11px;color:var(--text-faint)}.list-item .preview{margin-top:4px;font-size:13px;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.field{display:flex;flex-direction:column;gap:8px;padding:0 16px}.field label{font-size:13px;color:var(--text-dim)}.field input,.field textarea{min-height:var(--touch);border-radius:12px;border:1px solid var(--line);background:var(--bg-elev);padding:0 14px;color-scheme:dark}.btn{min-height:var(--touch);border:none;border-radius:12px;padding:0 16px;font-weight:600;cursor:pointer}.btn.primary{background:var(--accent);color:#0b0d12}.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--text)}.muted{color:var(--text-dim);font-size:13px}.err{color:var(--danger);font-size:13px}.ok{color:var(--ok);font-size:13px}.empty{padding:48px 24px;text-align:center;color:var(--text-dim)}.room{height:100dvh;display:flex;flex-direction:column;background:var(--bg)}.room-top{display:flex;align-items:center;gap:8px;padding:10px 12px;padding-top:calc(10px + env(safe-area-inset-top,0px));border-bottom:1px solid var(--line);background:var(--bg-elev)}.room-top .back{min-width:var(--touch);min-height:var(--touch);border:none;background:transparent;font-size:22px;line-height:1}.room-top-cover{width:36px;height:48px;object-fit:cover;border-radius:8px;flex:none;background:var(--bg-elev-2)}.room-top-text{min-width:0;flex:1}.room-top-title{font-weight:700;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.room-top-sub{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.room-msgs{flex:1;overflow-y:auto;padding:14px 12px 8px;display:flex;flex-direction:column;gap:12px}.hist-msg{display:flex;flex-direction:column;gap:4px;max-width:min(92%,520px)}.hist-msg.assistant{align-self:flex-start}.hist-msg.user{align-self:flex-end}.hist-meta{display:flex;align-items:flex-start;gap:8px;min-width:0}.hist-msg.user .hist-meta{flex-direction:row-reverse;align-self:flex-end}.hist-meta-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.hist-msg.user .hist-meta-text{align-items:flex-end}.hist-avatar{flex:0 0 auto;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-size:13px;font-weight:600;color:#fff;background:color-mix(in srgb,var(--accent) 55%,hsl(var(--speaker-hue, 265) 40% 42%));-webkit-user-select:none;user-select:none;margin-top:1px;overflow:hidden}.hist-avatar.is-narration{background:color-mix(in srgb,var(--text-faint) 35%,var(--bg-elev-2));color:var(--text-dim);font-weight:500}.hist-avatar-img{object-fit:cover;padding:0;background:var(--bg-elev-2)}.hist-role-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;min-width:0}.hist-role{font-size:12px;font-weight:600;opacity:.9;letter-spacing:.02em}.hist-msg.user .hist-role{text-align:right}.hist-msg.multi-speaker .hist-role{color:hsl(var(--speaker-hue, 210) 55% 68%);opacity:1}.hist-msg.narration .hist-role{color:color-mix(in srgb,#9aa3b5 85%,transparent);font-weight:500}.hist-status{display:flex;flex-wrap:wrap;gap:4px 6px;align-items:center;max-width:min(92vw,420px);font-size:11px}.hist-chip{display:inline-flex;align-items:baseline;gap:3px;max-width:100%;padding:1px 7px;border-radius:999px;font-size:11px;line-height:1.45;color:color-mix(in srgb,var(--text-faint) 70%,hsl(var(--speaker-hue, 210) 30% 65%));background:color-mix(in srgb,hsl(var(--speaker-hue, 210) 35% 50%) 12%,var(--bg-elev));border:1px solid color-mix(in srgb,hsl(var(--speaker-hue, 210) 40% 55%) 22%,transparent)}.hist-chip-k{opacity:.72;font-weight:500}.hist-chip-k:not(:empty):after{content:"："}.hist-chip-v{color:color-mix(in srgb,var(--text-dim) 85%,hsl(var(--speaker-hue, 210) 25% 70%));overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:min(46vw,16em)}.hist-chip.is-relation{background:transparent}.hist-body{padding:11px 14px;border-radius:16px;font-size:15px;line-height:1.55;border:1px solid transparent;background:var(--bg-elev-2);white-space:pre-wrap;word-break:break-word}.hist-msg.assistant .hist-meta+.hist-body{margin-left:38px;border-bottom-left-radius:6px;background:color-mix(in srgb,var(--accent) 14%,var(--bg-elev));border-color:color-mix(in srgb,var(--accent) 22%,transparent)}.hist-msg.assistant.multi-speaker .hist-body{background:color-mix(in srgb,hsl(var(--speaker-hue, 210) 45% 55%) 16%,var(--bg-elev));border-color:color-mix(in srgb,hsl(var(--speaker-hue, 210) 45% 55%) 28%,transparent)}.hist-msg.assistant.narration{align-self:center;max-width:min(88%,480px)}.hist-msg.assistant.narration .hist-body{margin-left:0;margin-right:0;text-align:center;max-width:100%;background:color-mix(in srgb,#8b93a7 8%,transparent);border-color:color-mix(in srgb,#8b93a7 22%,transparent);border-style:dashed;color:var(--text-dim);font-size:13px;font-style:italic;border-radius:12px}.hist-msg.user .hist-body{background:color-mix(in srgb,var(--accent-2) 22%,var(--bg-elev-2));border-color:color-mix(in srgb,var(--accent-2) 28%,transparent);border-bottom-right-radius:6px}.typing{align-self:flex-start;margin-left:38px}.bubble{max-width:82%;padding:10px 12px;border-radius:16px;font-size:15px;line-height:1.5;white-space:pre-wrap;word-break:break-word}.bubble.assistant{align-self:flex-start;background:var(--bg-elev-2);border-bottom-left-radius:6px}.bubble.user{align-self:flex-end;background:color-mix(in srgb,var(--accent) 55%,#3a2f7a);border-bottom-right-radius:6px}.room-composer{display:flex;gap:8px;padding:10px 12px calc(10px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--line);background:var(--bg-elev)}.room-composer textarea{flex:1;min-height:44px;max-height:120px;resize:none;border-radius:12px;border:1px solid var(--line);background:var(--bg);padding:10px 12px;color-scheme:dark}.room-composer .send{min-width:72px}.sheet-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;z-index:50;display:flex;align-items:flex-end}.sheet{width:100%;background:var(--bg-elev);border-radius:18px 18px 0 0;padding:18px 16px calc(18px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:12px}.sheet h2{margin:0;font-size:18px}
