/* Nox · Together music space */
#music-board{position:fixed;inset:0;z-index:94;overflow:hidden;background:var(--th-bg);color:var(--th-ink);isolation:isolate}
#music-root{--music-track-rgb:178,164,210;--music-ink:var(--th-ink);--music-soft:color-mix(in srgb,transparent 34%,var(--th-ink));--music-faint:color-mix(in srgb,transparent 62%,var(--th-ink));--music-line:color-mix(in srgb,transparent 78%,var(--th-ink));--music-panel:color-mix(in srgb,var(--th-bg) 72%,transparent);--music-panel-strong:color-mix(in srgb,var(--th-bg) 88%,rgb(var(--music-track-rgb)) 12%);--music-glow:rgba(var(--music-track-rgb),.32);--music-heart-color:var(--danger);position:relative;width:100%;height:100%;opacity:0;transform:scale(1.018);transition:opacity .28s ease,transform .42s cubic-bezier(.2,.75,.2,1);overflow:hidden;background:color-mix(in srgb,var(--th-bg) 86%,rgb(var(--music-track-rgb)) 14%)}
#music-root.visible{opacity:1;transform:scale(1)}
body[data-theme="light"] #music-root{--music-panel:color-mix(in srgb,var(--th-bg) 66%,transparent);--music-panel-strong:color-mix(in srgb,var(--th-bg) 90%,rgb(var(--music-track-rgb)) 10%);--music-soft:color-mix(in srgb,transparent 24%,var(--th-ink));--music-faint:color-mix(in srgb,transparent 50%,var(--th-ink));--music-line:color-mix(in srgb,transparent 70%,var(--th-ink));background:color-mix(in srgb,var(--th-bg) 78%,rgb(var(--music-track-rgb)) 22%)}
.music-backdrop,.music-cover-blur,.music-veil,.music-grain{position:absolute;inset:0;pointer-events:none}
.music-cover-blur{inset:-38px;background-image:var(--music-cover);background-position:center;background-size:cover;filter:blur(34px) saturate(.72);transform:scale(1.1);opacity:.5}
.music-veil{background:radial-gradient(circle at 50% 8%,rgba(var(--music-track-rgb),.22),transparent 38%),linear-gradient(180deg,color-mix(in srgb,var(--th-bg) 54%,transparent),color-mix(in srgb,var(--th-bg) 78%,transparent) 52%,color-mix(in srgb,var(--th-bg) 96%,transparent))}
body[data-theme="light"] .music-veil{background:radial-gradient(circle at 50% 8%,rgba(var(--music-track-rgb),.34),transparent 42%),linear-gradient(180deg,color-mix(in srgb,var(--th-bg) 42%,transparent),color-mix(in srgb,var(--th-bg) 72%,transparent) 55%,color-mix(in srgb,var(--th-bg) 92%,transparent))}
.music-grain{opacity:.085;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.42'/%3E%3C/svg%3E");mix-blend-mode:soft-light}
.music-shell{position:relative;z-index:2;width:min(100%,680px);height:100%;margin:0 auto;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto auto;padding:calc(env(safe-area-inset-top,0px) + 10px) 18px max(env(safe-area-inset-bottom,0px),12px);overflow:hidden}
.music-header{min-height:58px;display:grid;grid-template-columns:48px minmax(0,1fr) 64px;align-items:center;gap:10px}
.music-icon-btn,.music-mode-btn{min-width:44px;min-height:44px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--music-line);background:color-mix(in srgb,var(--music-panel) 88%,transparent);box-shadow:inset 0 1px 0 color-mix(in srgb,transparent 78%,var(--th-ink)),0 10px 30px color-mix(in srgb,transparent 78%,var(--th-bg));backdrop-filter:blur(18px) saturate(135%);-webkit-backdrop-filter:blur(18px) saturate(135%);touch-action:manipulation}
.music-icon-btn svg,.music-mode-btn svg,.music-controls svg,.music-send svg,.music-conversation-sheet svg,.music-queue-drawer svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.music-mode-btn{width:64px;flex-direction:column;gap:1px;border-radius:18px}
.music-mode-btn svg{width:18px;height:18px}
.music-mode-btn span{font-size:9px;color:var(--music-soft);letter-spacing:.08em}
.music-heading{text-align:center;min-width:0;display:flex;flex-direction:column;align-items:center}
.music-heading small{font:600 9px/1.2 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;letter-spacing:.26em;color:var(--music-faint)}
.music-heading strong{max-width:100%;margin-top:3px;font:600 18px/1.2 var(--font-chat);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.music-heading span{max-width:100%;margin-top:2px;font-size:11px;color:var(--music-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.music-bound-mini{max-width:170px;min-height:20px;margin-top:3px;padding:2px 8px;border-radius:999px;display:flex;align-items:center;gap:5px;color:var(--music-faint);background:color-mix(in srgb,var(--music-panel) 76%,transparent);border:1px solid var(--music-line)}.music-bound-mini i{width:5px;height:5px;border-radius:50%;background:var(--music-heart-color);box-shadow:0 0 7px var(--music-heart-color)}.music-bound-mini b{font:500 9px/1.2 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.music-unbound .music-bound-mini{color:var(--music-ink);border-color:color-mix(in srgb,var(--music-heart-color) 46%,transparent)}
.music-presence{min-height:86px;display:grid;grid-template-columns:56px minmax(104px,120px) 56px;justify-content:center;align-items:center;gap:5px;padding:5px 0 8px}
.music-person{display:flex;flex-direction:column;align-items:center;gap:5px;min-width:58px;touch-action:manipulation}
.music-person em{max-width:62px;overflow:hidden;text-overflow:ellipsis;font:500 9px/1 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-style:normal;letter-spacing:.08em;color:var(--music-faint)}
.music-avatar{width:49px;height:49px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(145deg,color-mix(in srgb,var(--th-ink) 12%,transparent),rgba(var(--music-track-rgb),.22));border:1px solid color-mix(in srgb,var(--th-ink) 55%,transparent);box-shadow:inset 0 0 0 3px color-mix(in srgb,var(--th-bg) 82%,transparent),0 12px 36px var(--music-glow);font:600 18px/1 var(--font-chat);background-size:cover;background-position:center}
.music-avatar.has-image{color:transparent}
.music-heartline{position:relative;height:38px;display:block;overflow:visible;opacity:.9}
.music-heartline::before{display:none}
.music-heartline svg{position:absolute;inset:2px 0;width:100%;height:34px;overflow:visible;fill:none;stroke:var(--music-heart-color);stroke-width:1.45;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--music-heart-color) 58%,transparent));stroke-dasharray:none;stroke-dashoffset:0}
.music-heart{position:absolute;z-index:3;left:50%;top:50%;transform:translate(-50%,-50%);width:23px;height:23px;border-radius:50%;display:grid;place-items:center;padding:0 0 1px;color:var(--music-heart-color);background:color-mix(in srgb,var(--th-bg) 82%,transparent);font:400 15px/1 system-ui,-apple-system,sans-serif;text-align:center;text-shadow:0 0 9px var(--music-heart-color)}
.music-heart-dot{position:absolute;z-index:4;left:0;top:calc(50% - 2px);width:5px;height:5px;border-radius:50%;background:var(--music-heart-color);box-shadow:0 0 5px 2px var(--music-heart-color);opacity:0}
.is-playing .music-heart{animation:musicHeartBeat 1.55s ease-in-out infinite}.is-playing .music-heart-dot{opacity:1;animation:musicHeartTravel 2.8s linear infinite}.is-ai-speaking .music-heart{animation-duration:.82s}.is-ai-speaking .music-heartline svg{stroke-width:1.8}
@keyframes musicHeartBeat{0%,56%,100%{transform:translate(-50%,-50%) scale(1)}12%{transform:translate(-50%,-50%) scale(1.18)}22%{transform:translate(-50%,-50%) scale(.96)}31%{transform:translate(-50%,-50%) scale(1.1)}}
@keyframes musicHeartTravel{0%{left:0;opacity:0}8%{opacity:1}92%{opacity:1}100%{left:calc(100% - 5px);opacity:0}}
.music-stage{position:relative;min-height:0;overflow:hidden}
.music-lyrics-view,.music-companion-view{position:absolute;inset:0;transition:opacity .28s ease,transform .34s cubic-bezier(.2,.72,.2,1);min-height:0}
.music-lyrics-view{opacity:1;transform:translateY(0)}
.music-companion-view{opacity:0;transform:translateY(18px);pointer-events:none;display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px}
.is-companion .music-lyrics-view{opacity:0;transform:translateY(-16px);pointer-events:none}
.is-companion .music-companion-view{opacity:1;transform:translateY(0);pointer-events:auto}
.music-lyrics{height:100%;overflow-y:auto;overscroll-behavior:contain;padding:42% 8px 48%;scrollbar-width:none;mask-image:linear-gradient(transparent 0%,rgba(0,0,0,.2) 11%,#000 28%,#000 70%,rgba(0,0,0,.35) 87%,transparent 100%);-webkit-mask-image:linear-gradient(transparent 0%,rgba(0,0,0,.2) 11%,#000 28%,#000 70%,rgba(0,0,0,.35) 87%,transparent 100%)}
.music-lyrics::-webkit-scrollbar{display:none}
.music-lyric-line{display:flex;align-items:center;justify-content:center;width:100%;min-height:62px;padding:11px 7vw;text-align:center;color:var(--music-faint);font:500 clamp(16px,4.4vw,21px)/1.5 var(--font-chat);opacity:.42;filter:blur(.55px);transform:scale(.96);transition:color .42s ease,opacity .42s ease,filter .42s ease,transform .42s cubic-bezier(.18,.75,.24,1);text-shadow:0 6px 24px color-mix(in srgb,transparent 70%,var(--th-bg));touch-action:manipulation}
.music-lyric-line.near{opacity:.68;filter:blur(0);transform:scale(.985)}
.music-lyric-line.active{color:var(--music-soft);opacity:1;filter:none;transform:scale(1.065);font-weight:700;text-shadow:0 0 24px color-mix(in srgb,transparent 52%,var(--th-ink)),0 10px 30px color-mix(in srgb,transparent 60%,var(--th-bg))}
.music-lyric-text{position:relative;display:inline-block;max-width:100%;white-space:pre-line}.music-lyric-line.active .music-lyric-text::after{content:attr(data-text);position:absolute;inset:0;color:var(--music-ink);clip-path:inset(0 calc(100% - var(--lyric-progress,0%)) 0 0);-webkit-clip-path:inset(0 calc(100% - var(--lyric-progress,0%)) 0 0);text-shadow:0 0 18px rgba(var(--music-track-rgb),.55);transition:clip-path .11s linear,-webkit-clip-path .11s linear;white-space:pre-wrap}
.music-lyric-line.far{opacity:.2;filter:blur(1.1px)}
.music-lyrics-hint{position:absolute;left:0;right:0;bottom:4px;text-align:center;font-size:9px;letter-spacing:.12em;color:var(--music-faint);pointer-events:none}
.music-now-card{width:100%;min-height:92px;display:grid;grid-template-columns:64px minmax(0,1fr) 34px;align-items:center;gap:13px;padding:12px 14px;border:1px solid var(--music-line);border-radius:25px;background:linear-gradient(135deg,color-mix(in srgb,var(--th-ink) 8%,transparent),var(--music-panel));box-shadow:inset 0 1px 0 color-mix(in srgb,transparent 82%,var(--th-ink)),0 18px 50px color-mix(in srgb,transparent 72%,var(--th-bg));backdrop-filter:blur(24px) saturate(138%);-webkit-backdrop-filter:blur(24px) saturate(138%);text-align:left}
.music-mini-cover{width:64px;height:64px;border-radius:19px;background-size:cover;background-position:center;box-shadow:0 12px 30px color-mix(in srgb,transparent 58%,var(--th-bg));border:1px solid color-mix(in srgb,transparent 78%,var(--th-ink))}
.music-now-copy{min-width:0;display:flex;flex-direction:column;gap:3px}.music-now-copy small{font:600 9px/1.2 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;letter-spacing:.18em;color:var(--music-faint)}.music-now-copy strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:15px}.music-now-copy em{font-style:normal;color:var(--music-soft);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.music-now-live{height:34px;display:flex;align-items:center;justify-content:center;gap:3px}.music-now-live i{display:block;width:2px;height:8px;border-radius:3px;background:var(--music-soft)}.is-playing .music-now-live i{animation:musicEqualize .92s ease-in-out infinite alternate}.is-playing .music-now-live i:nth-child(2){animation-delay:-.48s;height:17px}.is-playing .music-now-live i:nth-child(3){animation-delay:-.19s;height:12px}.is-playing .music-now-live i:nth-child(4){animation-delay:-.7s;height:20px}@keyframes musicEqualize{to{transform:scaleY(1.7);opacity:.62}}
.music-chat,.music-sheet-chat{min-height:0;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;gap:14px;padding:10px 3px 20px;scrollbar-width:none}.music-chat::-webkit-scrollbar,.music-sheet-chat::-webkit-scrollbar{display:none}
.music-chat-empty{margin:auto;max-width:270px;text-align:center;color:var(--music-faint);padding:22px}.music-chat-empty span{display:block;font:400 34px/1 var(--font-chat);color:var(--music-soft);margin-bottom:12px}.music-chat-empty strong{display:block;color:var(--music-soft);font-size:14px}.music-chat-empty p{margin-top:7px;font-size:11px;line-height:1.55}
.music-chat-message{max-width:min(84%,430px);display:flex;flex-direction:column;gap:5px}.music-chat-message small{font:600 8px/1 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;letter-spacing:.2em;color:var(--music-faint)}.music-chat-message div{padding:11px 15px;border-radius:19px;font:500 14px/1.55 var(--font-chat);white-space:pre-wrap;word-break:break-word;border:1px solid var(--music-line);box-shadow:0 12px 28px color-mix(in srgb,transparent 80%,var(--th-bg));backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.music-chat-message.user{align-self:flex-end;align-items:flex-end}.music-chat-message.user div{background:color-mix(in srgb,var(--th-ink) 88%,transparent);color:var(--th-bg);border-bottom-right-radius:6px}.music-chat-message.assistant{align-self:flex-start}.music-chat-message.assistant div{background:var(--music-panel);color:var(--music-ink);border-bottom-left-radius:6px}
.music-quick{display:none;gap:7px;overflow-x:auto;padding:5px 0 7px;scrollbar-width:none}.music-quick::-webkit-scrollbar{display:none}.music-quick button{flex:0 0 auto;min-height:34px;padding:0 13px;border-radius:999px;border:1px solid var(--music-line);background:var(--music-panel);color:var(--music-soft);font-size:11px;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}
.is-companion .music-quick,.sheet-open .music-quick{display:flex}
.music-deck{position:relative;z-index:8;padding-top:7px;background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--th-bg) 56%,transparent) 20%,color-mix(in srgb,var(--th-bg) 88%,transparent));backdrop-filter:blur(1px);-webkit-backdrop-filter:blur(1px)}
.music-progress-row{display:grid;grid-template-columns:38px minmax(0,1fr) 38px;align-items:center;gap:8px;min-height:40px;font:600 10px/1 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;color:var(--music-soft);font-variant-numeric:tabular-nums}
.music-progress-row span:last-child{text-align:right}
.music-range{--music-progress:0%;position:relative;height:40px;display:flex;align-items:center}.music-range::before,.music-range i{content:'';position:absolute;left:0;right:0;height:4px;border-radius:999px;background:color-mix(in srgb,var(--music-ink) 18%,transparent);pointer-events:none}.music-range i{right:auto;width:var(--music-progress);background:var(--music-ink);box-shadow:0 0 10px var(--music-glow)}.music-range::after{content:'';position:absolute;z-index:1;left:var(--music-progress);top:50%;width:12px;height:12px;border-radius:50%;background:var(--music-ink);box-shadow:0 0 0 4px color-mix(in srgb,var(--music-panel-strong) 72%,transparent),0 0 14px var(--music-glow);transform:translate(-50%,-50%);pointer-events:none}
.music-range input{position:relative;z-index:2;width:100%;height:40px;margin:0;opacity:0;cursor:pointer;touch-action:pan-x}
.music-controls{display:grid;grid-template-columns:1fr 48px 74px 48px 1fr;align-items:center;justify-items:center;min-height:78px;padding:3px 4px}
.music-controls button{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;color:var(--music-ink);touch-action:manipulation}.music-controls .music-side-control{width:44px;height:44px;color:var(--music-soft)}.music-controls .music-side-control:first-child{justify-self:start}.music-controls .music-side-control:last-child{justify-self:end}.music-controls .music-play{width:70px;height:70px;background:var(--music-ink);color:var(--th-bg);box-shadow:0 18px 44px color-mix(in srgb,transparent 64%,var(--th-bg)),0 0 30px var(--music-glow);border:1px solid color-mix(in srgb,transparent 70%,var(--th-ink))}.music-controls .music-play svg{width:29px;height:29px}.music-fill{fill:currentColor!important;stroke:none!important}
.music-composer{display:none;grid-template-columns:42px minmax(0,1fr) 42px;align-items:end;gap:6px;min-height:52px;padding:5px 6px;border:1px solid var(--music-line);border-radius:26px;background:var(--music-panel-strong);box-shadow:inset 0 1px 0 color-mix(in srgb,transparent 82%,var(--th-ink)),0 18px 44px color-mix(in srgb,transparent 72%,var(--th-bg));backdrop-filter:blur(24px) saturate(145%);-webkit-backdrop-filter:blur(24px) saturate(145%)}
.is-companion .music-composer,.sheet-open .music-composer{display:grid}.music-composer textarea{align-self:center;width:100%;height:24px;max-height:92px;resize:none;border:0;padding:2px 4px;line-height:20px;font-size:13px;color:var(--music-ink)}.music-composer textarea::placeholder{color:var(--music-faint)}.music-composer-heart,.music-send{width:42px;height:42px;border-radius:50%;display:grid;place-items:center}.music-composer-heart{font-size:25px;color:var(--music-soft)}.music-send{background:color-mix(in srgb,var(--th-ink) 88%,transparent);color:var(--th-bg)}.music-send svg{width:20px;height:20px}
.music-sheet-mask,.music-queue-mask{position:absolute;inset:0;z-index:9;background:color-mix(in srgb,var(--th-bg) 42%,transparent);opacity:0;pointer-events:none;transition:opacity .25s ease;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.music-conversation-sheet,.music-queue-drawer{position:absolute;z-index:10;left:max(12px,calc((100% - 680px)/2 + 12px));right:max(12px,calc((100% - 680px)/2 + 12px));bottom:calc(max(env(safe-area-inset-bottom,0px),12px) + 155px);height:min(44dvh,420px);display:grid;grid-template-rows:20px auto minmax(0,1fr);padding:0 15px 14px;border:1px solid var(--music-line);border-radius:30px;background:var(--music-panel-strong);box-shadow:0 28px 80px color-mix(in srgb,transparent 48%,var(--th-bg)),inset 0 1px 0 color-mix(in srgb,transparent 78%,var(--th-ink));backdrop-filter:blur(32px) saturate(150%);-webkit-backdrop-filter:blur(32px) saturate(150%);transform:translateY(calc(100% + 180px));opacity:0;pointer-events:none;transition:transform .34s cubic-bezier(.2,.82,.24,1),opacity .25s ease}
.music-sheet-handle{width:36px;height:4px;border-radius:3px;margin:8px auto;background:var(--music-line)}
.music-conversation-sheet header,.music-queue-drawer header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:4px 1px 11px;border-bottom:1px solid var(--music-line)}.music-conversation-sheet header div,.music-queue-drawer header div{min-width:0;display:flex;flex-direction:column;gap:3px}.music-conversation-sheet header small,.music-queue-drawer header small{font:600 8px/1 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;letter-spacing:.22em;color:var(--music-faint)}.music-conversation-sheet header strong,.music-queue-drawer header strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}.music-conversation-sheet header button,.music-queue-drawer header button{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;color:var(--music-soft)}.music-conversation-sheet header svg,.music-queue-drawer header svg{width:18px;height:18px}
.sheet-open .music-sheet-mask,.queue-open .music-queue-mask{opacity:1;pointer-events:auto}.sheet-open .music-conversation-sheet,.queue-open .music-queue-drawer{transform:translateY(0);opacity:1;pointer-events:auto}
.music-queue-drawer{bottom:max(env(safe-area-inset-bottom,0px),12px);height:min(66dvh,600px);grid-template-rows:20px auto auto minmax(0,1fr) auto}
.music-queue-pane{min-height:0;display:flex;flex-direction:column}.music-queue-pane.hidden{display:none}
.music-queue-list{min-height:0;flex:1;overflow-y:auto;padding:10px 0}
.music-song-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px;border-radius:16px}.music-song-row.active{background:color-mix(in srgb,var(--th-ink) 7%,transparent)}.music-song-row.active em{color:var(--music-soft)}
.music-song-main{width:100%;display:grid;grid-template-columns:50px minmax(0,1fr) auto;align-items:center;gap:12px;padding:8px 4px;text-align:left;border-radius:16px}.music-song-main>span{width:50px;height:50px;border-radius:13px;background-size:cover;background-position:center;background-color:color-mix(in srgb,var(--th-ink) 8%,transparent)}.music-song-main div{min-width:0;display:flex;flex-direction:column;gap:4px}.music-song-main strong{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.music-song-main small,.music-song-main em{font-size:10px;font-style:normal;color:var(--music-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.music-song-x{width:34px;height:34px;margin-right:2px;border-radius:50%;display:grid;place-items:center;color:var(--music-faint);font-size:17px;touch-action:manipulation}.music-song-x:active{background:color-mix(in srgb,var(--th-ink) 9%,transparent)}.music-song-plus{color:var(--music-soft);font-size:15px}
.music-fee{display:inline-block;margin-left:6px;padding:1px 5px;border-radius:6px;font:600 8px/1.4 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-style:normal;vertical-align:2px;color:var(--music-soft);border:1px solid var(--music-line);background:color-mix(in srgb,var(--music-panel) 80%,transparent)}
.music-queued-by{color:rgba(var(--music-track-rgb),.95)!important;white-space:normal!important}
.music-queue-tabs{display:grid;grid-template-columns:repeat(5,1fr);gap:5px;padding:9px 1px 3px}.music-queue-tabs button{min-height:34px;border-radius:999px;font-size:11px;color:var(--music-faint);border:1px solid transparent;touch-action:manipulation}.music-queue-tabs button.active{color:var(--music-ink);border-color:var(--music-line);background:color-mix(in srgb,var(--music-panel) 88%,transparent)}
.music-search-form{display:grid;grid-template-columns:minmax(0,1fr) 54px;gap:7px;padding:9px 1px 3px}.music-search-form input{min-height:38px;padding:0 14px;border-radius:999px;border:1px solid var(--music-line);background:color-mix(in srgb,var(--music-panel) 86%,transparent);color:var(--music-ink);font-size:13px}.music-search-form input::placeholder{color:var(--music-faint)}.music-search-form button{min-height:38px;border-radius:999px;border:1px solid var(--music-line);background:color-mix(in srgb,var(--th-ink) 86%,transparent);color:var(--th-bg);font-size:12px}
.music-local-upload{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 2px 5px}.music-local-upload label{flex:0 0 auto;min-height:38px;display:inline-flex;align-items:center;padding:0 14px;border-radius:999px;border:1px solid var(--music-line);background:color-mix(in srgb,var(--th-ink) 86%,transparent);color:var(--th-bg);font-size:12px;touch-action:manipulation}.music-local-upload input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.music-local-upload small{font-size:9px;line-height:1.45;color:var(--music-faint);text-align:right}.music-local-upload label:has(input:disabled){opacity:.45;pointer-events:none}
.music-pane-empty{padding:30px 10px;text-align:center;color:var(--music-faint);font-size:12px}
.music-pane-bar{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:2px 3px 10px;border-bottom:1px solid var(--music-line);margin-bottom:6px}.music-pane-bar strong{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--music-soft)}.music-pane-bar button{min-height:32px;padding:0 12px;border-radius:999px;font-size:11px;color:var(--music-soft);border:1px solid var(--music-line);background:color-mix(in srgb,var(--music-panel) 84%,transparent);touch-action:manipulation}
.music-source-credit{min-height:38px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 3px 1px;border-top:1px solid var(--music-line);font:500 9px/1.3 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;color:var(--music-faint)}.music-source-credit a{min-height:30px;display:inline-flex;align-items:center;padding:0 10px;border-radius:999px;color:var(--music-soft);background:color-mix(in srgb,var(--music-panel) 84%,transparent);border:1px solid var(--music-line)}
.music-status-pop{position:absolute;z-index:14;top:calc(env(safe-area-inset-top,0px) + 76px);left:50%;width:min(310px,calc(100% - 36px));min-height:62px;transform:translate(-50%,-18px);opacity:0;pointer-events:none;display:flex;align-items:center;gap:12px;padding:10px 14px;border:1px solid var(--music-line);border-radius:22px;background:var(--music-panel-strong);box-shadow:0 22px 60px color-mix(in srgb,transparent 55%,var(--th-bg));backdrop-filter:blur(28px) saturate(145%);-webkit-backdrop-filter:blur(28px) saturate(145%);transition:opacity .25s ease,transform .3s cubic-bezier(.2,.8,.2,1)}.music-status-pop.show{opacity:1;transform:translate(-50%,0)}.music-status-pop>span{font-size:28px;color:var(--music-soft)}.music-status-pop div{display:flex;flex-direction:column;gap:3px}.music-status-pop strong{font-size:13px}.music-status-pop small{font-size:10px;color:var(--music-faint)}
body.music-open{overscroll-behavior:none}

/* Explicit chat binding: no target means no send. */
.music-target-mask{position:absolute;inset:0;z-index:15;background:color-mix(in srgb,var(--th-bg) 48%,transparent);opacity:0;pointer-events:none;transition:opacity .25s ease;backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px)}
.music-target-picker{position:absolute;z-index:16;left:max(12px,calc((100% - 650px)/2));right:max(12px,calc((100% - 650px)/2));bottom:max(env(safe-area-inset-bottom,0px),12px);height:min(68dvh,610px);display:grid;grid-template-rows:20px auto minmax(0,1fr);padding:0 15px 15px;border:1px solid var(--music-line);border-radius:30px;background:var(--music-panel-strong);box-shadow:0 30px 90px color-mix(in srgb,transparent 44%,var(--th-bg)),inset 0 1px 0 color-mix(in srgb,transparent 78%,var(--th-ink));backdrop-filter:blur(34px) saturate(150%);-webkit-backdrop-filter:blur(34px) saturate(150%);transform:translateY(calc(100% + 30px));opacity:0;pointer-events:none;transition:transform .34s cubic-bezier(.2,.82,.24,1),opacity .25s ease}
.target-open .music-target-mask{opacity:1;pointer-events:auto}.target-open .music-target-picker{transform:translateY(0);opacity:1;pointer-events:auto}
.music-target-picker header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:5px 2px 14px;border-bottom:1px solid var(--music-line)}.music-target-picker header div{min-width:0}.music-target-picker header small{font:600 8px/1 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;letter-spacing:.22em;color:var(--music-faint)}.music-target-picker header strong{display:block;margin-top:4px;font-size:16px}.music-target-picker header p{margin-top:5px;font-size:10px;line-height:1.45;color:var(--music-faint)}.music-target-picker header button{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;color:var(--music-soft)}.music-target-picker header svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.music-target-list{min-height:0;overflow-y:auto;padding:10px 0;display:flex;flex-direction:column;gap:5px}.music-target-list>button{width:100%;min-height:64px;display:grid;grid-template-columns:44px minmax(0,1fr) auto;align-items:center;gap:11px;padding:8px 9px;border-radius:18px;text-align:left;border:1px solid transparent}.music-target-list>button:hover,.music-target-list>button.active{background:color-mix(in srgb,var(--th-ink) 7%,transparent);border-color:var(--music-line)}.music-target-list>button>span{width:44px;height:44px;border-radius:15px;display:grid;place-items:center;background:rgba(var(--music-track-rgb),.18);color:var(--music-soft);font:600 15px/1 var(--font-chat)}.music-target-list>button div{min-width:0;display:flex;flex-direction:column;gap:4px}.music-target-list>button strong{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.music-target-list>button small{font-size:9px;color:var(--music-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.music-target-list>button em{font-style:normal;font-size:10px;color:var(--music-soft)}.music-target-empty{padding:30px;text-align:center;color:var(--music-faint);font-size:12px}
.music-unbound .music-composer{border-color:color-mix(in srgb,var(--music-heart-color) 36%,transparent)}.music-composer textarea:disabled{opacity:.7}.music-send:disabled,.music-quick button:disabled{opacity:.34;pointer-events:none}

/* Music-native messages inside the authoritative chat window. */
.music-chat-card-wrap{display:flex;justify-content:center;margin:15px 10px}.music-chat-invite-card{position:relative;width:min(94%,520px);min-height:86px;display:grid;grid-template-columns:64px minmax(0,1fr) auto;align-items:center;gap:12px;padding:11px 12px;border-radius:24px;border:1px solid rgba(var(--accent-rgb),.22);background:linear-gradient(135deg,rgba(var(--accent-rgb),.12),color-mix(in srgb,var(--surface-1) 84%,transparent));box-shadow:inset 0 1px 0 color-mix(in srgb,transparent 78%,var(--th-ink)),0 18px 48px color-mix(in srgb,transparent 76%,var(--th-bg));overflow:hidden;backdrop-filter:blur(22px) saturate(140%);-webkit-backdrop-filter:blur(22px) saturate(140%)}.music-chat-invite-card.is-pending::after{content:'';position:absolute;inset:0 auto 0 -40%;width:34%;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--th-ink) 9%,transparent),transparent);animation:musicInviteShimmer 2.8s ease-in-out infinite;pointer-events:none}.music-chat-invite-card.is-declined{opacity:.72;filter:saturate(.65)}.music-chat-invite-card.is-accepted{border-color:rgba(var(--accent-rgb),.34);box-shadow:inset 0 1px 0 color-mix(in srgb,transparent 72%,var(--th-ink)),0 18px 52px rgba(var(--accent-rgb),.16)}@keyframes musicInviteShimmer{0%,18%{left:-40%}72%,100%{left:120%}}
.music-chat-cover{width:64px;height:64px;border-radius:18px;background-size:cover;background-position:center;display:grid;place-items:center;border:1px solid rgba(var(--accent-rgb),.2);box-shadow:0 10px 25px rgba(var(--accent-rgb),.18)}.music-chat-cover span{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--th-bg) 52%,transparent);color:var(--text)}
.music-chat-card-copy{min-width:0;text-align:left;display:flex;flex-direction:column;gap:4px}.music-chat-card-copy small{font:600 8px/1 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;letter-spacing:.18em;color:var(--dim)}.music-chat-card-copy strong{font-size:15px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.music-chat-card-copy em{font-style:normal;font-size:11px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.music-chat-invite-side{min-width:74px;display:grid;place-items:center}.music-chat-card-presence{position:relative;width:72px;height:36px}.music-card-avatar{position:absolute;top:3px;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--surface-3);background-size:cover;background-position:center;border:1px solid var(--border-1);font-size:10px}.music-card-avatar:first-child{left:0}.music-card-avatar.ai{right:0}.music-card-heart{position:absolute;z-index:2;left:50%;top:50%;width:20px;height:20px;display:grid;place-items:center;padding-bottom:1px;transform:translate(-50%,-50%);border-radius:50%;background:color-mix(in srgb,var(--surface-1) 78%,transparent);color:var(--danger);font:400 13px/1 system-ui,-apple-system,sans-serif;text-align:center;text-shadow:0 0 6px var(--danger)}.music-chat-invite-card.is-playing .music-card-heart,.music-chat-invite-card.is-accepted .music-card-heart{animation:musicHeartBeatCard 1.6s ease-in-out infinite}.music-invite-state{min-width:72px;display:flex;align-items:center;justify-content:center;gap:6px;padding:7px 9px;border-radius:999px;border:1px solid var(--border-1);background:color-mix(in srgb,var(--surface-2) 76%,transparent);color:var(--dim);font:600 9px/1 system-ui,-apple-system,sans-serif;white-space:nowrap}.music-invite-state i{width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px rgba(var(--accent-rgb),.55);animation:musicInviteDot 1.3s ease-in-out infinite}.music-invite-state.declined{opacity:.7}@keyframes musicHeartBeatCard{0%,100%{transform:translate(-50%,-50%) scale(1)}45%{transform:translate(-50%,-50%) scale(1.16)}}@keyframes musicInviteDot{50%{opacity:.25;transform:scale(.72)}}
.music-context-msg{display:flex;margin:8px 12px}.music-context-msg.user{justify-content:flex-end}.music-context-msg.assistant{justify-content:flex-start}.music-context-bubble{max-width:min(84%,470px);padding:10px 13px;border-radius:18px;text-align:left;border:1px solid rgba(var(--accent-rgb),.2);background:linear-gradient(145deg,rgba(var(--accent-rgb),.13),var(--surface-2));box-shadow:0 10px 26px color-mix(in srgb,transparent 82%,var(--th-bg))}.music-context-msg.user .music-context-bubble{border-bottom-right-radius:6px}.music-context-msg.assistant .music-context-bubble{border-bottom-left-radius:6px}.music-context-bubble small{display:block;font:600 8px/1.2 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;letter-spacing:.1em;color:var(--dim)}.music-context-bubble blockquote{margin:7px 0 5px;padding-left:8px;border-left:2px solid rgba(var(--accent-rgb),.42);font:500 11px/1.45 var(--font-chat);color:var(--text-3)}.music-context-bubble p{font:500 14px/1.55 var(--font-chat);color:var(--text);white-space:pre-wrap;word-break:break-word}

/* Draggable mini player shown only in its explicitly bound chat. */
/* ═══ 一起听场景卡（R 2026-07-18 规格定稿）：不是横条——
   柔焦黑胶唱片打底(看得到圆纹但朦胧带光晕)、心电线左右贯穿、双头像轻叠在线上,
   词在头像上方、歌名在下方、蓝月光晕+漂浮小爱心,底边渐隐无硬线。 ═══ */
.music-floating-player{position:fixed;z-index:88;top:0;left:0;right:0;height:calc(var(--safe-t) + 196px);display:block;padding:calc(var(--safe-t) + 8px) 16px 0;border:0;overflow:hidden;pointer-events:none;backdrop-filter:blur(18px) saturate(125%);-webkit-backdrop-filter:blur(18px) saturate(125%);
  background:linear-gradient(180deg,color-mix(in srgb, var(--th-bg) 88%, transparent) 0%,color-mix(in srgb, var(--th-bg) 55%, transparent) 55%,transparent 92%);
  -webkit-mask-image:linear-gradient(180deg,#000 0%,#000 58%,transparent 96%);mask-image:linear-gradient(180deg,#000 0%,#000 58%,transparent 96%)}
.music-floating-player>*{pointer-events:auto}
.music-float-disc,.music-float-moon,.music-float-hearts,.music-float-ecg{pointer-events:none}
/* 柔焦唱片：圆纹可见但朦胧，播放时缓转 */
.music-float-disc{position:absolute;left:50%;top:calc(var(--safe-t) - 128px);width:300px;height:300px;transform:translateX(-50%);border-radius:50%;opacity:.78;filter:blur(4px);
  background:
    radial-gradient(circle,rgba(var(--accent-rgb),.35) 0 9%,color-mix(in srgb,var(--th-bg) 70%,transparent) 9.5% 11%,transparent 11.5%),
    repeating-radial-gradient(circle,rgba(255,255,255,.11) 0 2px,transparent 2px 7px),
    radial-gradient(circle,color-mix(in srgb,var(--th-bg) 55%,#262b38 38%) 0 66%,transparent 69%);
  box-shadow:0 0 60px 6px rgba(140,160,220,.14)}
.music-floating-player.is-playing .music-float-disc{animation:musicDiscSpin 26s linear infinite}
@keyframes musicDiscSpin{to{transform:translateX(-50%) rotate(360deg)}}
/* 蓝月光晕 */
.music-float-moon{position:absolute;left:14%;top:calc(var(--safe-t) - 26px);width:150px;height:150px;border-radius:50%;
  background:radial-gradient(circle,rgba(150,180,255,.16),rgba(150,180,255,.05) 55%,transparent 72%);filter:blur(2px)}
/* 心电线：横贯，穿在头像身后 */
.music-float-ecg{position:absolute;left:0;right:0;top:calc(var(--safe-t) + 44px);width:100%;height:30px}
.music-float-ecg path{fill:none;stroke-linecap:round;stroke-linejoin:round}
.music-float-ecg .ecg-base{stroke:rgba(255,255,255,.28);stroke-width:1.4}
.music-float-ecg .ecg-run{stroke:rgba(255,255,255,.9);stroke-width:1.6;stroke-dasharray:30 470;animation:ecgRun 3s linear infinite;filter:drop-shadow(0 0 5px rgba(255,255,255,.45))}
@keyframes ecgRun{from{stroke-dashoffset:500}to{stroke-dashoffset:-500}}
/* 漂浮小爱心 */
.music-float-hearts i{position:absolute;font-style:normal;color:rgba(255,255,255,.16);font-size:15px;animation:musicHeartDrift 7s ease-in-out infinite}
.music-float-hearts i:nth-child(1){left:9%;top:calc(var(--safe-t) + 26px);animation-delay:0s}
.music-float-hearts i:nth-child(2){right:11%;top:calc(var(--safe-t) + 44px);font-size:19px;animation-delay:1.8s}
.music-float-hearts i:nth-child(3){left:22%;top:calc(var(--safe-t) + 108px);font-size:12px;animation-delay:3.2s}
.music-float-hearts i:nth-child(4){right:24%;top:calc(var(--safe-t) + 118px);animation-delay:5s}
@keyframes musicHeartDrift{0%,100%{transform:translateY(0);opacity:.5}50%{transform:translateY(-9px);opacity:1}}
/* 内容列：词 → 头像(叠) → 歌名 → 正在一起听·时长 */
.music-float-drag{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:5px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.music-floating-player em[data-float-lyric]{max-width:86%;font-style:normal;font-size:12px;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 6px color-mix(in srgb,var(--th-bg) 70%,transparent)}
.music-float-pair{position:relative;width:86px;height:52px}
.music-float-pair>span{position:absolute;top:1px;width:50px;height:50px;border-radius:50%;display:grid;place-items:center;background:var(--surface-3);background-size:cover;background-position:center;border:1.5px solid rgba(255,255,255,.28);font-size:13px;color:var(--text-2);box-shadow:0 4px 18px color-mix(in srgb,transparent 55%,var(--th-bg))}
.music-float-pair>span:first-child{left:0;z-index:1}
.music-float-pair>span:last-child{right:0}
.music-float-pair i{display:none}
.music-floating-player strong[data-float-title]{max-width:80%;font-size:13px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 6px color-mix(in srgb,var(--th-bg) 70%,transparent)}
.music-float-meta{display:flex;align-items:baseline;gap:5px;font:600 9px/1 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;letter-spacing:.14em;color:var(--dim)}
.music-float-meta [data-float-duration]{letter-spacing:.02em;color:var(--text-3)}
/* 控件：右上角低调悬浮 */
.music-floating-player>button{position:absolute;z-index:2;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:var(--text-3);background:transparent}
.music-floating-player>button svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.music-floating-player .music-fill{fill:currentColor;stroke:none}
.music-floating-player [data-float-play]{right:46px;top:calc(var(--safe-t) + 34px)}
.music-floating-player [data-float-queue]{right:10px;top:calc(var(--safe-t) + 34px)}
/* × 只是收起浮窗；这颗才是真的结束一起听，只在 listening 时出现 */
.music-float-end{position:absolute!important;left:12px;top:calc(var(--safe-t) + 4px);
  padding:3px 9px!important;width:auto!important;height:auto!important;border-radius:999px;
  font:600 10px/1.3 var(--font-chat);color:var(--accent);
  background:color-mix(in srgb,transparent 88%,var(--accent));
  border:1px solid color-mix(in srgb,transparent 70%,var(--accent))}
.music-float-end.hidden{display:none!important}
.music-float-close{position:absolute!important;right:12px;top:calc(var(--safe-t) + 4px);width:22px!important;height:22px!important;background:transparent;border:none;font-size:14px;color:var(--text-3)}
.music-floating-player.hidden{display:none!important}

/* Home music + Together Reading share the row below Phone. */
#home-screen .cosmos-actions.music-home-row{display:grid;grid-template-columns:1fr 1fr}
#home-screen .home-music-action span{color:var(--accent)}

/* Home: a quiet wide doorway directly below the conversation/quote area. */
.home-music-entry{margin:0;display:block}.home-music-entry button{position:relative;width:100%;min-height:70px;display:grid;grid-template-columns:50px minmax(0,1fr) auto;align-items:center;gap:13px;padding:10px 14px;border:1px solid rgba(var(--accent-rgb),.18);border-radius:22px;background:linear-gradient(135deg,rgba(var(--accent-rgb),.12),color-mix(in srgb,var(--surface-1) 66%,transparent));box-shadow:inset 0 1px 0 color-mix(in srgb,transparent 78%,var(--th-ink)),0 16px 38px color-mix(in srgb,transparent 82%,var(--th-bg));text-align:left;overflow:hidden;backdrop-filter:blur(22px) saturate(140%);-webkit-backdrop-filter:blur(22px) saturate(140%)}
.home-music-entry button::after{content:'';position:absolute;inset:auto -12% -70% 32%;height:120%;background:radial-gradient(circle,rgba(var(--accent-rgb),.22),transparent 68%);pointer-events:none}.home-music-orb{width:50px;height:50px;border-radius:18px;display:grid;place-items:center;background:linear-gradient(145deg,rgba(var(--accent-rgb),.34),rgba(var(--accent-rgb),.10));border:1px solid rgba(var(--accent-rgb),.26);color:var(--text);font-size:21px;box-shadow:0 12px 28px rgba(var(--accent-rgb),.18)}.home-music-copy{min-width:0;position:relative;z-index:1;display:flex;flex-direction:column;gap:4px}.home-music-copy strong{font-size:15px;color:var(--text)}.home-music-copy em{font-style:normal;font-size:10px;letter-spacing:.12em;color:var(--dim)}.home-music-entry button>b{position:relative;z-index:1;font:400 22px/1 var(--font-chat);color:var(--dim)}

@media(max-height:740px){.music-shell{grid-template-rows:auto auto minmax(0,1fr) auto auto;padding-top:calc(env(safe-area-inset-top,0px) + 5px)}.music-header{min-height:50px}.music-presence{min-height:70px}.music-avatar{width:44px;height:44px}.music-presence{grid-template-columns:52px minmax(104px,132px) 52px}.music-lyric-line{min-height:52px;font-size:15px}.music-controls{min-height:64px}.music-controls .music-play{width:58px;height:58px}.music-controls{grid-template-columns:1fr 44px 62px 44px 1fr}.music-conversation-sheet{bottom:calc(max(env(safe-area-inset-bottom,0px),12px) + 138px);height:min(42dvh,340px)}}
@media(min-width:760px){.music-shell{padding-left:28px;padding-right:28px}.music-lyric-line{padding-left:80px;padding-right:80px}.music-conversation-sheet,.music-queue-drawer{left:calc((100% - 650px)/2);right:calc((100% - 650px)/2)}}
@media(prefers-reduced-motion:reduce){#music-root,.music-lyrics-view,.music-companion-view,.music-lyric-line,.music-lyric-text::after,.music-conversation-sheet,.music-queue-drawer,.music-target-picker,.music-status-pop{transition:none!important}.music-heartline svg,.music-heart,.music-heart-dot,.music-card-heart,.music-float-pair i,.music-now-live i,.music-chat-invite-card::after,.music-invite-state i{animation:none!important}.music-heart-dot{display:none}.is-ai-speaking .music-heartline{transform:none}}

/* 一起听卡片在场时：消息滑进卡片区渐隐，不跟歌词打架（R 2026-07-18） */
/* 这里原先给 #msgs 加 mask-image 做顶部渐隐，已移除：
   祖先一旦有 mask 就会新建合成层，后代的 backdrop-filter 全部失效 ——
   气泡滑进顶栏不再变玻璃，聊天里的一起听邀请卡也会从磨砂掉成一块平板。
   浮窗自己带渐变背景和 mask，消息滑到它下面本来就被盖住，不需要这一层。 */
