/* 夜屿 · 新版陪伴与布局 (星降る天文台), 2026-10-09/10 — presentation layer on top of 夜屿新装.
 *   :root[data-tmx="on"]     shared by both themes: mark, settings tabs, 陪伴 dock + rising menu, immersive mode,
 *                            hidden top navigation, last line / your words, lights-out, mobile "更多" sheet, dialogs.
 *   :root[data-tmx-im="on"]  the 陪伴 page in immersive mode (sidebar and bars tucked away).
 *   :root[data-tm="on"]      月夜・静水 only: night sky, planisphere, tide ring, palette.
 * 黄昏・樱语 keeps its own look; the two themes share layout and menus so they read as one product.
 * Off: 案头 → 画面 → 版式 → 新版陪伴与布局, or ?tenmon=off. */

/* "Tenmon Kana": Shippori Mincho Medium (SIL Open Font License 1.1, (c) FONTDASU), cut down to the fixed
   strings of this layer. Dynamic Japanese text uses "Tenmon Mincho" (js/fonts/, loaded by tenmondai.js). */
@font-face{font-family:"Tenmon Kana";src:url(data:font/woff;base64,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) format("woff");font-display:swap}

/* =====================================================================
   Shared tokens (月夜 values; 樱语 overrides below)
   ===================================================================== */
:root[data-tmx="on"] {
  --tm-kana: "Tenmon Kana", "Tenmon Mincho", "Yu Mincho", "YuMincho", "Hiragino Mincho ProN", "Noto Serif CJK JP", serif;
  --tm-mincho: "Tenmon Mincho", "Tenmon Kana", "Yu Mincho", "YuMincho", "Hiragino Mincho ProN", "Noto Serif CJK JP", serif;
  --mark: #ecd394; --mark-glow: rgba(242, 212, 138, .32);
  --sh-bg: linear-gradient(180deg, rgba(18, 24, 68, .92), rgba(7, 11, 38, .96));
  --sh-border: rgba(226, 210, 164, .2);
  --sh-shadow: 0 -26px 70px rgba(0, 0, 12, .62), inset 0 1px 0 rgba(255, 255, 255, .09);
  --sh-ink: #fbf6ea; --sh-sub: rgba(243, 239, 230, .52); --sh-text: #f5f1e8;
  --sh-tile: rgba(255, 255, 255, .045); --sh-tile-border: rgba(200, 212, 255, .14);
  --sh-tile-hover: rgba(255, 236, 200, .08); --sh-tile-hover-border: rgba(255, 236, 200, .36);
  --sh-icon: #f2dfae; --sh-tilesub: rgba(243, 239, 230, .46);
  --sh-cta: linear-gradient(100deg, #f6e3b4, #c9c3f0); --sh-cta-ink: #141a36; --sh-cta-glow: rgba(242, 212, 138, .6);
  --sh-scrim: rgba(2, 4, 18, .42); --sh-handle: rgba(243, 239, 230, .3); --sh-nav: #aab3dc; --sh-rule: rgba(200, 212, 255, .1);
  --dock-bg: rgba(8, 14, 48, .5); --dock-border: rgba(200, 212, 255, .16); --dock-ink: #c9d0ea; --dock-hover: rgba(242, 212, 138, .4);
  --dock-mic: #9fd8e8; --dock-faint: rgba(214, 222, 246, .58);
  --you-ink: #d6eff6; --you-glow: rgba(150, 206, 222, .45); --you-tag: rgba(159, 216, 232, .6);
  --prev-ink: rgba(226, 230, 246, .4);
  --top-bg: linear-gradient(180deg, rgba(6, 10, 38, .94), rgba(6, 10, 38, .82)); --top-border: rgba(226, 210, 164, .16);
  --top-ink: #c9d0ea; --top-active: #f2d48a; --top-title: #f6f1e4; --top-sub: #aab3dc;
  --gn-ink: rgba(240, 232, 214, .66); --gn-glow: rgba(242, 212, 138, .3); --gn-sub: rgba(201, 196, 214, .42);
  /* the menu is frosted glass: the scene stays visible through it */
  --sh-glass: linear-gradient(180deg, rgba(30, 36, 92, .3), rgba(10, 14, 46, .46));
  --sh-glass-border: rgba(226, 222, 255, .16);
  --sh-glass-shadow: 0 34px 80px -34px rgba(0, 0, 14, .75), inset 0 1px 0 rgba(255, 255, 255, .13), inset 0 0 0 1px rgba(255, 255, 255, .02);
  --sh-veil: linear-gradient(0deg, rgba(2, 4, 20, .46), rgba(2, 4, 20, .14) 42%, transparent 72%);
  --sh-legible: 0 1px 12px rgba(4, 8, 30, .5);
  --voice-glow: rgba(150, 206, 222, .3);
  --tw-core: #fff; --tw-halo: rgba(214, 224, 255, .55); --tw-ray: rgba(236, 241, 255, .92); --tw-rest: .32;
  --h-ink: var(--yx-ink, #f1ece2); --h-sheen: #ffe6a8;
  --vt-dip: #050a2c;
}
:root[data-tmx="on"][data-theme="soft-anime"] {
  --mark: #c4688a; --mark-glow: rgba(208, 111, 140, .25);
  --sh-bg: linear-gradient(180deg, rgba(255, 251, 249, .95), rgba(253, 242, 245, .97));
  --sh-border: rgba(150, 96, 126, .22);
  --sh-shadow: 0 -24px 60px rgba(120, 70, 95, .26), inset 0 1px 0 rgba(255, 255, 255, .95);
  --sh-ink: #4a3550; --sh-sub: rgba(102, 86, 109, .78); --sh-text: #4a3550;
  --sh-tile: rgba(255, 255, 255, .66); --sh-tile-border: rgba(150, 96, 126, .18);
  --sh-tile-hover: rgba(217, 114, 143, .07); --sh-tile-hover-border: rgba(208, 111, 140, .42);
  --sh-icon: #d06f8c; --sh-tilesub: rgba(102, 86, 109, .62);
  --sh-cta: linear-gradient(100deg, #f2a6bb, #c2a7e6); --sh-cta-ink: #fffaf8; --sh-cta-glow: rgba(217, 114, 143, .45);
  --sh-scrim: rgba(80, 40, 60, .2); --sh-handle: rgba(102, 86, 109, .3); --sh-nav: #7f6f86; --sh-rule: rgba(150, 96, 126, .14);
  --dock-bg: rgba(255, 250, 248, .72); --dock-border: rgba(150, 96, 126, .2); --dock-ink: #66566d; --dock-hover: rgba(208, 111, 140, .45);
  --dock-mic: #8f7cc0; --dock-faint: rgba(102, 86, 109, .7);
  --you-ink: #6a58a8; --you-glow: transparent; --you-tag: rgba(143, 124, 192, .75);
  --prev-ink: rgba(102, 86, 109, .55);
  --top-bg: linear-gradient(180deg, rgba(255, 251, 249, .96), rgba(255, 246, 247, .88)); --top-border: rgba(150, 96, 126, .18);
  --top-ink: #66566d; --top-active: #d06f8c; --top-title: #45364d; --top-sub: #7f6f86;
  --gn-ink: rgba(96, 62, 90, .82); --gn-glow: rgba(255, 255, 255, .7); --gn-sub: rgba(102, 86, 109, .6);
  --sh-glass: linear-gradient(180deg, rgba(255, 252, 250, .42), rgba(255, 243, 246, .58));
  --sh-glass-border: rgba(255, 255, 255, .72);
  --sh-glass-shadow: 0 34px 70px -34px rgba(120, 70, 95, .42), inset 0 1px 0 rgba(255, 255, 255, .92), inset 0 0 0 1px rgba(255, 255, 255, .2);
  --sh-tile: rgba(255, 255, 255, .44); --sh-tile-border: rgba(150, 96, 126, .16);
  --sh-veil: linear-gradient(0deg, rgba(110, 60, 85, .2), rgba(110, 60, 85, .05) 42%, transparent 72%);
  --sh-legible: 0 1px 10px rgba(255, 255, 255, .7);
  --voice-glow: rgba(160, 140, 210, .24);
  --tw-core: #fffaf2; --tw-halo: rgba(255, 214, 196, .5); --tw-ray: rgba(255, 238, 222, .9); --tw-rest: 0;
  --h-ink: var(--yx-ink, #45364d); --h-sheen: #d9728f;
  --vt-dip: #fbeff1;
}

/* =====================================================================
   The mark (both themes)
   ===================================================================== */
:root[data-tmx="on"] .brand-mark { display: inline-grid; place-items: center; width: 58px; height: 49px; flex: 0 0 auto; font-size: 0 !important; line-height: 0; text-shadow: none; color: var(--mark); }
:root[data-tmx="on"] .brand-mark svg { width: 58px; height: 49px; overflow: visible; filter: drop-shadow(0 0 10px var(--mark-glow)); }
:root[data-tmx="on"] .sidebar .brand { gap: 12px; }
:root[data-tmx="on"] .sidebar .brand small { white-space: nowrap; letter-spacing: .42em; }
:root[data-tmx="on"] .tm-topmark { display: none; color: var(--mark); }
@media (max-width: 850px) {
  :root[data-tmx="on"] .tm-topmark { display: inline-block; width: 32px; height: 27px; margin: 0 10px 0 0; vertical-align: -7px; filter: drop-shadow(0 0 8px var(--mark-glow)); }
  :root[data-tmx="on"] .tm-topmark svg { width: 32px; height: 27px; display: block; }
}

/* =====================================================================
   月夜・静水: palette, sky and surfaces
   ===================================================================== */
:root[data-tm="on"] {
  --tm-gold: #f2d48a; --tm-moon: #fff7e0; --tm-cyan: #9fd8e8; --tm-ink: #f6f1e4;
  --tm-glass: linear-gradient(165deg, rgba(40, 48, 112, .46), rgba(12, 17, 52, .66));
  --tm-depth: inset 0 1px 0 rgba(255, 255, 255, .07), inset 0 0 0 1px rgba(255, 255, 255, .012), 0 34px 64px -38px rgba(0, 0, 12, .95);
  --yx-ink: #f1ece2; --yx-ink-soft: #c6cce2; --yx-ink-faint: #8e97bb;
  --yx-sheet: var(--tm-glass); --yx-sheet-solid: #121a46; --yx-sheet-hover: rgba(242, 212, 138, .07);
  --yx-rule: rgba(200, 212, 255, .12); --yx-rule-strong: rgba(226, 210, 164, .26);
  --yx-accent: #e6cd8f; --yx-accent-ink: #141a3a; --yx-accent-2: #9fd8e8; --yx-glow: #f2d48a;
  --yx-window: linear-gradient(180deg, rgba(14, 20, 58, .72), rgba(8, 12, 38, .86));
  --yx-plate: linear-gradient(100deg, #f6e3b4, #c9c3f0);
  --yx-shadow: 0 34px 64px -38px rgba(0, 0, 12, .95);
}
:root[data-tm="on"] body {
  background: radial-gradient(ellipse 70% 55% at 78% 8%, rgba(92, 78, 178, .22), transparent 62%),
    radial-gradient(ellipse 60% 50% at 12% 92%, rgba(60, 110, 170, .14), transparent 60%),
    linear-gradient(180deg, #02041a 0%, #050b2e 36%, #0b1446 68%, #181e56 100%) fixed;
}
:root[data-tm="on"] body::before {
  background: linear-gradient(180deg, rgba(3, 6, 30, .74) 0%, rgba(6, 11, 42, .5) 46%, rgba(5, 9, 34, .66) 100%),
    url('/static/images/moonlit-shore.webp') center 60% / cover;
  opacity: 1; -webkit-mask-image: none; mask-image: none; transition: opacity 1s ease;
}
:root[data-tm="on"][data-tmx-im="on"] body[data-page=call]::before { opacity: 0; }
:root[data-tm="on"] .tm-galaxy {
  position: fixed; inset: 0; width: 100vw; height: 100vh; pointer-events: none; mix-blend-mode: screen;
  -webkit-mask-image: linear-gradient(180deg, #000 0 34%, transparent 70%); mask-image: linear-gradient(180deg, #000 0 34%, transparent 70%);
  opacity: .5; transition: opacity 1.2s ease;
}
:root[data-tm="on"] body[data-page=call] .tm-galaxy { opacity: .72; }
:root[data-tm="on"] .yx-sky { opacity: .85; }
:root[data-tm="on"] .sidebar {
  background: linear-gradient(180deg, rgba(5, 9, 34, .74), rgba(8, 12, 42, .58)) !important;
  border-right: 1px solid rgba(226, 210, 164, .12); box-shadow: inset -1px 0 0 rgba(255, 255, 255, .03), 24px 0 60px -40px rgba(0, 0, 10, .9);
  -webkit-backdrop-filter: blur(18px) saturate(120%); backdrop-filter: blur(18px) saturate(120%);
}
:root[data-tm="on"] .sidebar nav a.active { background: linear-gradient(90deg, rgba(242, 212, 138, .16), rgba(201, 195, 240, .05) 70%, transparent); box-shadow: inset 0 0 0 1px rgba(242, 212, 138, .1); }
:root[data-tm="on"] .topbar { border-bottom: 0; background: linear-gradient(180deg, rgba(4, 7, 30, .5), transparent); box-shadow: 0 1px 0 rgba(226, 210, 164, .1); }
:root[data-tm="on"] :is(.soft-card, .reading-paper, .call-list-panel, .raw-panel, .connection-sidebar, .connection-editor, .persona-editor, .chapter-card) {
  background: var(--tm-glass) !important; border: 1px solid rgba(200, 212, 255, .12) !important; box-shadow: var(--tm-depth) !important;
  -webkit-backdrop-filter: blur(14px) saturate(125%); backdrop-filter: blur(14px) saturate(125%);
}
:root[data-tm="on"] :is(.soft-card, .reading-paper, .persona-editor, .connection-editor)::before,
:root[data-tm="on"] :is(.soft-card, .reading-paper, .persona-editor, .connection-editor)::after { border-color: rgba(242, 212, 138, .45) !important; }
:root[data-tm="on"] .page-heading h1 { color: var(--tm-ink); text-shadow: 0 0 26px rgba(242, 212, 138, .16), 0 2px 18px rgba(0, 0, 12, .6); }
:root[data-tm="on"] :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]), select, textarea) {
  background: rgba(4, 8, 32, .55) !important; border: 1px solid rgba(200, 212, 255, .16) !important; color: var(--yx-ink) !important;
  box-shadow: inset 0 2px 10px rgba(0, 0, 12, .35) !important;
}
:root[data-tm="on"] :is(input:not([type=checkbox]):not([type=radio]):not([type=range]), select, textarea):focus { border-color: rgba(242, 212, 138, .55) !important; }
:root[data-tm="on"] .primary { box-shadow: 0 14px 34px -14px rgba(242, 212, 138, .55), inset 0 1px 0 rgba(255, 255, 255, .45) !important; }
:root[data-tm="on"] .pill { border-color: rgba(226, 210, 164, .3); }
:root[data-tm="on"] .hero-art { box-shadow: 0 40px 80px -40px rgba(0, 0, 12, .95), 0 0 0 1px rgba(226, 210, 164, .16); }
:root[data-tm="on"] .theme-option input:checked + .theme-preview { box-shadow: 0 0 0 1px rgba(242, 212, 138, .6), 0 18px 40px -22px rgba(242, 212, 138, .4); }
:root[data-tm="on"] #mini-call { background: linear-gradient(180deg, rgba(14, 20, 58, .8), rgba(6, 10, 34, .9)); }

/* 樱语 keeps its colours; its surfaces get the same depth so both themes feel built the same way */
:root[data-tmx="on"][data-theme="soft-anime"] :is(.soft-card, .reading-paper, .call-list-panel, .raw-panel, .connection-sidebar, .connection-editor, .persona-editor, .chapter-card) {
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .95), 0 1px 0 rgba(150, 96, 126, .06), 0 28px 56px -34px rgba(120, 70, 95, .38) !important;
  -webkit-backdrop-filter: blur(12px) saturate(115%); backdrop-filter: blur(12px) saturate(115%);
}
:root[data-tmx="on"][data-theme="soft-anime"] .sidebar { box-shadow: inset -1px 0 0 rgba(255, 255, 255, .7), 20px 0 50px -40px rgba(120, 70, 95, .4); }
:root[data-tmx="on"] .transcript-row:not(.user) p { font-family: var(--tm-mincho); }

/* =====================================================================
   角色与声音 — four tabs, one screen each (both themes)
   ===================================================================== */
:root[data-tmx="on"] .tm-tabs {
  position: sticky; top: -1px; z-index: 6; display: flex; gap: 4px; width: fit-content; margin: 0 0 20px; padding: 4px;
  border-radius: 999px; background: var(--dock-bg); border: 1px solid var(--dock-border);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08), 0 14px 30px -20px rgba(0, 0, 12, .5);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
}
:root[data-tmx="on"] .tm-tabs button {
  border: 0; background: none; box-shadow: none; color: var(--yx-ink-soft); padding: 9px 24px; border-radius: 999px;
  font-size: 13px; letter-spacing: .24em; cursor: pointer; transition: background .3s ease, color .3s ease;
}
:root[data-tmx="on"] .tm-tabs button:hover { color: var(--yx-ink); }
:root[data-tmx="on"] .tm-tabs button[aria-selected=true] { background: var(--yx-plate); color: var(--yx-accent-ink); box-shadow: 0 8px 22px -10px var(--sh-cta-glow); }
:root[data-tmx="on"] [data-view=settings][data-tm-tab] .settings-grid { display: grid; grid-template-columns: minmax(0, 1fr); max-width: 900px; gap: 18px; }
:root[data-tmx="on"] [data-view=settings][data-tm-tab] .settings-grid > div:not([data-tm-pane]) { display: grid; gap: 18px; }
:root[data-tmx="on"] [data-tm-tab] [data-tm-pane]:not(.tm-on) { display: none !important; }
:root[data-tmx="on"] [data-view=settings][data-tm-tab] .her-grid { max-width: 1180px; }
:root[data-tmx="on"] .call-actions #call-sound::after { content: '她的声音、背景音'; }
:root[data-tmx="on"] [data-tm-tab] [data-tm-pane] { animation: tm-pane .5s ease both; }
@keyframes tm-pane { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@media (min-width: 1000px) {
  :root[data-tmx="on"] [data-tm-tab] .soundcard { column-count: 2; column-gap: 44px; }
  :root[data-tmx="on"] [data-tm-tab] .soundcard > * { break-inside: avoid; }
  :root[data-tmx="on"] [data-tm-tab] .soundcard > h2 { column-span: all; }
  :root[data-tmx="on"] [data-tm-tab] .theme-selector .theme-options { max-width: 620px; }
}

/* =====================================================================
   陪伴 — shared layout: the room sits in the page like every other page; tap it for immersive mode
   ===================================================================== */
:root[data-tmx="on"] .call-room { overflow: hidden; }
/* A transform or filter animation on the page (even one that has finished and only fills) would make the
   fixed sheet and bar scroll with the page, so 陪伴 fades in without moving. */
@keyframes tmx-page-in { from { opacity: 0; } to { opacity: 1; } }
:root[data-tmx="on"] body[data-page=call] .call-page { animation-name: tmx-page-in !important; transform: none !important; filter: none !important; }
:root[data-tmx-im="on"] body[data-page=call] .app-shell { grid-template-columns: minmax(0, 1fr); padding-bottom: 0; }
:root[data-tmx-im="on"] body[data-page=call] :is(.sidebar, .topbar, .mobile-nav, #mobile-more) { display: none !important; }
:root[data-tmx-im="on"] .call-page { padding: 0 !important; scrollbar-gutter: auto; }
:root[data-tmx-im="on"] .call-room { min-height: 100%; border: 0 !important; border-radius: 0 !important; box-shadow: none !important; }
:root[data-tmx="on"] body[data-page=call] .call-room { cursor: default; }

/* Hidden navigation for immersive mode: rests above the top edge, slides down when the pointer arrives */
:root[data-tmx="on"] .tmx-top { display: none; }
:root[data-tmx-im="on"] .tmx-top {
  display: block; position: fixed; left: 0; right: 0; top: 0; z-index: 32;
  transform: translateY(-64px); transition: transform .9s cubic-bezier(.45, 0, .55, 1) .35s;
}
:root[data-tmx-im="on"] .tmx-top:is(:hover, :focus-within, .peek) { transform: translateY(0); transition: transform 1s cubic-bezier(.16, 1, .3, 1) 0s; }
:root[data-tmx-im="on"] .tmx-top:is(:hover, :focus-within, .peek) .tmx-top-bar { opacity: 1; box-shadow: 0 18px 40px -26px rgba(0, 0, 0, .55); transition-delay: 0s; }
:root[data-tmx-im="on"] .tmx-top:is(:hover, :focus-within, .peek) .tmx-nav a { opacity: 1; transform: none; }
:root[data-tmx="on"] .tmx-top-bar {
  display: flex; align-items: center; gap: 28px; height: 64px; padding: 0 clamp(18px, 4vw, 56px);
  background: var(--top-bg); border-bottom: 1px solid var(--top-border); box-shadow: none; opacity: 0; transition: opacity .8s ease .35s, box-shadow .8s ease .35s;
  -webkit-backdrop-filter: blur(16px) saturate(125%); backdrop-filter: blur(16px) saturate(125%);
}
:root[data-tmx="on"] .tmx-lip { display: block; width: 100%; height: 16px; margin: 0; padding: 0; border: 0; background: none; cursor: pointer; position: relative; }
:root[data-tmx="on"] .tmx-lip i { position: absolute; left: 50%; top: 5px; width: 36px; height: 3px; margin-left: -18px; border-radius: 2px; background: var(--dock-faint); opacity: .45; transition: opacity .8s ease, width .8s ease, margin .8s ease; }
:root[data-tmx="on"] .tmx-lip:hover i { opacity: .8; width: 52px; margin-left: -26px; }
:root[data-tmx-im="on"] .tmx-top:is(:hover, :focus-within, .peek) .tmx-lip i { opacity: 0; }
:root[data-tmx="on"] .tmx-brand { display: flex; align-items: center; gap: 12px; color: var(--top-title); text-decoration: none; }
:root[data-tmx="on"] .tmx-brand svg { width: 40px; height: 34px; color: var(--mark); filter: drop-shadow(0 0 10px var(--mark-glow)); }
:root[data-tmx="on"] .tmx-brand b { font-family: var(--yx-display); font-weight: 600; font-size: 20px; letter-spacing: .32em; }
:root[data-tmx="on"] .tmx-brand small { font-family: var(--tm-kana); font-size: 11px; letter-spacing: .4em; color: var(--top-sub); white-space: nowrap; }
:root[data-tmx="on"] .tmx-nav { display: flex; flex-direction: row; gap: 26px; margin: 0 auto; }
:root[data-tmx="on"] .tmx-nav a {
  display: inline-block; padding: 6px 2px; margin: 0; gap: 0; border: 0; border-radius: 0; border-bottom: 1px solid transparent;
  background: none !important; box-shadow: none !important; color: var(--top-ink); text-decoration: none; font-size: 13px; letter-spacing: .18em;
  opacity: 0; transform: translateY(-6px); transition: opacity .8s ease, transform .9s cubic-bezier(.16, 1, .3, 1), color .5s ease, border-color .5s ease;
}
:root[data-tmx="on"] .tmx-nav a:nth-child(2) { transition-delay: .05s; }
:root[data-tmx="on"] .tmx-nav a:nth-child(3) { transition-delay: .1s; }
:root[data-tmx="on"] .tmx-nav a:nth-child(4) { transition-delay: .15s; }
:root[data-tmx="on"] .tmx-nav a:nth-child(5) { transition-delay: .2s; }
:root[data-tmx="on"] .tmx-nav a::before { display: none !important; }
:root[data-tmx="on"] .tmx-nav a:hover { color: var(--top-title); }
:root[data-tmx="on"] .tmx-nav a[aria-current=page] { color: var(--top-active); border-bottom-color: var(--top-active); }
:root[data-tmx="on"] .tmx-exit {
  border-radius: 999px; padding: 7px 16px; font-size: 12px; letter-spacing: .14em; cursor: pointer;
  color: var(--dock-ink); background: var(--dock-bg); border: 1px solid var(--dock-border); box-shadow: none;
}
:root[data-tmx="on"] .tmx-exit:hover { border-color: var(--dock-hover); box-shadow: 0 0 22px -8px var(--dock-hover); }

/* Quick words: always outside the menu (the menu keeps the original field) */
:root[data-tmx="on"] .tm-say { display: flex; align-items: center; gap: 8px; width: min(560px, 100%); margin: auto auto 0; padding: 14px 0 0; position: relative; z-index: 2; transition: opacity 1.2s ease; }
:root[data-tmx="on"] .tm-say + .tm-dock { margin-top: 0; padding-top: 10px; }
:root[data-tmx="on"] .tm-say #tm-say-input {
  flex: 1; min-width: 0; min-height: 40px; padding: 8px 18px; border-radius: 999px; font-size: 13px; letter-spacing: .06em;
  color: var(--dock-ink); background: var(--dock-bg); border: 1px solid var(--dock-border); outline: none;
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .06);
  transition: border-color .6s ease, box-shadow .6s ease;
}
:root[data-tmx="on"] .tm-say #tm-say-input::placeholder { color: var(--dock-faint); opacity: .8; }
:root[data-tmx="on"] .tm-say #tm-say-input:focus { border-color: var(--dock-hover); box-shadow: 0 0 24px -8px var(--dock-hover); }
:root[data-tmx="on"] .tm-say button {
  min-height: 40px; padding: 8px 18px; border-radius: 999px; cursor: pointer; font-size: 12px; letter-spacing: .16em;
  color: var(--dock-ink); background: var(--dock-bg); border: 1px solid var(--dock-border);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); transition: border-color .6s ease, box-shadow .6s ease;
}
:root[data-tmx="on"] .tm-say button:hover:not(:disabled) { border-color: var(--dock-hover); box-shadow: 0 0 22px -8px var(--dock-hover); }
:root[data-tmx="on"] .tm-say :disabled { opacity: .45; cursor: not-allowed; }
:root[data-tmx="on"] .call-room.tm-menu-open .tm-say { opacity: .16; transition-duration: .9s; }
:root[data-tmx="on"] .call-room.tm-end .tm-say { opacity: .08; transition: opacity 2.5s ease; }
:root[data-tmx="on"] .call-room.tm-end:is(.tm-wake, :focus-within) .tm-say { opacity: 1; transition-duration: 1s; }

/* Dock: microphone · menu · immersive */
:root[data-tmx="on"] .tm-dock { display: flex; align-items: center; justify-content: center; gap: 12px; margin-top: auto; padding: 16px 0 4px; flex-wrap: wrap; position: relative; z-index: 2; transition: opacity 2s ease; }
:root[data-tmx="on"] .tm-dock button {
  display: inline-flex; align-items: center; gap: 9px; min-height: 40px; padding: 8px 18px; border-radius: 999px; cursor: pointer;
  font-size: 12px; letter-spacing: .16em; color: var(--dock-ink); background: var(--dock-bg); border: 1px solid var(--dock-border);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08);
  transition: color .6s ease, border-color .6s ease, background .6s ease, box-shadow .6s ease, transform .6s cubic-bezier(.2, .7, .2, 1);
}
:root[data-tmx="on"] .tm-dock button:hover { border-color: var(--dock-hover); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08), 0 0 26px -8px var(--dock-hover); transform: translateY(-1px); }
:root[data-tmx="on"] .tm-dock button:active { transform: scale(.98); transition-duration: .15s; }
:root[data-tmx="on"] .tm-mic-chip i { width: 7px; height: 7px; border-radius: 50%; background: var(--dock-faint); opacity: .6; }
:root[data-tmx="on"] .tm-mic-chip.on { border-color: color-mix(in srgb, var(--dock-mic) 50%, transparent); }
:root[data-tmx="on"] .tm-mic-chip.on i { background: var(--dock-mic); box-shadow: 0 0 10px var(--dock-mic); opacity: 1; }
@keyframes tm-dot { 0%, 100% { opacity: .5; } 50% { opacity: 1; } }
:root[data-tmx="on"] body[data-motion=gentle] .tm-mic-chip.on i { animation: tm-dot 2.4s ease-in-out infinite; }
:root[data-tmx="on"] .tm-menu-btn i { width: 8px; height: 8px; border-left: 1px solid currentColor; border-top: 1px solid currentColor; transform: translateY(2px) rotate(45deg); }
:root[data-tmx="on"] .tmx-im-btn b { width: 12px; height: 12px; border: 1px solid currentColor; border-radius: 2px; position: relative; }
:root[data-tmx="on"] .tmx-im-btn b::after { content: ''; position: absolute; inset: 2px; border: 1px dashed currentColor; border-radius: 1px; opacity: .6; }
:root[data-tmx="on"] .tm-menu-btn em { font-style: normal; }
:root[data-tmx-im="on"] .tm-menu-btn { background: transparent !important; border-color: transparent !important; box-shadow: none !important; color: var(--dock-faint) !important; }

/* The menu: a pane of frosted glass that rises slowly; the scene stays visible through it.
   The existing controls are only re-dressed. Desktop: a compact card floating above the bottom edge. */
:root[data-tmx="on"] .tm-scrim { position: fixed; inset: 0; z-index: 34; background: var(--sh-veil); opacity: 0; pointer-events: none; transition: opacity 1s ease; }
:root[data-tmx="on"] .call-room.tm-menu-open .tm-scrim { opacity: 1; pointer-events: auto; transition-duration: 1.6s; }
:root[data-tmx="on"] .call-bottom {
  --tmx-x: calc(50% + var(--sidebar, 0px) / 2);
  position: fixed; left: var(--tmx-x); bottom: 22px; z-index: 35; width: min(700px, calc(100vw - var(--sidebar, 0px) - 48px)); max-width: none; margin: 0;
  max-height: calc(100dvh - 44px); overflow-y: auto; overscroll-behavior: contain; scrollbar-width: none;
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-content: start; gap: 12px; padding: 16px 20px 18px;
  border-radius: 24px; border: 1px solid var(--sh-glass-border);
  background: var(--sh-glass); box-shadow: var(--sh-glass-shadow);
  -webkit-backdrop-filter: blur(26px) saturate(150%); backdrop-filter: blur(26px) saturate(150%);
  opacity: 0; transform: translate(-50%, 36px) scale(.985); transform-origin: 50% 100%; visibility: hidden;
  transition: opacity .75s ease, transform .9s cubic-bezier(.45, 0, .55, 1), visibility 0s linear .9s;
}
:root[data-tmx-im="on"] .call-bottom { --tmx-x: 50%; width: min(700px, calc(100vw - 48px)); }
:root[data-tmx="on"] .call-room.tm-menu-open .call-bottom {
  opacity: 1; transform: translate(-50%, 0); visibility: visible;
  transition: opacity 1.1s ease, transform 1.4s cubic-bezier(.16, 1, .3, 1), visibility 0s;
}
:root[data-tmx="on"] .call-bottom::-webkit-scrollbar { display: none; }
/* the scene steps back a little while the menu is up */
:root[data-tmx="on"] :is(.subtitle-area, .tm-dock, .tm-voice) { transition: opacity 1.2s ease; }
:root[data-tmx="on"] .call-room.tm-menu-open :is(.subtitle-area, .tm-dock, .tm-voice) { opacity: .16; transition-duration: .9s; }
/* contents arrive one after another */
@keyframes tmx-rise { from { opacity: 0; transform: translateY(16px); filter: blur(3px); } to { opacity: 1; transform: none; filter: none; } }
:root[data-tmx="on"] body[data-motion=gentle] .call-room.tm-menu-open .call-bottom > :is(.tm-sheet-head, #microphone-controls, #input-area, .tm-sheet-note, .tm-sheet-nav),
:root[data-tmx="on"] body[data-motion=gentle] .call-room.tm-menu-open .call-actions > * { animation: tmx-rise 1.2s cubic-bezier(.16, 1, .3, 1) .12s backwards; }
:root[data-tmx="on"] .call-room.tm-menu-open .call-bottom > :is(#microphone-controls, #input-area) { animation-delay: .22s; }
:root[data-tmx="on"] .call-room.tm-menu-open .call-actions > :nth-child(1) { animation-delay: .3s; }
:root[data-tmx="on"] .call-room.tm-menu-open .call-actions > :nth-child(2) { animation-delay: .36s; }
:root[data-tmx="on"] .call-room.tm-menu-open .call-actions > :nth-child(3) { animation-delay: .42s; }
:root[data-tmx="on"] .call-room.tm-menu-open .call-actions > :nth-child(4) { animation-delay: .48s; }
:root[data-tmx="on"] .call-room.tm-menu-open .call-actions > :nth-child(5) { animation-delay: .54s; }
:root[data-tmx="on"] .call-room.tm-menu-open .call-actions > :nth-child(n+6) { animation-delay: .6s; }
:root[data-tmx="on"] .call-room.tm-menu-open .call-bottom > :is(.tm-sheet-note, .tm-sheet-nav) { animation-delay: .7s; }

:root[data-tmx="on"] .tm-sheet-head { order: 0; grid-column: 1 / -1; text-align: left; text-shadow: var(--sh-legible); }
:root[data-tmx="on"] .tm-handle { display: block; width: 44px; height: 14px; margin: -4px auto 4px; padding: 0; border: 0; background: none; box-shadow: none; cursor: pointer; position: relative; }
:root[data-tmx="on"] .tm-handle::before { content: ''; position: absolute; left: 0; right: 0; top: 5px; height: 4px; border-radius: 2px; background: var(--sh-handle); transition: background .5s ease; }
:root[data-tmx="on"] .tm-handle:hover::before { background: var(--sh-sub); }
:root[data-tmx="on"] .tm-sheet-head h2 { margin: 0; font-family: var(--yx-display); font-weight: 600; font-size: 19px; letter-spacing: .16em; color: var(--sh-ink); }
:root[data-tmx="on"] .tm-sheet-head p { margin: 6px 0 0; font-size: 12px; letter-spacing: .08em; color: var(--sh-sub); }
:root[data-tmx="on"] .call-bottom > #microphone-controls {
  order: 1; display: flex; flex-wrap: nowrap; align-items: center; justify-content: space-between; gap: 12px; width: 100%; margin: 0; min-height: 52px;
  padding: 7px 8px 7px 16px; border-radius: 16px; background: var(--sh-tile); border: 1px solid var(--sh-tile-border); box-shadow: none;
}
:root[data-tmx="on"] .call-bottom:has(> #input-area[hidden]) > #microphone-controls { grid-column: 1 / -1; }
:root[data-tmx="on"] .call-bottom > #microphone-controls #micstate { order: -1; flex: 1; min-width: 0; text-align: left; padding: 0; font-size: 12.5px; color: var(--sh-text); opacity: .82; }
:root[data-tmx="on"] .call-bottom > #microphone-controls meter { display: none; }
:root[data-tmx="on"] .call-bottom > #microphone-controls #mic { flex: 0 0 auto; border-radius: 999px; padding: 9px 16px; font-size: 12px; }
:root[data-tmx="on"] .call-bottom > #voice-transcript { display: none; }
:root[data-tmx="on"] .call-bottom > #input-area { order: 2; margin: 0; align-self: stretch; }
:root[data-tmx="on"] .call-bottom > #input-area form { height: 100%; }
:root[data-tmx="on"] .call-bottom > #input-area input { background: var(--sh-tile) !important; border-color: var(--sh-tile-border) !important; box-shadow: none !important; }
:root[data-tmx="on"] .call-bottom > .call-actions {
  order: 3; grid-column: 1 / -1; display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; width: 100%;
  margin: 0; padding: 0; border: 0 !important; background: none !important; box-shadow: none !important; -webkit-backdrop-filter: none; backdrop-filter: none;
}
:root[data-tmx="on"] .call-bottom > .call-actions:has(> #resume:not([hidden])) { grid-template-columns: repeat(5, minmax(0, 1fr)); }
:root[data-tmx="on"] .call-actions :is(button, .button) {
  display: flex !important; flex-direction: column; align-items: flex-start; justify-content: flex-start; gap: 4px; min-height: 80px; margin: 0;
  padding: 13px 14px; border-radius: 16px !important; border: 1px solid var(--sh-tile-border) !important;
  background: var(--sh-tile) !important; color: var(--sh-text) !important; font-size: 14.5px; letter-spacing: .08em; text-align: left; text-decoration: none;
  box-shadow: none !important; text-shadow: var(--sh-legible);
  transition: background .6s ease, border-color .6s ease, box-shadow .6s ease, transform .6s cubic-bezier(.2, .7, .2, 1);
}
:root[data-tmx="on"] .call-actions :is(button, .button):hover:not(:disabled) { background: var(--sh-tile-hover) !important; border-color: var(--sh-tile-hover-border) !important; box-shadow: 0 0 24px -10px var(--sh-tile-hover-border) !important; }
:root[data-tmx="on"] .call-actions :is(button, .button):active:not(:disabled) { transform: scale(.98); transition-duration: .15s; }
:root[data-tmx="on"] .call-actions :is(button, .button):disabled { opacity: .42; }
:root[data-tmx="on"] .call-actions [hidden] { display: none !important; }
:root[data-tmx="on"] .call-actions :is(button, .button) > b { display: none !important; }
:root[data-tmx="on"] .call-actions :is(button, .button)::before {
  content: ''; width: 20px; height: 20px; margin-bottom: 4px; background: var(--sh-icon);
  -webkit-mask: var(--tm-icon) center / contain no-repeat; mask: var(--tm-icon) center / contain no-repeat;
  transition: transform .7s cubic-bezier(.2, .7, .2, 1);
}
:root[data-tmx="on"] .call-actions :is(button, .button):hover:not(:disabled)::before { transform: translateY(-2px); }
:root[data-tmx="on"] .call-actions :is(button, .button)::after { content: attr(data-x); font-size: 11px; letter-spacing: .06em; color: var(--sh-tilesub); }
:root[data-tmx="on"] #stop { --tm-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6'%3E%3Cpath d='M9 5v14M15 5v14'/%3E%3C/svg%3E"); }
:root[data-tmx="on"] #stop::after { content: '先别说了'; }
:root[data-tmx="on"] #quiet { --tm-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6'%3E%3Cpath d='M17 4.5a8 8 0 1 0 2.5 13A7 7 0 0 1 17 4.5z'/%3E%3C/svg%3E"); }
:root[data-tmx="on"] #quiet::after { content: '只留下环境声'; }
:root[data-tmx="on"] #resume { --tm-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6'%3E%3Cpath d='M8 5l11 7-11 7z'/%3E%3C/svg%3E"); }
:root[data-tmx="on"] #resume::after { content: '回到陪伴'; }
:root[data-tmx="on"] #toggle-input { --tm-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6'%3E%3Cpath d='M4 20l4-1 11-11-3-3L5 16z'/%3E%3C/svg%3E"); }
:root[data-tmx="on"] #toggle-input::after { content: '不想出声的时候'; }
:root[data-tmx="on"] :is(.call-actions a.button, .call-actions #call-sound) { --tm-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6'%3E%3Cpath d='M3 15c2.5-2 4.5-2 7 0s4.5 2 7 0 3-1.5 4-1'/%3E%3Cpath d='M3 19c2.5-2 4.5-2 7 0s4.5 2 7 0 3-1.5 4-1'/%3E%3Cpath d='M12 4v7'/%3E%3C/svg%3E"); }
:root[data-tmx="on"] .call-actions a.button::after { content: '音量、背景声、声线'; }
:root[data-tmx="on"] #halt { --tm-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6'%3E%3Cpath d='M4 9h4l5-4v14l-5-4H4z'/%3E%3Cpath d='M16 9l5 6M21 9l-5 6'/%3E%3C/svg%3E"); }
:root[data-tmx="on"] #halt::after { content: '所有声音停下'; }
/* desktop: 全部静音 and 晚安 share the last row */
:root[data-tmx="on"] .call-actions #halt { grid-column: 1 / 2; order: 98; flex-direction: row; align-items: center; justify-content: center; gap: 10px; min-height: 54px; padding: 0 12px; font-size: 14px; }
:root[data-tmx="on"] .call-actions #halt::before { margin: 0; width: 18px; height: 18px; }
:root[data-tmx="on"] .call-actions #halt::after { display: none; }
:root[data-tmx="on"] .call-actions #end {
  grid-column: 2 / -1; order: 99; position: relative; overflow: hidden; align-items: center; justify-content: center; min-height: 54px; font-size: 0 !important;
  background: var(--sh-cta) !important; border: 0 !important; color: var(--sh-cta-ink) !important; text-shadow: none;
  box-shadow: 0 16px 34px -16px var(--sh-cta-glow), inset 0 1px 0 rgba(255, 255, 255, .5) !important;
}
/* a slow band of light crosses 晚安 when the pointer rests on it */
:root[data-tmx="on"] .call-actions #end::before {
  content: ''; position: absolute; inset: 0; width: auto; height: auto; margin: 0; -webkit-mask: none; mask: none;
  background: linear-gradient(100deg, transparent 28%, rgba(255, 255, 255, .42) 50%, transparent 72%); transform: translateX(-110%);
  transition: transform 1.6s cubic-bezier(.4, 0, .2, 1);
}
:root[data-tmx="on"] .call-actions #end:hover:not(:disabled)::before { transform: translateX(110%); }
:root[data-tmx="on"] .call-actions #end::after { content: '晚安'; position: relative; font-family: var(--yx-display); font-weight: 600; font-size: 16px; letter-spacing: .5em; padding-left: .5em; color: var(--sh-cta-ink); }
:root[data-tmx="on"] .call-actions #end:hover:not(:disabled) { filter: brightness(1.04); background: var(--sh-cta) !important; box-shadow: 0 18px 40px -14px var(--sh-cta-glow), inset 0 1px 0 rgba(255, 255, 255, .5) !important; }
:root[data-tmx="on"] .tm-sheet-note { order: 4; grid-column: 1 / -1; margin: -2px 0 0; text-align: center; font-size: 11px; letter-spacing: .1em; color: var(--sh-sub); text-shadow: var(--sh-legible); }
:root[data-tmx="on"] .tm-sheet-nav { order: 5; grid-column: 1 / -1; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; gap: 6px 16px; padding-top: 12px; border-top: 1px solid var(--sh-rule); }
:root[data-tmx="on"] .tm-sheet-nav a { display: inline-block; font-size: 12px; letter-spacing: .14em; color: var(--sh-nav); text-decoration: none; padding: 6px 2px; border: 0; border-radius: 0; background: none !important; box-shadow: none !important; }
:root[data-tmx="on"] .tm-sheet-nav a::before { display: none !important; }
:root[data-tmx="on"] .tm-sheet-nav a:hover { color: var(--sh-ink); }
:root[data-tmx="on"] .call-bottom .input-note { display: none; }

/* Words (after the 天井 sketch): her last line stays faintly above the new one, which arrives out of a blur;
   your words sit low in the room, with a quiet "她在听" and a glow rising from the bottom while she listens. */
:root[data-tmx="on"] .tm-prev {
  min-height: 1.8em; margin: 0 0 10px; font-family: var(--tm-mincho); font-size: 14px; line-height: 1.8; letter-spacing: .08em;
  color: var(--prev-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
@keyframes tm-shift { from { transform: translateY(18px); opacity: 0; filter: blur(2px); } to { transform: none; opacity: 1; filter: none; } }
:root[data-tmx="on"] body[data-motion=gentle] .tm-prev.tm-shift { animation: tm-shift 1.8s cubic-bezier(.2, .7, .2, 1) both; }
:root[data-tmx="on"] #current-subtitle { font-family: var(--tm-mincho); font-weight: 500; }
@keyframes tm-in { from { opacity: 0; filter: blur(8px); transform: translateY(8px); } 60% { filter: blur(1px); } to { opacity: 1; filter: blur(0); transform: none; } }
:root[data-tmx="on"] body[data-motion=gentle] #current-subtitle.yx-reveal { -webkit-mask-image: none; mask-image: none; animation: tm-in 2.6s cubic-bezier(.2, .7, .2, 1) both; }
:root[data-tmx="on"] .tm-voice {
  position: absolute; left: 50%; bottom: 84px; z-index: 2; width: min(640px, 86%); transform: translateX(-50%);
  display: flex; flex-direction: column; align-items: center; gap: 6px; text-align: center; pointer-events: none;
}
:root[data-tmx="on"] .tm-listen { display: inline-flex; align-items: center; gap: 9px; font-size: 11px; letter-spacing: .32em; color: var(--you-tag); opacity: 0; transition: opacity 1.4s ease; }
:root[data-tmx="on"] .tm-listen i { width: 6px; height: 6px; border-radius: 50%; background: var(--you-ink); box-shadow: 0 0 10px var(--you-ink); }
:root[data-tmx="on"] .call-room:has(#orb[data-state=listening]) .tm-listen { opacity: 1; }
:root[data-tmx="on"] body[data-motion=gentle] .call-room:has(#orb[data-state=listening]) .tm-listen i { animation: tm-dot 1.8s ease-in-out infinite; }
:root[data-tmx="on"] .tm-you {
  margin: 0; max-width: 100%; font-size: 17px; line-height: 1.85; letter-spacing: .08em; color: var(--you-ink); text-shadow: 0 0 16px var(--you-glow), var(--sh-legible);
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden;
  opacity: 0; filter: blur(5px); transform: translateY(10px);
  transition: opacity 1.8s ease, filter 1.8s ease, transform 1.8s cubic-bezier(.2, .7, .2, 1);
}
:root[data-tmx="on"] .tm-you.show { opacity: 1; filter: none; transform: none; }
:root[data-tmx="on"] .tm-voice-glow {
  position: absolute; left: 50%; bottom: -170px; z-index: 0; width: min(760px, 92%); height: 360px; pointer-events: none;
  background: radial-gradient(ellipse 50% 50% at 50% 100%, var(--voice-glow), transparent 72%);
  opacity: 0; transform: translateX(-50%) scale(.9); transform-origin: 50% 100%; transition: opacity 1.8s ease;
}
:root[data-tmx="on"] .call-room:has(#orb[data-state=listening]) .tm-voice-glow { opacity: 1; }
@keyframes tmx-voice { 0%, 100% { transform: translateX(-50%) scale(.9); } 50% { transform: translateX(-50%) scale(1.04); } }
:root[data-tmx="on"] body[data-motion=gentle] .call-room:has(#orb[data-state=listening]) .tm-voice-glow { animation: tmx-voice 3.8s ease-in-out infinite; }

/* After goodnight: lights out; a tap brings the controls back for a while */
:root[data-tmx="on"] .call-presence { position: relative; }
:root[data-tmx="on"] .tm-goodnight {
  position: absolute; left: 50%; top: 44.5%; transform: translate(-50%, -50%); margin: 0; z-index: 1;
  font-family: var(--tm-kana); font-size: 18px; letter-spacing: .36em; padding-left: .36em; white-space: nowrap; text-align: center;
  color: var(--gn-ink); text-shadow: 0 0 18px var(--gn-glow);
  opacity: 0; pointer-events: none; transition: opacity 3s ease, filter 3s ease; filter: blur(6px);
}
:root[data-tmx="on"] .tm-goodnight small { display: block; margin-top: 14px; font-family: inherit; font-size: 10px; letter-spacing: .3em; color: var(--gn-sub); }
:root[data-tmx="on"] .call-room.tm-end .tm-goodnight { opacity: 1; filter: blur(0); transition-delay: 1.5s; }
:root[data-tmx="on"] .call-room.tm-end :is(.record-player, .call-presence h1, .call-state) { opacity: 0; transition: opacity 3s ease; }
:root[data-tmx="on"] .call-room.tm-end :is(.call-top, .subtitle-area > :not(.lamp-callgo), .tm-dock, .tm-aside, .tm-voice, #statusdetail) { opacity: .08; transition: opacity 2.5s ease; }
:root[data-tmx="on"] .call-room.tm-end:is(.tm-wake, :focus-within) :is(.call-top, .subtitle-area > :not(.lamp-callgo), .tm-dock, .tm-aside, #statusdetail) { opacity: 1; transition-duration: 1s; }
:root[data-tmx="on"][data-theme="soft-anime"] .call-room.tm-end > .art-image { opacity: .5; filter: saturate(.6) brightness(.82); transition: opacity 4s ease, filter 4s ease; }

/* Phones: "更多" becomes the same kind of sheet; dialogs share the sheet's surface */
@media (max-width: 850px) {
  :root[data-tmx="on"] .call-bottom, :root[data-tmx-im="on"] .call-bottom {
    --tmx-x: 50%; width: calc(100vw - 20px); bottom: calc(10px + env(safe-area-inset-bottom, 0px)); grid-template-columns: minmax(0, 1fr);
    padding: 12px 16px 16px; border-radius: 22px; max-height: calc(100dvh - 30px);
  }
  /* outside immersive mode the phone tab bar stays, and the menu rises from just above it */
  :root[data-tmx="on"]:not([data-tmx-im="on"]) .call-bottom { bottom: calc(var(--mobile-nav-height, 66px) + 8px); max-height: calc(100dvh - var(--mobile-nav-height, 66px) - 40px); }
  :root[data-tmx="on"] .call-bottom > .call-actions, :root[data-tmx="on"] .call-bottom > .call-actions:has(> #resume:not([hidden])) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  :root[data-tmx="on"] .call-actions #halt { grid-column: 1 / -1; justify-content: flex-start; min-height: 0; padding: 12px 15px; }
  :root[data-tmx="on"] .call-actions #halt::after { display: block; margin-left: auto; }
  :root[data-tmx="on"] .call-actions #end { grid-column: 1 / -1; }
  :root[data-tmx="on"] #mobile-more:not([hidden]) {
    position: fixed; left: 0; right: 0; top: auto; bottom: var(--mobile-nav-height, 66px); z-index: 31; max-height: 70dvh; overflow: auto;
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; padding: 40px 16px 16px;
    border-radius: 22px 22px 0 0; border: 1px solid var(--sh-border); border-bottom: 0; background: var(--sh-bg); box-shadow: var(--sh-shadow);
    -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
  }
  :root[data-tmx="on"] #mobile-more:not([hidden])::before { content: '更多'; position: absolute; left: 20px; top: 14px; font-family: var(--yx-display); font-weight: 600; font-size: 14px; letter-spacing: .3em; color: var(--sh-ink); }
  :root[data-tmx="on"] #mobile-more a { display: flex; align-items: center; min-height: 50px; margin: 0; padding: 0 14px; border-radius: 14px; background: var(--sh-tile); border: 1px solid var(--sh-tile-border); color: var(--sh-text); font-size: 14px; letter-spacing: .1em; text-decoration: none; }
}
:root[data-tmx="on"] dialog { border-radius: 22px; border: 1px solid var(--sh-border); background: var(--sh-bg); color: var(--sh-text); box-shadow: var(--sh-shadow), 0 40px 90px -30px rgba(0, 0, 0, .45); }
:root[data-tmx="on"] dialog::backdrop { background: var(--sh-scrim); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }
:root[data-tmx="on"] #toast { border-radius: 999px; background: var(--dock-bg); border: 1px solid var(--dock-border); color: var(--dock-ink); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); }

/* =====================================================================
   陪伴 — 樱语: keeps its window and artwork; only the layout follows the shared one
   ===================================================================== */
:root[data-tmx="on"][data-theme="soft-anime"] .tm-prev { text-align: left; font-size: 13px; }
:root[data-tmx="on"][data-theme="soft-anime"] .subtitle-area { margin-bottom: 4px; }
:root[data-tmx-im="on"][data-theme="soft-anime"] .call-room { padding-top: 28px; }

/* =====================================================================
   陪伴 — 月夜: the observatory
   ===================================================================== */
:root[data-tm="on"] .call-room {
  --tm-dial: clamp(250px, min(46dvh, 38vw), 450px);
  --disc-size: calc(var(--tm-dial) * .3);
  --label-size: calc(var(--tm-dial) * .3);
  padding: 0 clamp(18px, 3vw, 44px) 14px; background: transparent !important;
  border: 1px solid rgba(200, 212, 255, .14) !important; border-radius: 18px !important; box-shadow: 0 30px 70px -40px rgba(0, 0, 12, .9) !important;
}
:root[data-tm="on"][data-tmx-im="on"] .call-room { --tm-dial: clamp(290px, min(57dvh, 46vw), 600px); padding: 0 clamp(18px, 4vw, 60px) 14px; border: 0 !important; border-radius: 0 !important; box-shadow: none !important; }
:root[data-tm="on"] .call-room > .art-image { opacity: .92; object-position: var(--x, 50%) 72%; -webkit-mask-image: none; mask-image: none; transition: opacity 4s ease; }
:root[data-tm="on"] .room-glow {
  background: linear-gradient(180deg, rgba(3, 6, 28, .66) 0%, rgba(5, 9, 36, .38) 40%, rgba(4, 8, 30, .22) 66%, rgba(3, 6, 24, .5) 100%),
    radial-gradient(ellipse 120% 95% at 50% 42%, transparent 58%, rgba(2, 4, 16, .45) 100%) !important;
}
:root[data-tm="on"] .call-room::after { background: radial-gradient(ellipse 40% 36% at 50% 38%, rgba(184, 188, 235, .07), transparent 70%); }
:root[data-tm="on"] .tm-sky { position: absolute; inset: 0; z-index: -1; pointer-events: none; overflow: hidden; }
.tm-glint { position: absolute; width: 22px; height: 22px; margin: -11px 0 0 -11px; filter: drop-shadow(0 0 4px rgba(210, 220, 255, .95)) drop-shadow(0 0 10px rgba(170, 190, 255, .45)); }
.tm-glint path { fill: #f4f7ff; }
.tm-glint.s { width: 15px; height: 15px; margin: -7.5px 0 0 -7.5px; }
.tm-triangle { position: absolute; left: 0; top: 0; width: 100%; height: 100%; overflow: visible; }
.tm-triangle line { stroke: rgba(214, 222, 255, .2); stroke-width: .8; stroke-dasharray: 2 5; }
.tm-starname { position: absolute; font-family: var(--tm-kana); font-size: 11px; letter-spacing: .4em; color: rgba(206, 214, 244, .5); white-space: nowrap; transform: translate(14px, -50%); }

:root[data-tm="on"] .call-top { position: static; display: flex; align-items: center; gap: 18px; flex: 0 0 auto; height: 58px; margin: 0; padding: 0; font-size: 13px; color: #c9d0ea; }
:root[data-tm="on"] .call-top .pill, :root[data-tm="on"] .call-top > a[href="#/history"] { display: none; }
:root[data-tm="on"] #call-clock { font-family: var(--tm-kana); font-size: 15px; letter-spacing: .16em; color: #dfe3f4; }
:root[data-tm="on"] .tm-tide-note { font-family: var(--tm-kana); font-size: 12px; letter-spacing: .3em; color: rgba(206, 220, 244, .62); }
:root[data-tm="on"] .call-top .night-caption {
  position: absolute; left: clamp(22px, 3vw, 56px); top: 120px; right: auto; z-index: 0;
  writing-mode: vertical-rl; font-family: var(--tm-kana); font-size: 15px; letter-spacing: .6em; line-height: 1;
  color: rgba(230, 234, 248, .6); opacity: 1; text-shadow: 0 0 14px rgba(10, 14, 40, .6);
}
:root[data-tm="on"] .tm-aside { position: absolute; right: clamp(22px, 3vw, 56px); top: 130px; display: flex; flex-direction: column; gap: 22px; font-size: 12px; letter-spacing: .14em; color: #9ea8d4; }
:root[data-tm="on"] .tm-aside > div { display: flex; flex-direction: column; gap: 4px; padding-left: 14px; border-left: 1px solid rgba(170, 179, 220, .28); }
:root[data-tm="on"] .tm-aside .now { border-left-color: rgba(242, 212, 138, .8); }
:root[data-tm="on"] .tm-aside .tide { border-left-color: rgba(159, 216, 232, .45); }
:root[data-tm="on"] .tm-aside b { font-family: var(--tm-kana); font-weight: 500; font-size: 17px; letter-spacing: .3em; color: var(--tm-ink); }
:root[data-tm="on"] .tm-aside .now b { color: var(--tm-gold); text-shadow: 0 0 14px rgba(242, 212, 138, .45); }
:root[data-tm="on"] .tm-aside small { font-size: 11px; letter-spacing: .14em; color: #8e98c2; }
:root[data-tm="on"][data-tmx-im="on"] .tm-aside { top: 150px; }
:root[data-tm="on"][data-tmx-im="on"] .call-top .night-caption { top: 140px; }

:root[data-tm="on"] .call-presence { flex: 0 0 auto; width: var(--tm-dial); height: var(--tm-dial); max-width: 100%; margin: 0 auto 26px; padding: 0 !important; }
:root[data-tm="on"] .tm-astro { position: absolute; inset: 0; pointer-events: none; transition: opacity 4s ease; }
:root[data-tm="on"] .tm-astro > svg { display: block; width: 100%; height: 100%; overflow: visible; }
:root[data-tm="on"] .record-player { margin: calc(var(--tm-dial) * .445 - var(--disc-size) * .5) auto 0; transition: opacity 3s ease; }
:root[data-tm="on"] .record-player::before, :root[data-tm="on"] .record-player::after { display: none; }
:root[data-tm="on"] .record-disc .call-avatar { box-shadow: 0 0 0 1px rgba(255, 244, 214, .62), 0 0 0 7px rgba(10, 18, 62, .6), 0 0 70px 10px rgba(242, 212, 138, .22) !important; }
:root[data-tm="on"] body[data-playing=true] .record-disc .call-avatar { box-shadow: 0 0 0 1px rgba(255, 244, 214, .8), 0 0 0 7px rgba(10, 18, 62, .6), 0 0 80px 16px rgba(242, 212, 138, .32) !important; }
:root[data-tm="on"] .record-player:has(#orb[data-state=listening]) .record-disc .call-avatar { box-shadow: 0 0 0 1px rgba(190, 236, 246, .75), 0 0 0 7px rgba(10, 18, 62, .6), 0 0 66px 10px rgba(159, 216, 232, .28) !important; }
:root[data-tm="on"] .call-presence h1 { font-size: clamp(16px, calc(var(--tm-dial) * .042), 22px); margin: calc(var(--tm-dial) * .032) 0 2px; letter-spacing: .5em; color: var(--tm-ink); text-shadow: 0 0 18px rgba(120, 150, 230, .45); }
:root[data-tm="on"] .call-state { font-size: 12px; letter-spacing: .2em; color: #aab3dc; }
:root[data-tm="on"] .call-state .live-dot { width: 4px; height: 4px; }
:root[data-tm="on"] .call-presence #statusdetail { position: absolute; left: 50%; top: calc(100% + 2px); transform: translateX(-50%); width: max-content; max-width: min(90vw, 620px); margin: 0; text-align: center; font-size: 11px; color: #8f99c4; }
.tm-dial text { font-family: var(--tm-kana); }
.tm-plate { transform-box: view-box; transform-origin: 200px 200px; transform: rotate(var(--tm-angle, 0deg)); }
.tm-plate-bg { fill: url(#tm-plate-bg); }
.tm-frame { fill: none; stroke: url(#tm-rim); stroke-width: 1; }
.tm-ticks line { stroke: rgba(240, 232, 210, .42); stroke-width: .7; }
.tm-ticks line.major { stroke: rgba(246, 230, 190, .75); stroke-width: .9; }
.tm-dust-dots circle { fill: rgba(255, 250, 235, .62); }
.tm-figures path { fill: none; stroke: rgba(240, 232, 210, .3); stroke-width: .7; stroke-dasharray: 1; stroke-dashoffset: 0; transition: stroke 1.6s ease; }
.tm-figures circle { fill: #fff6dc; }
:root[data-tm="on"] body[data-playing=true] .tm-figures path { stroke: rgba(246, 226, 170, .5); }
@keyframes tm-draw { 0% { stroke-dashoffset: 1; stroke: rgba(255, 236, 190, .95); } 75% { stroke-dashoffset: 0; stroke: rgba(255, 236, 190, .9); } 100% { stroke-dashoffset: 0; } }
:root[data-tm="on"] body[data-motion=gentle] .tm-figures path.tm-draw { animation: tm-draw 3.4s cubic-bezier(.3, .1, .3, 1) both; filter: drop-shadow(0 0 2px rgba(242, 212, 138, .9)); }
.tm-tide { transform-box: view-box; transform-origin: 200px 200px; }
.tm-tide-rest { fill: none; stroke: rgba(206, 220, 255, .3); stroke-width: .8; }
.tm-tide-done { fill: none; stroke: var(--tm-gold); stroke-width: 1.1; filter: drop-shadow(0 0 2px rgba(242, 212, 138, .6)); transition: stroke 1.2s ease; }
.tm-now { fill: var(--tm-moon); transition: fill 1.2s ease; }
.tm-now-halo { fill: rgba(242, 212, 138, .24); transform-box: fill-box; transform-origin: center; transition: fill 1.2s ease; }
.tm-pointer { fill: var(--tm-gold); opacity: .85; }
.tm-stage { fill: rgba(206, 214, 244, .4); font-size: 12.5px; letter-spacing: 6px; transition: fill 1.6s ease; }
.tm-stage.past { fill: rgba(226, 230, 248, .6); }
.tm-stage.now { fill: var(--tm-gold); filter: drop-shadow(0 0 5px rgba(242, 212, 138, .75)); }
.tm-seps path { fill: rgba(236, 230, 212, .42); }
:root[data-tm="on"] .call-room:has(#orb[data-state=listening]) .tm-tide-done { stroke: var(--tm-cyan); filter: drop-shadow(0 0 2px rgba(159, 216, 232, .7)); }
:root[data-tm="on"] .call-room:has(#orb[data-state=listening]) .tm-now { fill: #e4f7fc; }
:root[data-tm="on"] .call-room:has(#orb[data-state=listening]) .tm-now-halo { fill: rgba(159, 216, 232, .28); }
:root[data-tm="on"] .call-room:has(#orb:is([data-state=quiet], [data-state=paused])) .tm-astro { opacity: .62; }
:root[data-tm="on"] .tm-astro::before, :root[data-tm="on"] .tm-astro::after {
  content: ''; position: absolute; left: 50%; top: 44.5%; width: var(--disc-size); height: var(--disc-size);
  margin: calc(var(--disc-size) / -2) 0 0 calc(var(--disc-size) / -2); border-radius: 50%; border: 1px solid rgba(159, 216, 232, .7); opacity: 0;
}
@keyframes tm-listen { 0% { transform: scale(1); opacity: calc(.25 + var(--yx-level, 0) * 1.2); } 100% { transform: scale(2.35); opacity: 0; } }
:root[data-tm="on"] body[data-motion=gentle] .call-room:has(#orb[data-state=listening]) .tm-astro::before { animation: tm-listen 3.8s cubic-bezier(.2, .7, .3, 1) infinite; }
:root[data-tm="on"] body[data-motion=gentle] .call-room:has(#orb[data-state=listening]) .tm-astro::after { animation: tm-listen 3.8s cubic-bezier(.2, .7, .3, 1) 1.9s infinite; }
@keyframes tm-sway { 0%, 100% { transform: rotate(-1.1deg); } 50% { transform: rotate(1.1deg); } }
@keyframes tm-halo { 0%, 100% { transform: scale(.8); opacity: .55; } 40% { transform: scale(1.25); opacity: 1; } }
@keyframes tm-pulse { 0%, 100% { opacity: .35; } 50% { opacity: 1; } }
@keyframes tm-breathe { 0%, 100% { opacity: .66; } 40% { opacity: 1; } }
@keyframes tm-glint { 0%, 64%, 100% { transform: scale(.66) rotate(0deg); opacity: .55; } 76% { transform: scale(1.06) rotate(12deg); opacity: 1; } 86% { transform: scale(.8) rotate(16deg); opacity: .75; } }
:root[data-tm="on"] body[data-motion=gentle] .tm-plate { transition: transform 1.05s linear; }
:root[data-tm="on"] body[data-motion=gentle] .tm-tide { animation: tm-sway 10s ease-in-out infinite; }
:root[data-tm="on"] body[data-motion=gentle] .tm-now-halo { animation: tm-halo 10s ease-in-out infinite; }
:root[data-tm="on"] body[data-motion=gentle][data-page=call] .tm-galaxy { animation: tm-breathe 10s ease-in-out infinite; }
:root[data-tm="on"] body[data-motion=gentle] .tm-glint { animation: tm-glint 9s ease-in-out infinite; }
.tm-glint:nth-child(2) { animation-delay: -1.4s !important; }
.tm-glint:nth-child(3) { animation-delay: -2.8s !important; }
.tm-glint:nth-child(4) { animation-delay: -4.1s !important; }
.tm-glint:nth-child(5) { animation-delay: -.7s !important; }
.tm-glint:nth-child(6) { animation-delay: -3.3s !important; }
:root[data-tm="on"] body[data-motion=gentle] .call-room:has(#orb:is([data-state=thinking], [data-state=recognizing])) .tm-pointer { animation: tm-pulse 1.8s ease-in-out infinite; }

/* 月夜 words: no window, light on the night */
:root[data-tm="on"] .subtitle-area {
  flex: 0 0 auto; width: min(900px, 100%); min-height: 0; margin: 0 auto; padding: 4px 12px 6px; text-align: center;
  background: radial-gradient(ellipse 58% 68% at 50% 52%, rgba(3, 6, 26, .5), transparent 76%) !important;
  border: 0 !important; box-shadow: none !important; -webkit-backdrop-filter: none; backdrop-filter: none;
}
:root[data-tm="on"] .subtitle-area::before, :root[data-tm="on"] .subtitle-area::after, :root[data-tm="on"] .subtitle-area > .adv-name { display: none !important; }
:root[data-tm="on"] #current-subtitle {
  margin: 0; text-align: center; font-size: 25px; line-height: 1.9; letter-spacing: .08em;
  color: #fbf8ef; text-shadow: 0 0 22px rgba(120, 140, 230, .5), 0 1px 3px rgba(4, 8, 32, .55); max-height: calc(25px * 1.9 * 3 + 4px);
}
:root[data-tm="on"]:not([data-tmx-im="on"]) #current-subtitle { font-size: 22px; max-height: calc(22px * 1.9 * 3 + 4px); }
:root[data-tm="on"] #subtitle-status { position: static; display: block; margin-top: 6px; text-align: center; font-size: 11px; letter-spacing: .14em; color: rgba(190, 200, 232, .5); }
:root[data-tm="on"] .tm-breath-hint { display: none; margin: 10px 0 0; font-size: 11px; letter-spacing: .3em; color: rgba(214, 226, 246, .52); }
:root[data-tm="on"] .call-room:has(#orb[data-state=quiet]) .tm-breath-hint { display: block; }
:root[data-tm="on"] .call-room.tm-end .tm-astro { opacity: .28; }
:root[data-tm="on"] .call-room.tm-end > .art-image { opacity: .22; }

/* =====================================================================
   Quiet motion: entering immersive mode, starlight, pages and headings (both themes)
   ===================================================================== */
/* Immersive mode: the room grows into the whole window while the rest fades (View Transitions where the
   browser has them; otherwise a slow dip through the background colour). */
:root.tmx-vt::view-transition-group(*) { animation-duration: 1.15s; animation-timing-function: cubic-bezier(.45, 0, .2, 1); }
:root.tmx-vt::view-transition-old(tmx-room), :root.tmx-vt::view-transition-new(tmx-room) { height: 100%; object-fit: cover; }
/* the two pictures of the room hand over through a short, soft dimming instead of overlapping */
@keyframes tmx-vt-out { 0% { opacity: 1; } 50%, 100% { opacity: 0; } }
@keyframes tmx-vt-in { 0%, 30% { opacity: 0; } 100% { opacity: 1; } }
:root.tmx-vt::view-transition-old(tmx-room) { animation-name: tmx-vt-out; mix-blend-mode: normal; }
:root.tmx-vt::view-transition-new(tmx-room) { animation-name: tmx-vt-in; mix-blend-mode: normal; }
:root.tmx-vt .call-room { view-transition-name: tmx-room; }
:root[data-tmx="on"] .tmx-veil { position: fixed; inset: 0; z-index: 60; background: var(--vt-dip); opacity: 0; pointer-events: none; transition: opacity .9s ease; }
:root[data-tmx="on"] .tmx-veil.on { opacity: 1; transition-duration: .45s; }

/* Starlight: a few stars brighten for a moment now and then, each on its own slow clock */
:root[data-tmx="on"] .tmx-twinkle { position: absolute; inset: 0; z-index: -1; pointer-events: none; overflow: hidden; }
:root[data-tmx="on"] body > .tmx-twinkle { position: fixed; z-index: auto; }
:root[data-tmx="on"] body[data-page=call] > .tmx-twinkle { display: none; }
:root[data-tmx="on"] .tmx-tw {
  position: absolute; width: var(--s, 18px); height: var(--s, 18px); margin: calc(var(--s, 18px) / -2) 0 0 calc(var(--s, 18px) / -2);
  opacity: var(--tw-rest); transform: scale(.3);
  background: radial-gradient(circle, var(--tw-core) 0 5%, var(--tw-halo) 12%, transparent 34%);
}
:root[data-tmx="on"] .tmx-tw::before, :root[data-tmx="on"] .tmx-tw::after {
  content: ''; position: absolute; left: 0; right: 0; top: 50%; height: 1px; margin-top: -.5px;
  background: linear-gradient(90deg, transparent, var(--tw-ray), transparent);
}
:root[data-tmx="on"] .tmx-tw::after { transform: rotate(90deg); }
@keyframes tmx-tw {
  0%, 82%, 100% { opacity: var(--tw-rest); transform: scale(.3) rotate(0deg); }
  88% { opacity: 1; transform: scale(1) rotate(8deg); }
  92% { opacity: .55; transform: scale(.66) rotate(14deg); }
}
:root[data-tmx="on"] body[data-motion=gentle] .tmx-tw { animation: tmx-tw var(--d, 14s) ease-in-out var(--dl, 0s) infinite; }
:root[data-tmx="on"][data-theme="soft-anime"] .tmx-tw:nth-child(n+9) { display: none; }

/* The mark: the lamp on the island breathes very slowly */
@keyframes tmx-lamp { 0%, 100% { opacity: .8; } 50% { opacity: 1; } }
@keyframes tmx-lamp-halo { 0%, 100% { opacity: .12; transform: scale(.85); } 50% { opacity: .3; transform: scale(1.3); } }
:root[data-tmx="on"] .tm-lamp-halo { transform-box: fill-box; transform-origin: center; }
:root[data-tmx="on"] body[data-motion=gentle] .tm-lamp { animation: tmx-lamp 7s ease-in-out infinite; }
:root[data-tmx="on"] body[data-motion=gentle] .tm-lamp-halo { animation: tmx-lamp-halo 7s ease-in-out infinite; }

/* Pages arrive softly; their headings are written in light once */
@keyframes tmx-page { from { opacity: 0; transform: translateY(10px); filter: blur(4px); } }
:root[data-tmx="on"] body[data-motion=gentle] .page:not([hidden]):not(.call-page) { animation: tmx-page 1s cubic-bezier(.2, .7, .2, 1) backwards; }
@keyframes tmx-title { from { opacity: 0; letter-spacing: .36em; filter: blur(6px); } }
@keyframes tmx-sheen { from { background-position: 100% 0; } to { background-position: 0 0; } }
@keyframes tmx-eyebrow { from { opacity: 0; letter-spacing: .7em; } }
:root[data-tmx="on"] .page-heading h1 {
  background: linear-gradient(100deg, var(--h-ink) 0 40%, var(--h-sheen) 50%, var(--h-ink) 60% 100%) 100% 0 / 250% 100% no-repeat;
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
:root[data-tmx="on"] body[data-motion=gentle] .page:not([hidden]) .page-heading h1 { animation: tmx-title 1.7s cubic-bezier(.2, .7, .2, 1) .1s backwards, tmx-sheen 3s cubic-bezier(.4, 0, .2, 1) 1s both; }
:root[data-tmx="on"] body[data-motion=gentle] .page:not([hidden]) .page-heading .eyebrow { animation: tmx-eyebrow 2s cubic-bezier(.2, .7, .2, 1) backwards; }

/* Settings tabs: the light plate glides to the chosen tab */
:root[data-tmx="on"] .tm-tab-ink {
  position: absolute; left: 0; top: 4px; bottom: 4px; width: 0; border-radius: 999px; pointer-events: none;
  background: var(--yx-plate); box-shadow: 0 8px 22px -10px var(--sh-cta-glow);
  transition: transform .7s cubic-bezier(.22, .8, .24, 1), width .7s cubic-bezier(.22, .8, .24, 1);
}
:root[data-tmx="on"] .tm-tab-ink.still { transition: none; }
:root[data-tmx="on"] .tm-tabs.has-ink button { position: relative; z-index: 1; }
:root[data-tmx="on"] .tm-tabs.has-ink button[aria-selected=true] { background: none; box-shadow: none; }

/* =====================================================================
   Narrower windows and phones
   ===================================================================== */
@media (max-width: 1240px) {
  :root[data-tm="on"]:not([data-tmx-im="on"]) :is(.tm-triangle, .tm-starname, .tm-aside) { display: none; }
  :root[data-tm="on"]:not([data-tmx-im="on"]) .call-top .night-caption { display: none; }
}
@media (max-width: 1180px) {
  :root[data-tm="on"] :is(.tm-triangle, .tm-starname, .tm-aside) { display: none; }
}
@media (max-width: 900px) {
  :root[data-tmx="on"] .tmx-nav { display: none; }
  :root[data-tmx="on"] .tmx-top-bar { justify-content: space-between; }
  :root[data-tm="on"] .call-top { gap: 14px; height: 52px; }
  :root[data-tm="on"] .call-top .night-caption { display: none; }
}
@media (min-width: 901px) { :root[data-tmx="on"] .tm-sheet-nav { display: none; } }
@media (max-width: 640px) {
  :root[data-tm="on"] .call-room { --tm-dial: min(78vw, 330px, 40dvh); padding: 0 14px 10px; border-radius: 18px !important; }
  :root[data-tm="on"][data-tmx-im="on"] .call-room { --tm-dial: min(86vw, 360px, 46dvh); padding: 0 16px calc(10px + env(safe-area-inset-bottom, 0px)); }
  :root[data-tmx="on"] .tmx-brand small, :root[data-tm="on"] .tm-tide-note { display: none; }
  :root[data-tm="on"] .call-presence { margin: 6px auto 22px; }
  :root[data-tm="on"] #current-subtitle, :root[data-tm="on"]:not([data-tmx-im="on"]) #current-subtitle { font-size: 18px; line-height: 1.9; max-height: calc(18px * 1.9 * 4 + 4px); }
  :root[data-tmx="on"] .tm-prev { font-size: 12px; }
  :root[data-tmx="on"] .tm-you { font-size: 15px; }
  :root[data-tmx="on"] .tm-voice { bottom: 76px; width: 90%; }
  :root[data-tmx="on"] .tm-dock { gap: 8px; }
  :root[data-tmx="on"] .tm-say { width: 100%; padding-top: 10px; }
  :root[data-tmx="on"] .tm-say button { padding: 8px 14px; letter-spacing: .1em; }
  :root[data-tmx="on"] .tm-menu-btn em { display: none; }
  :root[data-tmx="on"] .tm-dock button { padding: 8px 13px; letter-spacing: .1em; }
  :root[data-tmx="on"] .call-actions :is(button, .button) { min-height: 78px; padding: 12px 13px; font-size: 14px; }
  :root[data-tmx="on"] .tm-tabs { width: 100%; justify-content: space-between; }
  :root[data-tmx="on"] .tm-tabs button { flex: 1; padding: 9px 0; letter-spacing: .16em; }
  :root[data-tmx="on"] [data-view=settings] .page-heading > .pill { display: none; }
  :root[data-tmx="on"] [data-view=settings] .page-heading { margin-bottom: 14px; }
  :root[data-tmx="on"] [data-view=settings] .page-heading .muted { display: none; }
  :root[data-tmx="on"] [data-tm-tab] #voice-selection-status { font-size: 12px; line-height: 1.7; }
  :root[data-tmx="on"] [data-tm-tab] .soundcard > p.hint:not(#voice-selection-status) { display: none; }
  :root[data-tmx="on"] [data-tm-tab] :is(.soundcard, .theme-selector) .switch-label small { font-size: 11px; line-height: 1.6; }
  :root[data-tmx="on"] [data-tm-tab] .soundcard > label { margin-top: 12px; }
  :root[data-tmx="on"] [data-tm-tab] .soft-card { padding: 18px 16px; }
}
@media (max-height: 760px) and (min-width: 641px) {
  :root[data-tm="on"] .call-room { --tm-dial: clamp(230px, 40dvh, 330px); }
  :root[data-tm="on"][data-tmx-im="on"] .call-room { --tm-dial: clamp(260px, 54dvh, 420px); }
}
@media (prefers-reduced-motion: reduce) {
  :root[data-tmx="on"] :is(.tm-galaxy, .tm-glint, .tm-tide, .tm-now-halo, .tm-pointer, .tm-prev, .tm-mic-chip i, .tm-figures path) { animation: none !important; }
  :root[data-tm="on"] .tm-astro::before, :root[data-tm="on"] .tm-astro::after { animation: none !important; }
  :root[data-tm="on"] .tm-plate { transition: none !important; }
  :root[data-tmx="on"] :is(.call-bottom, .tm-scrim, .tmx-top, .tmx-top-bar, .tmx-nav a, .tmx-veil, .tm-tab-ink) { transition: none !important; }
  :root[data-tmx="on"] :is(.tmx-tw, .tm-lamp, .tm-lamp-halo, .tm-voice-glow, .tm-listen i, .page, .page-heading h1, .page-heading .eyebrow, .call-bottom > *, .call-actions > *) { animation: none !important; }
  :root[data-tmx="on"] body[data-motion=gentle] #current-subtitle.yx-reveal { animation: none; }
}

/* DEV-20261011-11: the sheet already opens with a typing row, so 文字接话 is not repeated as a tile;
   three tiles remain (打断语音 · 安静陪伴 · 声音) and 晚安 stays the largest. Remove this block to restore. */
:root[data-tmx="on"] .call-bottom > .call-actions > #toggle-input { display: none !important; }
:root[data-tmx="on"] .call-bottom > .call-actions { grid-template-columns: repeat(3, minmax(0, 1fr)); }
:root[data-tmx="on"] .call-bottom > .call-actions:has(> #resume:not([hidden])) { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 640px) {
  :root[data-tmx="on"] .call-bottom > .call-actions, :root[data-tmx="on"] .call-bottom > .call-actions:has(> #resume:not([hidden])) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  :root[data-tmx="on"] .call-actions :is(button, .button)::after { display: none; }
}

/* =====================================================================
   夜话 · 跨夜记忆微光 (.tm-whisper) & 枕边息屏模式 (.tm-blank-veil)
   ===================================================================== */
:root[data-tmx="on"] .tm-whisper {
  margin: 6px auto 2px;
  display: inline-flex; align-items: center; gap: 7px;
  font-size: 12px; letter-spacing: .12em;
  color: var(--yx-ink-faint, #8e97bb);
  opacity: .84;
}
:root[data-tmx="on"] .tm-whisper[hidden] { display: none !important; }
:root[data-tmx="on"] .tm-whisper i {
  font-style: normal; font-size: 10px;
  color: var(--yx-accent, #e6cd8f);
  opacity: .85;
}
:root[data-tmx="on"] .tm-blank-btn i {
  font-style: normal; font-size: 12px;
  color: var(--yx-accent, #e6cd8f);
}
:root[data-tmx="on"] .tm-blank-veil {
  position: fixed; inset: 0; z-index: 120;
  background: #020308;
  color: rgba(214, 222, 246, .28);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 14px; padding: 32px; text-align: center;
  cursor: pointer; user-select: none;
  animation: tmx-page-in .7s ease both;
}
:root[data-tmx="on"][data-theme="soft-anime"] .tm-blank-veil {
  background: #0c080a;
  color: rgba(242, 218, 225, .3);
}
:root[data-tmx="on"] .tm-blank-veil[hidden] { display: none !important; }
:root[data-tmx="on"] .tm-blank-dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: #f2d48a;
  box-shadow: 0 0 14px rgba(242, 212, 138, .45);
  opacity: .42;
  animation: tm-dot 4.2s ease-in-out infinite;
}
:root[data-tmx="on"][data-theme="soft-anime"] .tm-blank-dot {
  background: #e598b0;
  box-shadow: 0 0 14px rgba(229, 152, 176, .45);
}
:root[data-tmx="on"] .tm-blank-clock {
  font-family: var(--yx-display, serif);
  font-weight: 400; font-size: 26px; letter-spacing: .28em;
  opacity: .48;
}
:root[data-tmx="on"] .tm-blank-line {
  max-width: 520px; margin: 4px 0 18px;
  font-family: var(--tm-mincho, serif);
  font-size: 14.5px; line-height: 1.9; letter-spacing: .12em;
  opacity: .34;
}
:root[data-tmx="on"] .tm-blank-veil small {
  font-size: 11.5px; letter-spacing: .24em; opacity: .28;
}

/* =====================================================================
   留声 · 「她记下的事」书签手账 (.history-layout & .shiori-*)
   ===================================================================== */
.history-layout {
  display: grid;
  grid-template-columns: 350px minmax(0, 1fr);
  gap: 22px;
  align-items: start;
}
.history-main { min-width: 0; }
.shiori-panel {
  margin: 0 !important;
  padding: 20px 22px !important;
  display: grid;
  gap: 14px;
}
.shiori-panel[hidden] { display: none !important; }
.shiori-head {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 12px;
}
.shiori-head .eyebrow { margin: 0 0 4px; font-size: 11px; letter-spacing: .38em; }
.shiori-head h2 {
  margin: 0; font-family: var(--yx-display, serif); font-weight: 600;
  font-size: 19px; letter-spacing: .24em; color: var(--yx-ink);
}
.shiori-add-btn {
  padding: 5px 13px !important; min-height: 0 !important;
  border-radius: 999px !important; font-size: 12px !important;
  letter-spacing: .14em !important; white-space: nowrap;
}
.shiori-sub {
  margin: -4px 0 0; font-size: 12px; line-height: 1.7;
  color: var(--yx-ink-faint); letter-spacing: .06em;
}
.shiori-tabs, .shiori-cats {
  display: flex; flex-wrap: wrap; gap: 5px;
  padding-bottom: 10px; border-bottom: 1px solid var(--yx-rule);
}
:is(.shiori-tabs, .shiori-cats) button {
  padding: 4px 11px !important; min-height: 0 !important;
  border-radius: 999px !important; border: 1px solid transparent !important;
  background: none !important; box-shadow: none !important;
  font-size: 12px !important; letter-spacing: .1em !important;
  color: var(--yx-ink-faint) !important; cursor: pointer;
}
:is(.shiori-tabs, .shiori-cats) button:hover { color: var(--yx-ink) !important; }
:is(.shiori-tabs, .shiori-cats) button.on {
  color: var(--yx-ink) !important;
  border-color: var(--yx-accent) !important;
  background: var(--yx-sheet-hover, rgba(255,255,255,.08)) !important;
}
.shiori-form, .shiori-add, .shiori-edit-form {
  display: grid; gap: 9px;
  padding: 12px; border-radius: 10px;
  border: 1px solid var(--yx-rule-strong);
  background: color-mix(in srgb, var(--yx-sheet-solid, #19223d) 45%, transparent);
}
:root[data-theme="soft-anime"] :is(.shiori-form, .shiori-add, .shiori-edit-form) {
  background: rgba(255, 255, 255, .64);
}
:is(.shiori-form, .shiori-add)[hidden] { display: none !important; }
.shiori-form-row {
  display: grid; grid-template-columns: 76px minmax(0, 1fr); gap: 8px;
}
.shiori-form-row select, .shiori-form-row input {
  margin: 0 !important; padding: 7px 10px !important; font-size: 12.5px !important;
}
.shiori-form-actions {
  display: flex; justify-content: flex-end; gap: 8px;
}
.shiori-form-actions button {
  padding: 5px 14px !important; min-height: 0 !important;
  border-radius: 999px !important; font-size: 12px !important; letter-spacing: .14em !important;
}
.shiori-list {
  display: grid; gap: 10px;
  max-height: 460px; overflow-y: auto; padding-right: 2px;
}
.shiori-empty {
  padding: 18px 12px; text-align: center;
  font-size: 12.5px; line-height: 1.8; color: var(--yx-ink-faint);
  letter-spacing: .06em;
}
.shiori-item {
  padding: 11px 13px; border-radius: 10px;
  border: 1px solid var(--yx-rule);
  border-left: 2px solid color-mix(in srgb, var(--yx-accent) 70%, transparent);
  background: color-mix(in srgb, var(--yx-sheet-solid, #19223d) 36%, transparent);
  transition: border-color .25s ease;
}
:root[data-theme="soft-anime"] .shiori-item {
  background: rgba(255, 255, 255, .58);
}
.shiori-item:hover { border-color: var(--yx-rule-strong); }
.shiori-meta {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  margin-bottom: 5px;
}
.shiori-tag {
  font-family: var(--yx-display, serif);
  font-size: 11px; letter-spacing: .2em;
  color: var(--yx-accent);
}
.shiori-acts {
  display: inline-flex; gap: 8px;
}
.shiori-acts button {
  padding: 1px 6px !important; min-height: 0 !important;
  border: 0 !important; background: none !important; box-shadow: none !important;
  font-size: 11.5px !important; letter-spacing: .1em !important;
  color: var(--yx-ink-faint) !important; cursor: pointer;
}
.shiori-acts button:hover { color: var(--yx-ink) !important; text-decoration: underline; text-underline-offset: 3px; }
.shiori-text {
  margin: 0; font-size: 13px; line-height: 1.75;
  color: var(--yx-ink); letter-spacing: .04em; word-break: break-word;
}
@media (max-width: 960px) {
  .history-layout { grid-template-columns: minmax(0, 1fr); gap: 16px; }
  .shiori-list { max-height: 280px; }
}

/* ---------- 字幕字号 (案头 → 画面 → 画境与伴眠视野 → 字幕字号) ---------- */
:root[data-sub-size="sm"] #current-subtitle { font-size: clamp(16px, 2vw, 20px) !important; }
:root[data-sub-size="sm"] .tm-prev { font-size: 12.5px !important; }
:root[data-sub-size="sm"] .tm-blank-line { font-size: 14px !important; }
:root[data-sub-size="lg"] #current-subtitle { font-size: clamp(22px, 3vw, 30px) !important; }
:root[data-sub-size="lg"] .tm-prev { font-size: 15.5px !important; }
:root[data-sub-size="lg"] .tm-blank-line { font-size: 19px !important; }


