/* ============================================================
   css/guest-room.css — 会客厅（屋主端房间视图 + 全部弹层）
   ------------------------------------------------------------
   手册第二十九~四十七节 + 第六十五节窗口6。
   三条口径（改这个文件前先看一眼）：
     ① **颜色只走令牌**：这里只多一组语义别名（--guestroom-*），全部映射到全站 token，
        绝不新增硬编码颜色；浅色与暗色各由 token 自己带（手册第三十 / 四十七节）。
     ② **三个人的气泡是同一家族**：差异只来自布局 / 头像 / 名字 / 细线 / 细微底色，
        不靠大色块、不用渐变（手册第三十一节）。
     ③ **✂ 本文件末尾「客人入口页」那一段仍归第 7 部分（客人端 UI）**，第6部分不动它。
   ============================================================ */

/* ---- 语义颜色（全部映射到现有 token，别处不许再写一份）---- */
.gr-overlay,
.gr-scrim,
.gr-room-view {
    --guestroom-accent: var(--rose, #C9A8A8);
    --guestroom-sage: var(--sage, #A8B8A0);
    --guestroom-warm: var(--bg-primary, #F8F4EF);
    --guestroom-gold: var(--gold, #C4A86A);
    --guestroom-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
    /* ★ 暖米底上的次要文字：全站 --text-secondary 在**白卡面**上只有 3.79:1（探针第③节量出来的），
       达不到正文 4.5:1 的要求，读起来也会「灰得发虚」。这里给会客厅这一层一个够对比度的次要色，
       暗色由下面 [data-theme-mode="dark"] 那一段跟着换（不改全站令牌，避免动别的模块的观感）。 */
    --guestroom-ink-soft: #6F6862;
    /* ★ 更淡的那一档（气泡上的人名、列表时间这类「有它没它都能读」的小字）：
       浅色下量出来 #7A7268 是 4.7:1（够正文标准、又比 --guestroom-ink-soft 淡一档）；
       **暗色下必须比 --text-muted 更亮**——#5A5450 在深卡面上只有 2.3:1（探针第③节量到 2.79 就是这个原因）。 */
    --guestroom-ink-mute: #7A7268;
}
/* 暗色：卡面是深色，--text-secondary 本身就够（实测 5.39:1） */
[data-theme-mode="dark"] .gr-overlay,
[data-theme-mode="dark"] .gr-scrim,
[data-theme-mode="dark"] .gr-room-view {
    --guestroom-ink-soft: var(--text-secondary, #A09890);
    --guestroom-ink-mute: #B0A89E;
}

/* ============================================================
   一、通用遮罩 / 弹层 / 小窗
   ============================================================ */
.gr-overlay {
    position: absolute;
    inset: 0;
    z-index: 6200;
    display: flex;
    align-items: center;
    justify-content: center;
    background:
        radial-gradient(120% 90% at 85% 5%, var(--rose-light, rgba(201,168,168,0.18)), transparent 55%),
        linear-gradient(170deg, var(--bg-primary, #F8F4EF) 0%, var(--bg-chat, #F4ECE4) 100%);
    opacity: 0;
    transition: opacity 0.28s var(--guestroom-ease);
}
.gr-overlay.show { opacity: 1; }

/* 自绘底部小窗的遮罩：**小窗必须是它的子节点**（不是兄弟），否则会被扔进普通文档流 */
.gr-scrim {
    position: absolute;
    inset: 0;
    z-index: 6400;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    background: rgba(30, 26, 24, 0.32);
    opacity: 0;
    transition: opacity 0.24s var(--guestroom-ease);
    padding-top: var(--safe-top);
}
.gr-scrim.show { opacity: 1; }
.gr-scrim.gr-closing { opacity: 0; }

.gr-sheet {
    box-sizing: border-box;
    width: 100%;
    max-height: 82%;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: var(--surface-solid, #FFFFFF);
    border-radius: 22px 22px 0 0;
    border: 1px solid var(--border-faint, rgba(201,168,168,0.22));
    border-bottom: none;
    box-shadow: 0 -12px 40px rgba(30, 28, 26, 0.16);
    padding: 10px 18px calc(14px + var(--safe-bottom));
    transform: translateY(14px);
    transition: transform 0.3s var(--guestroom-ease);
}
.gr-scrim.show .gr-sheet { transform: translateY(0); }
.gr-sheet-grabber {
    width: 34px; height: 4px;
    border-radius: 2px;
    background: var(--border, rgba(180,160,140,0.28));
    margin: 2px auto 12px;
    flex-shrink: 0;
}
.gr-sheet-title-en {
    font-family: 'Playfair Display', Georgia, serif;
    font-style: italic;
    font-size: 17px;
    letter-spacing: 2px;
    color: var(--guestroom-accent);
    text-align: center;
}
.gr-sheet-title {
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 16px;
    letter-spacing: 1.5px;
    color: var(--text-primary, #1E1C1A);
    text-align: center;
    margin: 4px 0 8px;
    flex-shrink: 0;
}
.gr-sheet-sub {
    font-size: 11.5px;
    color: var(--guestroom-ink-soft, #6F6862);
    text-align: center;
    margin-bottom: 8px;
}
.gr-hint {
    font-size: 12.5px;
    color: var(--guestroom-ink-soft, #6F6862);
    text-align: center;
    line-height: 1.7;
    margin-bottom: 14px;
    padding: 0 4px;
}
.gr-sheet-list {
    display: flex;
    flex-direction: column;
    gap: 4px;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    margin-bottom: 8px;
}
.gr-sheet-item {
    display: flex;
    align-items: center;
    gap: 10px;
    min-height: 48px;
    padding: 0 12px;
    border: none;
    border-radius: 14px;
    background: transparent;
    color: var(--text-primary, #1E1C1A);
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 14.5px;
    text-align: left;
    cursor: pointer;
    transition: background 0.18s ease, transform 0.16s var(--guestroom-ease);
    -webkit-tap-highlight-color: transparent;
}
.gr-sheet-item:active { transform: scale(0.985); background: var(--rose-light, rgba(201,168,168,0.12)); }
.gr-sheet-item.gr-sheet-danger { color: var(--danger, #B46A6A); }
.gr-sheet-item.gr-sheet-off { opacity: 0.42; }
.gr-sheet-ic { display: flex; width: 20px; height: 20px; color: var(--guestroom-accent); flex-shrink: 0; }
.gr-sheet-ic svg { width: 20px; height: 20px; }
.gr-sheet-lb { flex: 1; min-width: 0; }
.gr-sheet-danger .gr-sheet-ic { color: var(--danger, #B46A6A); }
.gr-sheet-quote {
    font-size: 12.5px;
    color: var(--guestroom-ink-soft, #6F6862);
    line-height: 1.6;
    padding: 8px 12px;
    margin-bottom: 8px;
    border-left: 2px solid var(--guestroom-accent);
    background: var(--rose-light, rgba(201,168,168,0.10));
    border-radius: 0 10px 10px 0;
    max-height: 76px;
    overflow: hidden;
}
.gr-sheet-cancel {
    min-height: 46px;
    margin-top: 6px;
    border: none;
    border-radius: 14px;
    background: transparent;
    color: var(--guestroom-ink-soft, #6F6862);
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 14px;
    cursor: pointer;
    flex-shrink: 0;
}
.gr-sheet-cancel:active { background: var(--rose-light, rgba(201,168,168,0.10)); }

/* 「+」面板：自绘网格，5 个按钮 */
.gr-plus-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px 4px;
    padding: 4px 0 10px;
}
.gr-plus-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 7px;
    padding: 10px 2px;
    border: none;
    border-radius: 14px;
    background: transparent;
    color: var(--text-primary, #1E1C1A);
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 12px;
    cursor: pointer;
    transition: transform 0.16s var(--guestroom-ease), background 0.18s ease;
}
.gr-plus-item:active { transform: scale(0.94); background: var(--rose-light, rgba(201,168,168,0.10)); }
.gr-plus-ic {
    width: 46px; height: 46px;
    display: flex; align-items: center; justify-content: center;
    border-radius: 16px;
    background: var(--warm-white, rgba(255,252,249,0.9));
    border: 1px solid var(--border-faint, rgba(201,168,168,0.22));
    color: var(--guestroom-accent);
    box-shadow: var(--shadow-xs, 0 1px 2px rgba(30,28,26,0.05));
}
.gr-plus-ic svg { width: 22px; height: 22px; }
.gr-plus-item.gr-sheet-off { opacity: 0.42; }

/* 宽版小窗（会面信息 / 现状 / 记忆上下文 / 回顾 / 帮助 / 参与者）*/
.gr-wide-sheet { max-height: 86%; }
.gr-sheet-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 2px 2px 10px;
    flex-shrink: 0;
    border-bottom: 1px solid var(--border-faint, rgba(201,168,168,0.18));
}
.gr-sheet-title-l {
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 15.5px;
    letter-spacing: 1.5px;
    color: var(--text-primary, #1E1C1A);
}
.gr-sheet-x {
    width: 44px; height: 44px;
    display: flex; align-items: center; justify-content: center;
    border: none; background: transparent;
    color: var(--guestroom-ink-soft, #6F6862);
    cursor: pointer;
}
.gr-sheet-x svg { width: 18px; height: 18px; }
.gr-sheet-x:active { transform: scale(0.9); }
.gr-sheet-body {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    padding: 12px 2px calc(6px + var(--safe-bottom));
}
.gr-skeleton {
    height: 54px;
    border-radius: 12px;
    margin-bottom: 8px;
    background: linear-gradient(90deg, var(--rose-light, rgba(201,168,168,0.10)), var(--sage-light, rgba(168,184,160,0.10)), var(--rose-light, rgba(201,168,168,0.10)));
    background-size: 200% 100%;
    animation: grSkeleton 1.6s ease-in-out infinite;
}
@keyframes grSkeleton { 0% { background-position: 0% 0; } 100% { background-position: 200% 0; } }
.gr-sheet-err, .gr-sheet-empty { padding: 28px 10px; text-align: center; }
.gr-sheet-err-en, .gr-sheet-empty-en {
    font-family: 'Playfair Display', Georgia, serif;
    font-style: italic;
    font-size: 17px;
    color: var(--guestroom-accent);
    margin-bottom: 8px;
}
.gr-sheet-err-tx, .gr-sheet-empty-tx {
    font-size: 12.5px;
    color: var(--guestroom-ink-soft, #6F6862);
    line-height: 1.8;
}

/* 键值行（会面信息） */
.gr-kv { display: flex; align-items: baseline; gap: 10px; padding: 9px 2px; border-bottom: 1px solid var(--border-faint, rgba(201,168,168,0.14)); }
.gr-kv-k { width: 76px; flex-shrink: 0; font-size: 12.5px; color: var(--guestroom-ink-soft, #6F6862); }
.gr-kv-v { flex: 1; min-width: 0; font-size: 13.5px; color: var(--text-primary, #1E1C1A); line-height: 1.6; word-break: break-word; }
.gr-info-sec { margin-bottom: 6px; }
.gr-info-note {
    font-size: 12px;
    color: var(--guestroom-ink-soft, #6F6862);
    line-height: 1.75;
    padding: 10px 12px;
    margin: 10px 0 4px;
    border-radius: 12px;
    background: var(--sage-light, rgba(168,184,160,0.10));
}
.gr-locked-tag {
    display: inline-block;
    margin-left: 6px;
    padding: 1px 8px;
    border-radius: 9px;
    border: 1px solid var(--border, rgba(180,160,140,0.3));
    font-size: 11px;
    color: var(--guestroom-ink-soft, #6F6862);
}
.gr-note-warn {
    font-size: 12.5px;
    line-height: 1.75;
    color: var(--text-primary, #1E1C1A);
    background: var(--rose-light, rgba(201,168,168,0.14));
    border-radius: 12px;
    padding: 10px 12px;
    margin: 10px 0;
}
.gr-info-acts { display: flex; gap: 10px; margin-top: 12px; }
.gr-info-acts .gr-btn { flex: 1; height: 40px; }

/* 现在的情况 */
.gr-state-phase {
    display: inline-block;
    font-size: 11.5px;
    letter-spacing: 1px;
    color: var(--guestroom-accent);
    border: 1px solid var(--border, rgba(180,160,140,0.28));
    border-radius: 10px;
    padding: 2px 10px;
    margin-bottom: 8px;
}
.gr-state-head {
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 15px;
    line-height: 1.65;
    color: var(--text-primary, #1E1C1A);
    margin-bottom: 12px;
}
.gr-state-sec { margin-bottom: 12px; }
.gr-state-t { font-size: 12px; color: var(--guestroom-ink-soft, #6F6862); letter-spacing: 0.5px; margin-bottom: 6px; }
.gr-state-ul { margin: 0; padding-left: 16px; }
.gr-state-ul li { font-size: 13.5px; line-height: 1.8; color: var(--text-primary, #1E1C1A); }
.gr-state-ul li::marker { color: var(--guestroom-gold); }
.gr-state-last, .gr-state-meta { font-size: 12px; color: var(--guestroom-ink-soft, #6F6862); line-height: 1.7; margin-top: 6px; }

/* 记忆上下文 */
.gr-mctx-top {
    border-radius: 14px;
    padding: 12px 14px;
    margin-bottom: 14px;
    background: var(--rose-light, rgba(201,168,168,0.10));
    border: 1px solid var(--border-faint, rgba(201,168,168,0.2));
}
.gr-mctx-top-t { font-size: 11.5px; color: var(--guestroom-ink-soft, #6F6862); margin-bottom: 4px; }
.gr-mctx-top-v { font-size: 14px; line-height: 1.7; color: var(--text-primary, #1E1C1A); }
.gr-mctx-sec-t { font-size: 12px; letter-spacing: 0.5px; color: var(--guestroom-ink-soft, #6F6862); margin: 14px 0 8px; }
.gr-mctx-none { font-size: 12.5px; color: var(--guestroom-ink-mute, #8C847A); line-height: 1.7; padding: 6px 2px; }
.gr-mctx-list { display: flex; flex-direction: column; gap: 8px; }
.gr-mctx-ev { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px; padding: 8px 10px; border-radius: 12px; background: var(--warm-white, rgba(255,252,249,0.9)); border: 1px solid var(--border-faint, rgba(201,168,168,0.16)); }
.gr-mctx-chip {
    font-size: 10.5px;
    padding: 1px 7px;
    border-radius: 8px;
    color: var(--guestroom-accent);
    border: 1px solid var(--border, rgba(180,160,140,0.28));
    flex-shrink: 0;
}
.gr-mctx-tx { flex: 1; min-width: 0; font-size: 13px; line-height: 1.65; color: var(--text-primary, #1E1C1A); }
.gr-mctx-time { width: 100%; font-size: 10.5px; color: var(--guestroom-ink-mute, #8C847A); }
.gr-mctx-mem { padding: 10px 12px; border-radius: 12px; background: var(--warm-white, rgba(255,252,249,0.9)); border: 1px solid var(--border-faint, rgba(201,168,168,0.16)); }
.gr-mctx-mem-h { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
.gr-mctx-t { font-size: 13px; color: var(--text-primary, #1E1C1A); }
.gr-mctx-s { font-size: 12.5px; line-height: 1.7; color: var(--guestroom-ink-soft, #6F6862); }

/* 回顾 */
.gr-recall-list { display: flex; flex-direction: column; gap: 6px; }
.gr-recall-row {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    min-height: 54px;
    padding: 8px 12px;
    border: 1px solid var(--border-faint, rgba(201,168,168,0.18));
    border-radius: 14px;
    background: var(--warm-white, rgba(255,252,249,0.9));
    text-align: left;
    cursor: pointer;
    font-family: 'Noto Serif SC', 'STSong', serif;
    transition: transform 0.16s var(--guestroom-ease);
}
.gr-recall-row:active { transform: scale(0.985); }
.gr-recall-cur { border-color: var(--guestroom-accent); }
.gr-recall-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--guestroom-sage); flex-shrink: 0; }
.gr-recall-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.gr-recall-who { font-size: 13.5px; color: var(--text-primary, #1E1C1A); }
.gr-recall-tag { margin-left: 6px; font-size: 10.5px; color: var(--guestroom-accent); }
.gr-recall-when { font-size: 11px; color: var(--guestroom-ink-mute, #8C847A); }
.gr-recall-st { font-size: 11px; color: var(--guestroom-ink-soft, #6F6862); flex-shrink: 0; }

/* 参与者 */
.gr-ppl-sec-t { font-size: 12px; letter-spacing: 0.5px; color: var(--guestroom-ink-soft, #6F6862); margin: 14px 0 8px; }
.gr-ppl { display: flex; align-items: center; gap: 10px; padding: 8px 2px; }
.gr-ppl-av {
    width: 38px; height: 38px; flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    border-radius: 50%;
    background: var(--rose-light, rgba(201,168,168,0.14));
    color: var(--guestroom-accent);
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 15px;
}
.gr-ppl-main { flex: 1; min-width: 0; display: flex; align-items: baseline; gap: 8px; }
.gr-ppl-name { font-size: 14px; color: var(--text-primary, #1E1C1A); }
.gr-ppl-role { margin-left: 6px; font-size: 11px; color: var(--guestroom-ink-mute, #8C847A); }
.gr-ppl-pres { font-size: 11.5px; color: var(--guestroom-sage); flex-shrink: 0; }
.gr-pcard {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px;
    border-radius: 14px;
    background: var(--warm-white, rgba(255,252,249,0.9));
    border: 1px solid var(--border-faint, rgba(201,168,168,0.18));
}
.gr-pcard-av { width: 44px; height: 44px; border-radius: 50%; overflow: hidden; flex-shrink: 0; background: var(--rose-light, rgba(201,168,168,0.14)); }
.gr-pcard-av img { width: 100%; height: 100%; object-fit: cover; }
.gr-pcard-av-lt { display: flex; align-items: center; justify-content: center; color: var(--guestroom-accent); font-size: 17px; }
.gr-pcard-main { flex: 1; min-width: 0; }
.gr-pcard-name { font-size: 15px; color: var(--text-primary, #1E1C1A); }
.gr-pcard-sub { font-size: 12px; color: var(--guestroom-ink-soft, #6F6862); margin-top: 2px; }
.gr-pbind { border-radius: 14px; padding: 12px; background: var(--sage-light, rgba(168,184,160,0.10)); }
.gr-pbind-now { font-size: 13px; line-height: 1.7; color: var(--text-primary, #1E1C1A); }
.gr-pbind-now b { font-weight: 600; }
.gr-pbind-basis { margin-left: 8px; font-size: 11px; color: var(--guestroom-accent); }
.gr-pbind-acts { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.gr-btn-sm { width: auto; height: 34px; padding: 0 14px; border-radius: 17px; font-size: 12.5px; }
.gr-btn-quiet { background: transparent; border-color: var(--border, rgba(180,160,140,0.28)); color: var(--guestroom-ink-soft, #6F6862); }
.gr-pick { display: flex; flex-direction: column; gap: 4px; margin-top: 8px; max-height: 210px; overflow-y: auto; }
.gr-pick-row {
    display: flex; align-items: baseline; gap: 8px;
    min-height: 44px; padding: 0 12px;
    border: none; border-radius: 12px;
    background: var(--warm-white, rgba(255,252,249,0.9));
    font-family: 'Noto Serif SC', 'STSong', serif;
    text-align: left; cursor: pointer;
}
.gr-pick-row:active { background: var(--rose-light, rgba(201,168,168,0.12)); }
.gr-pick-name { flex: 1; min-width: 0; font-size: 13.5px; color: var(--text-primary, #1E1C1A); }
.gr-pick-nick { margin-left: 6px; font-size: 11.5px; color: var(--guestroom-ink-mute, #8C847A); }
.gr-pick-rel { font-size: 11.5px; color: var(--guestroom-ink-soft, #6F6862); }
.gr-regulars { display: flex; flex-direction: column; gap: 4px; }
.gr-regular { display: flex; align-items: baseline; justify-content: space-between; padding: 8px 12px; border-radius: 12px; background: var(--warm-white, rgba(255,252,249,0.9)); }
.gr-regular-name { font-size: 13px; color: var(--text-primary, #1E1C1A); }
.gr-regular-visits { font-size: 11px; color: var(--guestroom-ink-mute, #8C847A); }

/* 帮助（小白问答，点一下展开） */
.gr-faq { border-bottom: 1px solid var(--border-faint, rgba(201,168,168,0.14)); }
.gr-faq-q {
    display: block; width: 100%;
    min-height: 48px;
    padding: 12px 2px;
    border: none; background: transparent;
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 14px;
    color: var(--text-primary, #1E1C1A);
    text-align: left; cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
.gr-faq-q:active { color: var(--guestroom-accent); }
.gr-faq-a {
    display: none;
    font-size: 13px;
    line-height: 1.8;
    color: var(--guestroom-ink-soft, #6F6862);
    padding: 0 2px 14px;
}
.gr-faq.open .gr-faq-a { display: block; }

/* 二次确认弹窗（自绘，绝不用浏览器 confirm） */
.gr-confirm { z-index: 6600; }
.gr-modal {
    box-sizing: border-box;
    width: min(86%, 360px);
    background: var(--surface-solid, rgba(255,252,249,0.96));
    border: 1px solid var(--border-faint, rgba(201,168,168,0.28));
    border-radius: 22px;
    box-shadow: var(--shadow-lg, 0 24px 60px rgba(160,145,130,0.18));
    padding: 30px 24px 20px;
    transform: translateY(12px) scale(0.98);
    transition: transform 0.3s var(--guestroom-ease);
}
.gr-overlay.show .gr-modal { transform: translateY(0) scale(1); }
.gr-modal-title {
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 16px;
    letter-spacing: 1.5px;
    color: var(--text-primary, #1E1C1A);
    text-align: center;
    margin: 0 0 10px;
}
.gr-confirm-modal .gr-hint { margin-bottom: 18px; }

/* 通用按钮（本模块只用这一种，绝不用浏览器默认外观） */
.gr-btn {
    display: block;
    width: 100%;
    min-height: 44px;
    border: 1px solid var(--border, rgba(201, 168, 168, 0.45));
    border-radius: 22px;
    background: var(--warm-white, rgba(255, 255, 255, 0.85));
    color: var(--text-primary, #1E1C1A);
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 14px;
    letter-spacing: 1.5px;
    cursor: pointer;
    transition: transform 0.18s var(--guestroom-ease), box-shadow 0.22s ease, opacity 0.2s ease;
    -webkit-tap-highlight-color: transparent;
}
.gr-btn + .gr-btn { margin-top: 10px; }
.gr-btn:active { transform: scale(0.97); }
.gr-btn:disabled { opacity: 0.55; }
.gr-btn-solid {
    background: var(--rose-dark, #A88080);
    border-color: transparent;
    color: #FCFAF6;
    box-shadow: var(--shadow-sm, 0 2px 6px rgba(30,28,26,0.06));
}
.gr-btn-danger {
    background: transparent;
    border-color: var(--danger, #B46A6A);
    color: var(--danger, #B46A6A);
}
.gr-close-btn {
    background: transparent;
    border-color: transparent;
    color: var(--guestroom-ink-mute, #8C847A);
    font-size: 13px;
    min-height: 40px;
}

/* 自绘输入框（禁系统默认框） */
.gr-input {
    box-sizing: border-box;
    width: 100%;
    min-height: 44px;
    padding: 10px 16px;
    border: 1px solid var(--border, rgba(201, 168, 168, 0.4));
    border-radius: 22px;
    background: var(--input-bg, rgba(255, 255, 255, 0.85));
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 14px;
    color: var(--text-primary, #1E1C1A);
    outline: none;
    -webkit-appearance: none;
    -moz-appearance: textfield;
    appearance: none;
    transition: border-color 0.22s ease, box-shadow 0.22s ease;
}
.gr-input::-webkit-inner-spin-button,
.gr-input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
.gr-input::placeholder { color: var(--guestroom-ink-mute, #8C847A); }
.gr-input:focus { border-color: var(--guestroom-accent); box-shadow: 0 0 0 3px var(--rose-light, rgba(201,168,168,0.18)); }

/* 会客码卡：轻微阴影呼吸（手册第四十六节：不许整块 opacity 1↔0.55） */
.gr-code-display {
    width: 100%;
    padding: 22px 0;
    text-align: center;
    font-family: 'Playfair Display', Georgia, serif;
    font-size: 34px;
    letter-spacing: 10px;
    color: var(--text-primary, #1E1C1A);
    background: var(--rose-light, rgba(201, 168, 168, 0.1));
    border-radius: 16px;
    margin-bottom: 8px;
    animation: grCodeBreath 3s ease-in-out infinite;
}
@keyframes grCodeBreath {
    0%, 100% { box-shadow: var(--shadow-xs, 0 1px 2px rgba(30,28,26,0.04)); }
    50% { box-shadow: var(--shadow-sm, 0 2px 6px rgba(30,28,26,0.06)), 0 0 0 1px var(--rose-light, rgba(201,168,168,0.2)); }
}
.gr-code-meta { font-size: 11.5px; color: var(--guestroom-ink-mute, #8C847A); text-align: center; margin-bottom: 16px; }

/* 小窗的几种「名字类」（只用来区分场合与留白，视觉主体仍走 .gr-sheet） */
.gr-code-sheet .gr-code-display { margin-top: 4px; }
.gr-menu-sheet .gr-sheet-list { max-height: 52vh; }
.gr-plus-sheet { padding-bottom: calc(10px + var(--safe-bottom)); }
.gr-plus-lb { font-size: 11.5px; color: var(--guestroom-ink-soft, #6F6862); }
.gr-msg-menu .gr-sheet-list { max-height: 44vh; }
.gr-invite-sheet { max-height: 88%; }

/* ============================================================
   二、房间视图（全屏内容页；挂 #app 内限宽，桌面不撑满）
   ============================================================ */
.gr-room-view {
    flex-direction: column;
    align-items: stretch;
    padding: 0;
    z-index: 6300;
    background: var(--bg-chat, #FCFAF6);
}
/* 入场：整页从右侧轻微滑入（与聊天页同族的手感，但幅度更小、更安静）。
   透明度由 .gr-overlay / .gr-overlay.show 那一对控制，这里不再重复写 opacity。 */
.gr-room-view .gr-room-header,
.gr-room-view .gr-messages,
.gr-room-view .gr-input-row { transition: transform 0.34s var(--guestroom-ease); }
.gr-room-view:not(.show) .gr-room-header,
.gr-room-view:not(.show) .gr-messages,
.gr-room-view:not(.show) .gr-input-row { transform: translateX(16px); }

.gr-room-header {
    flex-shrink: 0;
    display: grid;
    grid-template-columns: 44px 1fr auto;
    align-items: center;
    gap: 4px;
    padding: calc(10px + var(--safe-top)) 10px 10px;
    border-bottom: 1px solid var(--border-faint, rgba(201, 168, 168, 0.2));
    background: var(--surface, rgba(248, 244, 239, 0.9));
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
}
.gr-hdr-btn {
    width: 44px; height: 44px;
    display: flex; align-items: center; justify-content: center;
    border: none; background: transparent;
    color: var(--guestroom-ink-soft, #6F6862);
    cursor: pointer;
    transition: transform 0.16s var(--guestroom-ease);
    -webkit-tap-highlight-color: transparent;
}
.gr-hdr-btn:active { transform: scale(0.9); }
.gr-hdr-btn svg { width: 20px; height: 20px; }
.gr-hdr-center { display: flex; flex-direction: column; gap: 1px; min-width: 0; text-align: center; }
.gr-hdr-name {
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 15px;
    color: var(--text-primary, #1E1C1A);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.gr-hdr-name.gr-editable { cursor: pointer; }
.gr-hdr-name.gr-editable:active { color: var(--guestroom-accent); }
.gr-hdr-status {
    font-size: 11px;
    color: var(--guestroom-ink-soft, #6F6862);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.gr-hdr-right { display: flex; align-items: center; gap: 2px; }
.gr-timer {
    font-family: 'Playfair Display', Georgia, serif;
    font-size: 14px;
    letter-spacing: 1px;
    color: var(--guestroom-accent);
    min-width: 42px;
    text-align: right;
}
.gr-rename-box { display: block; width: 100%; }
.gr-rename-input {
    box-sizing: border-box;
    width: 100%;
    height: 30px;
    padding: 0 10px;
    border: 1px solid var(--guestroom-accent);
    border-radius: 15px;
    background: var(--input-bg, #fff);
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 14px;
    color: var(--text-primary, #1E1C1A);
    text-align: center;
    outline: none;
}

/* 顶部小字条 */
.gr-banner-host { flex-shrink: 0; }
.gr-banner {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 9px 14px;
    font-size: 12px;
    line-height: 1.6;
    color: var(--text-primary, #1E1C1A);
    border-bottom: 1px solid var(--border-faint, rgba(201,168,168,0.16));
}
.gr-banner-warn { background: var(--rose-light, rgba(201,168,168,0.16)); cursor: pointer; }
.gr-banner-quiet { background: var(--sage-light, rgba(168,184,160,0.12)); cursor: pointer; }
.gr-banner-ic { display: flex; width: 16px; height: 16px; color: var(--guestroom-accent); flex-shrink: 0; }
.gr-banner-ic svg { width: 16px; height: 16px; }
.gr-banner-tx { flex: 1; min-width: 0; }
.gr-banner-go { flex-shrink: 0; color: var(--guestroom-accent); }

/* 消息区 */
.gr-messages {
    position: relative;
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    padding: 14px 12px 10px;
    display: flex;
    flex-direction: column;
}
.gr-sep {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 10px 0 14px;
    flex-shrink: 0;
}
.gr-sep-line { flex: 1; height: 1px; background: var(--guestroom-gold); opacity: 0.3; }
.gr-sep-text { font-size: 11px; color: var(--guestroom-ink-mute, #8C847A); letter-spacing: 0.5px; }

.gr-msg {
    display: flex;
    gap: 8px;
    align-items: flex-start;
    margin-bottom: 12px;
    flex-shrink: 0;
    animation: grMsgIn 0.3s var(--guestroom-ease);
}
.gr-msg.gr-cont { margin-top: -4px; }
/* ★ 会客厅第8部分：从收藏「回去看」定位到的那一条，淡淡亮一下（2.2 秒后由 JS 自己摘掉，
   绝不许常驻在类上 —— 长期规则 #185）。只用底色的柔光，不描边、不变形，不打断阅读。 */
.gr-msg.gr-msg-focus .gr-bubble,
.gr-msg.gr-msg-focus .gr-sys-wrap {
    box-shadow: 0 0 0 3px var(--rose-light, rgba(201,168,168,0.18)), 0 0 18px rgba(201,168,168,0.28);
    transition: box-shadow 0.3s var(--guestroom-ease);
}
@media (prefers-reduced-motion: reduce) {
    .gr-msg.gr-msg-focus .gr-bubble,
    .gr-msg.gr-msg-focus .gr-sys-wrap { transition: none; }
}
@keyframes grMsgIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.gr-msg.me { flex-direction: row-reverse; }
.gr-avatar {
    width: 32px; height: 32px;
    flex-shrink: 0;
    border-radius: 50%;
    overflow: hidden;
    display: flex; align-items: center; justify-content: center;
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 13px;
    background: var(--rose-light, rgba(201,168,168,0.14));
    color: var(--guestroom-accent);
    margin-top: 16px;
}
.gr-avatar img { width: 100%; height: 100%; object-fit: cover; }
.gr-avatar-letter { line-height: 1; }
.gr-avatar-ai { background: var(--sage-light, rgba(168,184,160,0.16)); color: var(--guestroom-sage); }
.gr-avatar-guest { background: var(--lavender-light, rgba(184,168,196,0.14)); color: var(--lavender, #B8A8C4); }
.gr-avatar-me { background: var(--sage-light, rgba(168,184,160,0.16)); color: var(--guestroom-sage); }
.gr-msg-body { max-width: 76%; min-width: 0; display: flex; flex-direction: column; }
.gr-msg.me .gr-msg-body { align-items: flex-end; }
.gr-msg.gr-cont .gr-msg-name { display: none; }
.gr-msg.gr-cont .gr-avatar { visibility: hidden; }
.gr-msg-name {
    font-size: 11px;
    color: var(--guestroom-ink-mute, #8C847A);
    margin: 0 4px 4px;
}
.gr-bubble {
    padding: 9px 14px;
    border-radius: 16px;
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 13.5px;
    line-height: 1.62;
    color: var(--text-primary, #1E1C1A);
    word-break: break-word;
}
.gr-bubble-text { white-space: pre-wrap; }
/* 客人：暖白底 + 极细玫瑰左边线 */
.gr-msg.them .gr-bubble {
    background: var(--surface-solid, #FFFFFF);
    border: 1px solid var(--border-faint, rgba(201,168,168,0.22));
    border-left: 1px solid var(--guestroom-accent);
    border-top-left-radius: 5px;
    box-shadow: var(--shadow-xs, 0 1px 2px rgba(30,28,26,0.05));
}
/* 他：暖白偏玫瑰纸感 + 极细玫瑰线（不用渐变） */
.gr-msg.ai .gr-bubble {
    background: var(--bg-rose-warm, #FCF7F9);
    border: 1px solid var(--border-faint, rgba(184,168,196,0.28));
    border-left: 1px solid var(--guestroom-accent);
    border-top-left-radius: 5px;
    box-shadow: var(--shadow-xs, 0 1px 2px rgba(30,28,26,0.05));
}
/* 主人：鼠尾草底 + 暖深绿字 */
.gr-msg.me .gr-bubble {
    background: var(--sage-light, rgba(168,184,160,0.20));
    border: 1px solid var(--border-faint, rgba(168,184,160,0.35));
    border-top-right-radius: 5px;
    color: var(--text-primary, #1E1C1A);
    box-shadow: var(--shadow-xs, 0 1px 2px rgba(30,28,26,0.04));
}
.gr-bubble-img {
    display: block;
    max-width: 220px;
    max-height: 260px;
    border-radius: 10px;
    margin-bottom: 6px;
    object-fit: cover;
    background: var(--rose-light, rgba(201,168,168,0.10));
    cursor: zoom-in;
}
.gr-bubble-img.gr-img-bad {
    min-width: 120px;
    min-height: 90px;
    background: var(--rose-light, rgba(201,168,168,0.12));
}
.gr-fail-badge {
    margin-top: 4px;
    width: 20px; height: 20px;
    border: none; background: transparent;
    color: var(--danger, #B46A6A);
    cursor: pointer;
    padding: 0;
}
.gr-fail-badge svg { width: 16px; height: 16px; }
/* 没送到的消息：气泡上给一点点玫瑰色边（只有那个小感叹号太容易被忽略） */
.gr-msg.gr-failed .gr-bubble { border-color: var(--danger, #B46A6A); }
/* 键盘弹起时给列表底部留一点呼吸，免得最后一条贴着输入栏 */
.gr-room-view.gr-kbd .gr-messages { padding-bottom: 4px; }
.gr-sys-wrap { display: flex; justify-content: center; margin: 6px 0 12px; flex-shrink: 0; }
.gr-sys-msg {
    max-width: 88%;
    text-align: center;
    font-size: 12px;
    line-height: 1.7;
    color: var(--guestroom-ink-soft, #6F6862);
    padding: 6px 12px;
    border-radius: 12px;
}
.gr-sys-card {
    background: var(--sage-light, rgba(168,184,160,0.12));
    text-align: left;
    white-space: pre-wrap;
}

/* 空态 */
.gr-empty {
    margin: auto 0;
    padding: 28px 12px;
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
}
.gr-empty-en {
    font-family: 'Great Vibes', 'Playfair Display', Georgia, serif;
    font-size: 30px;
    color: var(--guestroom-accent);
    opacity: 0.85;
    margin-bottom: 10px;
}
.gr-empty-deco { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
.gr-empty-fleuron { width: 44px; height: 1px; background: var(--guestroom-gold); opacity: 0.35; display: block; }
.gr-empty-text {
    font-size: 12.5px;
    line-height: 1.8;
    color: var(--guestroom-ink-soft, #6F6862);
    max-width: 240px;
}

/* 新消息胶囊 */
.gr-newpill {
    position: absolute;
    left: 50%;
    bottom: calc(84px + var(--safe-bottom) + var(--kbd-h, 0px));
    transform: translateX(-50%) translateY(6px);
    z-index: 5;
    padding: 7px 16px;
    border: 1px solid var(--border-faint, rgba(201,168,168,0.24));
    border-radius: 18px;
    background: var(--surface-solid, #fff);
    color: var(--text-primary, #1E1C1A);
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 12.5px;
    box-shadow: var(--shadow-sm, 0 2px 6px rgba(30,28,26,0.08));
    opacity: 0;
    transition: opacity 0.24s ease, transform 0.24s var(--guestroom-ease);
    cursor: pointer;
}
.gr-newpill.show { opacity: 1; transform: translateX(-50%) translateY(0); }

/* 正在输入（手册第三十四节：不写「思考」，三点 opacity 呼吸，不用 bounce） */
.gr-typing {
    display: flex;
    align-items: center;
    gap: 5px;
    padding: 2px 20px 8px;
    flex-shrink: 0;
}
.gr-typing[hidden] { display: none; }
.gr-typing-dot {
    width: 5px; height: 5px;
    border-radius: 50%;
    background: var(--guestroom-accent);
    opacity: 0.35;
    animation: grTyping 1.4s ease-in-out infinite;
}
.gr-typing-dot:nth-child(2) { animation-delay: 0.18s; }
.gr-typing-dot:nth-child(3) { animation-delay: 0.36s; }
@keyframes grTyping { 0%, 100% { opacity: 0.3; } 50% { opacity: 1; } }
.gr-typing-text { font-size: 11.5px; color: var(--guestroom-ink-mute, #8C847A); margin-left: 4px; }

/* 输入行（键盘 + 安全区：padding-bottom = base + safe-bottom + kbd-h） */
.gr-input-row {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding: 8px 12px calc(10px + var(--safe-bottom) + var(--kbd-h, 0px));
    border-top: 1px solid var(--border-faint, rgba(201, 168, 168, 0.18));
    background: var(--surface, rgba(255, 252, 249, 0.94));
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    transition: padding-bottom 0.22s var(--guestroom-ease);
}
.gr-input-line { display: flex; align-items: flex-end; gap: 8px; }
.gr-plus-btn {
    width: 44px; height: 44px;
    flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    border-radius: 50%;
    border: 1px solid var(--border, rgba(201, 168, 168, 0.4));
    background: transparent;
    color: var(--guestroom-accent);
    cursor: pointer;
    transition: transform 0.16s var(--guestroom-ease);
    -webkit-tap-highlight-color: transparent;
}
.gr-plus-btn:active { transform: scale(0.9); }
.gr-plus-btn svg { width: 19px; height: 19px; }
.gr-input-row .gr-input {
    flex: 1;
    min-width: 0;
    min-height: 44px;
    max-height: 104px;
    padding: 11px 16px;
    border-radius: 22px;
    resize: none;
    overflow-y: auto;
    line-height: 1.5;
}
.gr-send-btn {
    width: 44px; height: 44px;
    flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    border: none;
    border-radius: 50%;
    background: var(--rose-dark, #A88080);
    color: #FCFAF6;
    box-shadow: var(--shadow-sm, 0 2px 6px rgba(30,28,26,0.06));
    cursor: pointer;
    transition: transform 0.16s var(--guestroom-ease), opacity 0.2s ease;
}
.gr-send-btn:active { transform: scale(0.9); }
.gr-send-btn svg { width: 18px; height: 18px; }
.gr-send-btn:disabled { opacity: 0.45; }
.gr-input-row.gr-input-off { opacity: 0.62; }
.gr-quote-bar {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 7px 10px;
    border-radius: 12px;
    background: var(--rose-light, rgba(201,168,168,0.12));
    border-left: 2px solid var(--guestroom-accent);
}
.gr-quote-bar[hidden] { display: none; }
.gr-quote-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.gr-quote-name { font-size: 11px; color: var(--guestroom-accent); }
.gr-quote-text {
    font-size: 12px;
    color: var(--guestroom-ink-soft, #6F6862);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.gr-quote-x {
    width: 30px; height: 30px;
    flex-shrink: 0;
    border: none; background: transparent;
    color: var(--guestroom-ink-mute, #8C847A);
    cursor: pointer;
}
.gr-quote-x svg { width: 14px; height: 14px; }

/* 结束回执（手册第二十四节：不再是一行灰字） */
.gr-end-card {
    flex-shrink: 0;
    margin: 18px 2px 8px;
    padding: 22px 18px 18px;
    border-radius: 20px;
    background: var(--warm-white, rgba(255,252,249,0.94));
    border: 1px solid var(--border-faint, rgba(201,168,168,0.22));
    box-shadow: var(--shadow-sm, 0 2px 6px rgba(30,28,26,0.06));
    animation: grMsgIn 0.5s var(--guestroom-ease);
}
.gr-end-en {
    font-family: 'Playfair Display', Georgia, serif;
    font-style: italic;
    font-size: 19px;
    letter-spacing: 1.5px;
    color: var(--guestroom-accent);
    text-align: center;
}
.gr-end-title {
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 15px;
    letter-spacing: 2px;
    color: var(--text-primary, #1E1C1A);
    text-align: center;
    margin: 6px 0 10px;
}
.gr-end-deco { display: flex; align-items: center; justify-content: center; gap: 8px; margin-bottom: 14px; }
.gr-end-line { width: 40px; height: 1px; background: var(--guestroom-gold); opacity: 0.32; }
.gr-end-dot { width: 4px; height: 4px; border-radius: 50%; background: var(--guestroom-accent); }
.gr-end-rows { margin-bottom: 14px; }
.gr-end-row { display: flex; align-items: baseline; gap: 12px; padding: 6px 0; border-bottom: 1px solid var(--border-faint, rgba(201,168,168,0.12)); }
.gr-end-k { width: 56px; flex-shrink: 0; font-size: 12px; color: var(--guestroom-ink-soft, #6F6862); }
.gr-end-v { flex: 1; min-width: 0; font-size: 13.5px; color: var(--text-primary, #1E1C1A); }
.gr-end-acts { display: flex; flex-direction: column; gap: 8px; }

/* ============================================================
   三、建房小窗（邀请客人）
   ============================================================ */
.gri-sec-t {
    font-size: 12px;
    color: var(--guestroom-ink-soft, #6F6862);
    margin: 6px 0 8px;
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 8px;
}
.gri-sec-hint { font-size: 11px; color: var(--guestroom-ink-mute, #8C847A); }
.gri-durs { display: flex; gap: 8px; }
.gri-dur {
    flex: 1;
    min-height: 44px;
    border: 1px solid var(--border, rgba(201,168,168,0.4));
    border-radius: 14px;
    background: var(--warm-white, rgba(255,255,255,0.85));
    color: var(--text-primary, #1E1C1A);
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 13px;
    cursor: pointer;
    transition: transform 0.16s var(--guestroom-ease), border-color 0.2s ease, background 0.2s ease;
    -webkit-tap-highlight-color: transparent;
}
.gri-dur.on {
    border-color: var(--guestroom-accent);
    background: var(--rose-light, rgba(201,168,168,0.14));
    color: var(--guestroom-accent);
}
.gri-dur:active { transform: scale(0.96); }
.gri-defnote { font-size: 11px; color: var(--guestroom-ink-mute, #8C847A); margin: 6px 2px 12px; }
.gri-custom { display: flex; gap: 8px; margin: 8px 0 12px; }
.gri-custom[hidden] { display: none; }
.gri-custom-in { flex: 1; }
.gri-custom-ok {
    min-width: 84px;
    min-height: 44px;
    border: 1px solid var(--border, rgba(201,168,168,0.4));
    border-radius: 22px;
    background: transparent;
    color: var(--guestroom-accent);
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 13px;
    cursor: pointer;
}
.gri-new {
    display: block;
    width: 100%;
    min-height: 46px;
    margin-bottom: 8px;
    border: 1px dashed var(--border, rgba(201,168,168,0.45));
    border-radius: 14px;
    background: transparent;
    color: var(--text-primary, #1E1C1A);
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 13.5px;
    cursor: pointer;
}
.gri-new.on { border-style: solid; border-color: var(--guestroom-accent); background: var(--rose-light, rgba(201,168,168,0.12)); }
.gri-regulars { display: flex; flex-direction: column; gap: 4px; max-height: 190px; overflow-y: auto; margin-bottom: 12px; }
.gri-loading, .gri-none { font-size: 12px; color: var(--guestroom-ink-mute, #8C847A); padding: 8px 2px; }
.gri-reg {
    display: flex;
    align-items: center;
    gap: 10px;
    min-height: 48px;
    padding: 4px 10px;
    border: 1px solid var(--border-faint, rgba(201,168,168,0.16));
    border-radius: 14px;
    background: var(--warm-white, rgba(255,252,249,0.9));
    cursor: pointer;
    text-align: left;
    font-family: 'Noto Serif SC', 'STSong', serif;
    transition: transform 0.16s var(--guestroom-ease);
}
.gri-reg.on { border-color: var(--guestroom-accent); background: var(--rose-light, rgba(201,168,168,0.12)); }
.gri-reg:active { transform: scale(0.985); }
.gri-reg-av {
    width: 34px; height: 34px; flex-shrink: 0;
    border-radius: 50%;
    overflow: hidden;
    background: var(--rose-light, rgba(201,168,168,0.14));
    display: flex; align-items: center; justify-content: center;
    color: var(--guestroom-accent);
}
.gri-reg-av img { width: 100%; height: 100%; object-fit: cover; }
.gri-reg-av-lt { color: var(--guestroom-accent); font-size: 14px; }
.gri-reg-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.gri-reg-name { font-size: 13.5px; color: var(--text-primary, #1E1C1A); }
.gri-reg-sub { font-size: 11px; color: var(--guestroom-ink-mute, #8C847A); }

/* ============================================================
   四、窄屏 <370px / 大屏 >430px
   ============================================================ */
@media (max-width: 370px) {
    .gr-modal { padding: 24px 18px 18px; }
    .gr-code-display { font-size: 28px; letter-spacing: 7px; }
    .gr-msg-body { max-width: 82%; }
    .gr-bubble { font-size: 13px; }
    .gr-plus-ic { width: 42px; height: 42px; }
    .gr-input-row { padding-left: 10px; padding-right: 10px; }
    .gr-end-card { padding: 18px 14px 14px; }
}
@media (min-width: 431px) {
    .gr-sheet { max-width: 480px; }
    .gr-messages { padding-left: 18px; padding-right: 18px; }
}

/* 减少动效偏好：入场与呼吸一律退成无动画（手册第六十九节 checklist） */
@media (prefers-reduced-motion: reduce) {
    .gr-overlay, .gr-scrim, .gr-sheet, .gr-modal, .gr-msg, .gr-end-card,
    .gr-code-display, .gr-typing-dot, .gr-newpill, .gr-room-view .gr-room-header,
    .gr-room-view .gr-messages, .gr-room-view .gr-input-row {
        animation: none !important;
        transition: none !important;
    }
}

/* ============================================================
   ✂ 以下归第 7 部分（客人端 UI / guest.html 那一套）——第6部分不动
   ============================================================ */
.gr-guest-entry { z-index: 6300; }
.gr-guest-card {
    box-sizing: border-box;
    width: min(84%, 340px);
    background: var(--surface-solid, rgba(255, 252, 249, 0.94));
    backdrop-filter: blur(22px);
    -webkit-backdrop-filter: blur(22px);
    border: 1px solid var(--border-faint, rgba(201, 168, 168, 0.28));
    border-radius: 24px;
    box-shadow: var(--shadow-lg, 0 24px 60px rgba(160,145,130,0.18));
    padding: 40px 30px 32px;
}
.gr-guest-brand-en {
    font-family: 'Playfair Display', Georgia, serif;
    font-style: italic;
    font-size: 24px;
    letter-spacing: 3px;
    color: var(--guestroom-accent);
    text-align: center;
}
.gr-guest-title {
    font-family: 'Noto Serif SC', 'STSong', serif;
    font-size: 16px;
    letter-spacing: 4px;
    color: var(--text-primary, #1E1C1A);
    text-align: center;
    margin: 6px 0 18px;
}
.gr-field { margin-bottom: 12px; }
.gr-guest-join { margin-top: 6px; }
/* ============================================================
   ★ 会客厅第8部分：收藏点「回去」但房间已经清掉 → 只读快照（当时的记录）
   数据来自收藏那一刻随收藏存下的 snapshot；这里只展示，不查房间、也不假装原话还在。
   ============================================================ */
.gr-fav-snap { padding: 2px 2px 6px; }
.gr-snap-guard {
    font-size: 12px;
    line-height: 1.6;
    color: var(--guestroom-ink-soft);
    padding: 8px 10px;
    border-left: 2px solid var(--guestroom-accent);
    background: var(--accent-light);
    border-radius: 0 8px 8px 0;
    margin-bottom: 12px;
}
.gr-snap-rows { display: flex; flex-direction: column; gap: 7px; margin-bottom: 12px; }
.gr-snap-row { display: flex; align-items: baseline; gap: 10px; font-size: 13px; }
.gr-snap-k { color: var(--guestroom-ink-mute); flex-shrink: 0; width: 68px; }
.gr-snap-v { color: var(--text-primary); min-width: 0; word-break: break-word; }
.gr-snap-quote {
    font-size: 14px;
    line-height: 1.7;
    color: var(--text-primary);
    padding: 12px 14px;
    border-radius: 12px;
    background: var(--card-bg);
    border: 0.5px solid var(--border-faint);
    white-space: pre-wrap;
    word-break: break-word;
}
.gr-snap-foot {
    margin-top: 10px;
    font-size: 11.5px;
    line-height: 1.6;
    color: var(--guestroom-ink-mute);
}
@media (max-width: 370px) {
    .gr-guest-card { padding: 32px 22px 26px; }
    .gr-snap-k { width: 58px; }
}
