/* ai-chat-studio-meeting.css - the meeting room: message feed, mentions, time language, the brief chip.
   One of the Studio stylesheet's 7 parts (part 5). They are contiguous slices of what used to be one
   file, and ai-chat-styles.liquid loads them in this order - the cascade depends on it, so a new part goes at the
   end of its own section, never between two others (gate: scripts/ui/studio-css-parts.test.mjs). */

/* ── 会议室消息流:主聊天气泡语言 + 说话人头像(与作品集归属同一颗 makerChip) ── */
.studio-meeting-msg { display: flex; align-items: flex-end; gap: 8px; }
/* What a reply drew on (owner-only fold, PLAN 30): the main chat's receipt shape inside the bubble, one row per judgement */
.studio-prov { margin-top: 0; flex: 1 1 auto; min-width: 0; }
.studio-prov-panel { display: none; }
.studio-prov.expanded .studio-prov-panel { display: block; padding: 4px 0 2px 2px; }
.studio-prov-item { display: flex; align-items: baseline; gap: 8px; font-size: 12px; line-height: 1.45; color: var(--color-text-secondary); padding: 3px 0; }
.studio-prov-item.is-gone .studio-prov-text { text-decoration: line-through; opacity: 0.6; }
.studio-prov-tag { flex: none; font-size: 11px; white-space: nowrap; color: var(--color-text-secondary); opacity: 0.7; }
.studio-prov-tag.is-own, .studio-prov-tag.is-style { opacity: 1; color: var(--color-text); }
.studio-prov-text { min-width: 0; }
/* 主聊天给每行预留 footer 按钮带(--footer-btn-box + 6px),会议室的行没有 footer → 那条带是纯空白,行距因此虚胖到 54px;归零后行距 = 基准 .msg 的 1rem */
.chat-messages .msg.studio-meeting-msg { padding-bottom: 0; }
.studio-meeting-msg.user { flex-direction: row-reverse; }   /* 自己的靠右,头像在气泡右侧 */
/* 说话人取聊天消息头像的标准档 32(.project-chat-avatar 同值),不是作品卡角标那档 20。
   ★边框换轮廓基准 var(--color-border):基准里那颗 bg-panel 色边框的职责是【叠放裁切】
   (与面板同色故意隐形),独立头像要的是轮廓 —— 暗色下 bg-panel 色等于看不见(owner 实拍)。
   角标那套页色 box-shadow 一并去掉(不压在缩略图上,没有要隔离的东西)。 */
.studio-meeting-msg .studio-meeting-speaker {
  flex: 0 0 auto; margin-bottom: 2px; width: 32px; height: 32px; font-size: 11px;
  border-color: var(--color-border); box-shadow: none;
}
/* agent 的头像可点 = 打开这位的详情(同侧栏名册点 agent 卡);人的不接。基准 .studio-pf-maker 是被动标记(pointer-events:none),这里必须重新接通 */
.studio-meeting-msg .studio-meeting-speaker.is-agent { cursor: pointer; pointer-events: auto; }
/* 发不出去的消息:变淡 + 红点提示可重试(点整行重发;fail loud,不静默吞) */
.studio-meeting-msg-failed { opacity: 0.55; cursor: pointer; }
.studio-meeting-msg-failed .bubble { box-shadow: 0 0 0 1px var(--color-danger); }

/* ── @ 点名:选人器(菜单面走全站基准)与正文里的高亮 ── */
.studio-mention-picker { min-width: 180px; max-height: 220px; overflow-y: auto; padding: 4px; }
.studio-mention-item .studio-pf-maker { width: 24px; height: 24px; font-size: 10px; }   /* 下拉菜单图标默认档 24 */
.studio-mention-item { display: flex; align-items: center; gap: 8px; width: 100%; border: none; background: transparent; cursor: pointer; font-size: 14px; color: var(--color-text); padding: 6px 8px; border-radius: calc(6px * var(--corner-k)); }
/* hover/active 走 --color-bg-hover token(亮暗自适应),不各写一对硬编码 */
 html:not([data-input="touch"]) .studio-mention-item:hover{ background: var(--color-bg-hover); } 
.studio-mention-item:active { background: var(--color-bg-hover); }
.studio-mention { font-weight: 500; }

/* 被 @ 的 agent 跑着:它那行先挂一条"打字中"气泡(跑完由结果整块替换) */
@keyframes duoTypingPulse { 0%, 100% { opacity: 0.35; } 50% { opacity: 0.8; } }

/* 会议室是多人房间:agent 的回话也上灰泡(主聊天 assistant 无泡是"文档流"语义,这里是对话),
   泡的底色照抄用户气泡基准(#f9fafb / 暗 #303030,ai-chat-base.css 那对),不发明新值 */
/* 会议室是多人房间:agent 回话也上灰泡(底色照抄用户气泡基准);名字在【泡里】,
   结构保持 .msg > .bubble 原生一层 —— 不加包裹、不接管宽度(owner 2026-08-21 铁律,门 chat-dom-isolation) */
/* ★选择器必须带 .chat-messages 前缀:基准里 .chat-messages .msg.assistant .bubble 是 (0,4,0)
   的 transparent + width:100%,三级选择器永远打不过 —— 同特异性 + studio.css 后加载才赢 */
.chat-messages .studio-meeting-msg.assistant .bubble {
  width: auto; max-width: 85%;
  background: #f9fafb; border-radius: calc(18px * var(--corner-k)); padding: 10px 14px;
}
.dark-mode .chat-messages .studio-meeting-msg.assistant .bubble { background: #303030; }
/* 打字中:圆点是画的(不用字体符号),行里头像与泡垂直居中对齐 */
.studio-meeting-typing { align-items: center; }
.studio-typing-dots { display: flex; gap: 5px; padding: 3px 0; }
.studio-typing-dots span {
  width: 7px; height: 7px; border-radius: 50%;
  corner-shape: round;
  background: var(--color-text-secondary);
  animation: duoTypingPulse 1.2s ease-in-out infinite;
}
.studio-typing-dots span:nth-child(2) { animation-delay: 0.2s; }
.studio-typing-dots span:nth-child(3) { animation-delay: 0.4s; }
@media (prefers-reduced-motion: reduce) { .studio-typing-dots span { animation: none; opacity: 0.6; } }
.studio-meeting-name { font-size: 13px; color: var(--color-text-secondary); margin-bottom: 4px; }

/* ── 会议室时间语言(WhatsApp 式) ── */
/* 泡右下角的时间:辅助字档 10px,次级色;自己的泡与对方的泡同款 */
/* foot of the bubble: whatever a decorator hangs here shares the line with the time, which stays at the right */
.studio-meeting-msg .studio-meeting-meta { display: flex; align-items: baseline; justify-content: flex-end; gap: 8px; margin-top: 3px; }
.studio-meeting-msg .studio-meeting-time { font-size: 10px; color: var(--color-text-secondary); text-align: right; flex: none; }
/* 按天分隔条:居中小胶囊,hover 底色 token 当底(亮暗自适应) */
/* message area is block flow, not flex: align-self is a no-op there and a div spans full width.
   Shrink to content + auto margins = centred pill; 16px both sides so it reads as a divider, not a label glued to the bubble. */
.studio-meeting-day {
  display: block; width: fit-content; margin: 16px auto; text-align: center;
  font-size: 12px; font-weight: 500; color: var(--color-text-secondary);
  background: var(--color-bg-hover); border-radius: 999px; corner-shape: round; padding: 2px 10px;
}

/* 泡泡按钮右上角未读角标:角标本体是全站基准 .studio-pf-stack-count,这里只给锚(fixed 按钮即包含块)。
   未读语义用危险红 token(通知角标惯例);基准的出角量对 40px 圆按钮偏外,内收 2px(owner 定) */
.studio-meeting-peek { overflow: visible; }
.studio-meeting-peek .studio-pf-stack-count {
  background: var(--color-danger); color: #fff;
  top: calc(var(--badge-inset-y) + 2px); right: calc(var(--badge-inset-x) + 2px);
}

/* Benchmark picker (owner 2026-09-06): one of two, built from the same rows as the composer's model list -
   .settings-row + .settings-storage-entry + .settings-lang-check on the settings row-card. Every bit of their look,
   hover and press included, lives in ai-chat-settings-panel.css; this file states only what is peculiar to this
   sheet. Desktop keeps the centred modal. On the phone the sheet is the SHARED shell but sized to its content
   (title + question + two rows), capped at the short tier - the sheet element is .project-modal-content (S.sheet),
   not the .project-modal wrapper. */
.studio-bench-pick .project-modal-content { max-width: 420px; }
/* The question is the settings description line (sentence case); it sits where the card label would have sat. */
.studio-bench-pick .project-settings-desc { margin: 0 0 8px; }
@media (max-width: 768px), (max-height: 500px) {
  .studio-bench-pick .project-modal-content.duo-sheet { height: auto; max-height: var(--duo-sheet-h-short); }
  .studio-bench-pick .duo-sheet-body { padding-bottom: 24px; }
  .studio-bench-pick .duo-sheet-body > .project-settings-desc { margin: 20px 0 8px; padding-left: 20px; }
}

/* 会议室回帖里的图:泡内竖排,图卡语言(圆角走全站 --img-radius) */
.studio-meeting-imgs { display: flex; flex-direction: column; gap: var(--img-gap); margin-top: var(--img-gap); }   /* 附件在话后 */
.studio-meeting-msg .bubble .bubble-doc-card { margin-top: var(--img-gap); }
/* An image sitting inside a card or bubble keeps square corners - the container owns the corners, the picture does
   not round itself. Same as the main chat's image card (owner 2026-08-25). */
.studio-meeting-imgs img { max-width: 100%; border-radius: 0; display: block; }

/* ── brief 挂点(org header,品牌胶囊右侧):展开 = 胶囊,折叠 = 24px 圆角方块(owner 2026-08-22) ── */
.studio-brief-wrap { margin-left: 8px; }
/* Room settings:成员行 = 头像 + 名字(左)、开关(右),行本身复用 settings-row */
.studio-room-member-label { display: inline-flex; align-items: center; gap: 8px; }
.studio-room-member-right { display: inline-flex; align-items: center; gap: 10px; }
/* 模型下拉选项里型号后面的牌价:次级小字,靠右、勾号前;选项本身是 space-between 的 flex,所以用 margin-left:auto 推到右边 */
.settings-model-price { margin-left: auto; padding: 0 10px 0 16px; font-size: 12px; color: var(--color-text-secondary); white-space: nowrap; }
/* verbose 模式的步骤行:次级小字,不进气泡;摘要用行内代码的字号档(0.9em)单行省略 */
.studio-meeting-step { display: flex; align-items: center; gap: 8px; margin: 2px 0; font-size: 12px; color: var(--color-text-secondary); }
.studio-meeting-step-label { font-weight: 500; flex: 0 0 auto; }
.studio-meeting-step-summary { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
/* 胶囊度量逐项照抄 .studio-org-brand-name.is-clickable(14px/500/3px 10px/999):同一套字号+内距 = 等高由构造保证,不靠写死高度 */
.studio-brief-tile {
  display: inline-flex; align-items: center; gap: 6px; box-sizing: border-box; flex: 0 0 auto;
  font-size: 14px; font-weight: 500; padding: 3px 10px 3px 6px; border-radius: 999px;
  corner-shape: round;
  border: none; background: transparent; cursor: pointer; max-width: 180px; overflow: hidden;
}
.studio-brief-tile.is-empty { border: 1px dashed var(--color-border); color: var(--color-text-secondary); padding: 2px 9px 2px 5px; }   /* 1px 虚线边计入盒高,内距各让 1px 保等高 */
.studio-brief-tile.has-filetype { color: #fff; }   /* 白字/白图标压文件类型色,同 .studio-portfolio-thumb.has-filetype */
/* ★尺寸按【path】算,不按 svg(owner 2026-08-22 实量):文件图标的 path 在 24 视口里只占 y 3→21(18 单位),
   svg 15 画出来 path 只有 11.25。path 15 → svg 20(15×24/18);path 顶在 svg 内 2.5px,svg 放进 21 框偏 0.5
   → path 顶 3 / 底 18,在 21 的行盒(14px×1.5)里上下各 3,整数正中。框取 21 = 行盒高,不再另层居中。 */
.studio-brief-tile-ic { display: inline-flex; align-items: center; justify-content: center; width: 21px; height: 21px; flex: 0 0 auto; border-radius: calc(4px * var(--corner-k)); overflow: hidden; }
.studio-brief-tile-ic svg { width: var(--icon-size); height: var(--icon-size); }   /* path 15 高(见上);app 整块图标由 .is-app-icon 铺满 21px 框 */
.studio-brief-tile-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
 html:not([data-input="touch"]) .studio-brief-tile.is-empty:hover{ background: var(--color-bg-hover); } 
.studio-brief-tile.is-empty:active { background: var(--color-bg-hover); }
 html:not([data-input="touch"]) .studio-brief-tile.has-filetype:hover{ filter: brightness(var(--press-hover)); } 
.studio-brief-tile.has-filetype:active { filter: brightness(var(--press-active)); }
/* 折叠竖条:胶囊收成 24px 圆角方块(宽高 = 品牌折叠成的 24px 圆点),只留图标;曲率 = 作品集缩略图的一半(方块是它一半大)。
   挂到那盏连接灯【上方】,同灯一样绝对定位不换爹;bottom = 灯的 10 + 灯高 36 + 间隙 8 */
.studio-org-chart.studio-org-folded .studio-brief-wrap { position: absolute; bottom: 54px; left: 50%; transform: translateX(-50%); margin: 0; z-index: 1; }
/* 36 = 下面那盏连接灯(.chat-header-btn)的边长(owner 2026-08-22);曲率仍照 48 缩略图比例(36/48 × --img-radius) */
.studio-org-chart.studio-org-folded .studio-brief-tile { width: 36px; height: 36px; padding: 0; gap: 0; justify-content: center; border-radius: calc(var(--img-radius) * 0.75); }
.studio-org-chart.studio-org-folded .studio-brief-tile-name { display: none; }
.studio-org-chart.studio-org-folded .studio-brief-tile-ic { width: 36px; height: 36px; border-radius: 0; }
.studio-org-chart.studio-org-folded .studio-brief-tile-ic svg { width: var(--icon-size); height: var(--icon-size); }   /* 同展开态 svg 20 → path 15,两态一个尺寸(owner);36 框里 svg 偏 8 整数,path 10.5/10.5 对称 */
.studio-org-chart.studio-org-folded:has(.studio-brief-tile:not([hidden])) .studio-org-scroll { padding-bottom: 96px; }   /* 灯 10+36 + 缝 8 + 方块 36 = 90,再留 6 */

/* A whole-piece note wears the picture icon in its circle (no word); sized like the images composer's own plus-icon svg (18) */
.studio-pf-stack-count.studio-markup-tag svg { width: var(--icon-size); height: var(--icon-size); display: block; }

/* Static markup overlay on a shown picture (the chat copy of an edited picture): the host keeps the layer over the img; nothing is interactive. */
.has-markup-overlay { position: relative; }
.studio-markup-static { pointer-events: none; }
/* Earlier rounds under the round being written: dashed, dim, under the live layer, no numbers */
.studio-markup-figure > .studio-markup-layer:not(.studio-markup-static) { z-index: 1; }
.studio-markup-static.is-history { z-index: 0; }
.studio-markup-static.is-history .studio-markup-box { border-style: dashed; opacity: 0.5; }
.studio-markup-static.is-history .studio-markup-box.is-lasso polygon.line { stroke-dasharray: 4 3; }

/* Discard reasons in the shared delete dialog: pill buttons that toggle; picked = the site's chosen-state ink (same as an active chip). */
.delete-modal-reasons { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 0; }
.delete-modal-reason.is-picked { background: var(--color-text); border-color: var(--color-text); color: var(--color-bg-page); }

/* The author chip on the markup picture: same chip as the viewer's (ai-chat-file-preview.css owns its look), here only the seat. */
.studio-markup-figure > .duo-viewer-by { position: absolute; right: 10px; bottom: 10px; z-index: 3; line-height: normal; }
