/* ── Messages ── */
.scroll{
  flex: 1 1 auto;
  overflow-y: auto;
  overflow-x: hidden;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;
  overflow-anchor: none;
  padding: clamp(14px, 2.4vw, 28px) var(--side-pad) var(--composer-zone);
  display: flex; flex-direction: column;
  transition: padding-bottom .28s cubic-bezier(.2,.8,.2,1);
  /* 边缘渐隐:顶部一段、底部对齐 composer 上沿一段,消息滚到边缘自然淡出 */
  -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 var(--edge-fade-top), #000 calc(100% - var(--composer-zone)), transparent calc(100% - var(--composer-zone) + var(--edge-fade-tail)));
  mask-image: linear-gradient(to bottom, transparent 0, #000 var(--edge-fade-top), #000 calc(100% - var(--composer-zone)), transparent calc(100% - var(--composer-zone) + var(--edge-fade-tail)));
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
}
.scroll::-webkit-scrollbar{ width:0; height:0; }
.v-spacer{
  flex: 0 0 auto;
  width: 100%;
  min-height: 0;
  pointer-events: none;
}

.day{
  align-self: center;
  margin: 0;
  font-family: var(--font-en), var(--font-cn);
  font-size: clamp(12px, 1.6vw, 16px); color: var(--text-faint);
  padding: 0;
  border-radius: 0;
  background: transparent;
  border: none;
}

.row{ display:flex; position:relative; margin-top: clamp(14px, 2.2vw, 28px); }
.day + .row{ margin-top: clamp(12px, 1.8vw, 20px); }
.new-divider{
  display:flex;
  align-items:center;
  justify-content:center;
  gap: clamp(16px, 2.4vw, 24px);
  margin: clamp(16px, 2.4vw, 28px) 0 clamp(12px, 1.8vw, 20px);
  color: var(--text-faint);
  font-family: var(--font-en), var(--font-cn);
  font-size: clamp(12px, 1.6vw, 16px);
  line-height:1;
  letter-spacing:0;
}
.new-divider::before,
.new-divider::after{
  content:"";
  width: clamp(94px, 24vw, 226px);
  height:1px;
  background: var(--hairline);
}
.row.grouped{ margin-top: clamp(4px, 0.8vw, 8px); }
.row.human{ justify-content: flex-end; }
.row.ai{ justify-content: flex-start; padding-left: calc(var(--avatar-size) + clamp(10px, 1.6vw, 16px)); }
.row.ai::before{
  content:"";
  position:absolute;
  left:0;
  top: clamp(5px, 1vw, 9px);
  width: var(--avatar-size);
  height: var(--avatar-size);
  border-radius: 50%;
  background-image: var(--avatar-default);
  background-size: cover;
  background-position: center;
  box-shadow: 0 12px 24px rgba(24,46,67,0.14);
}

.bubble{
  max-width: min(61vw, 506px);
  padding: clamp(8px, 1.05vw, 12px) clamp(13px, 1.65vw, 18px) clamp(8px, 1.1vw, 13px);
  border-radius: var(--bubble-radius);
  position: relative;
  font-family: var(--font-cn);
  font-size: clamp(14px, 1.55vw, 16px); line-height: 1.58;
  word-wrap: break-word;
  overflow-wrap: break-word;
  animation: pop .24s cubic-bezier(.2,.8,.2,1) both;
}
.row[data-vkey] .bubble,
.row[data-vkey] .think-block{ animation: none; }
@keyframes pop{ from{ transform: translateY(5px) scale(.99);} to{ transform:none;} }
/* 新消息入场:轻微弹性,只对刚发/刚收到那条播一次(虚拟列表复用不重播,JS 控 enter class) */
.row[data-vkey].enter-human .bubble{ transform-origin: bottom right; animation: enterHuman .44s cubic-bezier(.34,1.46,.5,1) both; }
.row[data-vkey].enter-ai .bubble{ transform-origin: bottom left; animation: enterAi .44s cubic-bezier(.34,1.46,.5,1) both; }
@keyframes enterHuman{ from{ transform: translate(6px, 9px) scale(.95); opacity:0; } 55%{ opacity:1; } to{ transform:none; opacity:1; } }
@keyframes enterAi{ from{ transform: translate(-6px, 9px) scale(.95); opacity:0; } 55%{ opacity:1; } to{ transform:none; opacity:1; } }
.row.ai .bubble{
  background: var(--bubble-ai-bg);
  color: var(--bubble-ai-fg);
  border: 0;
  box-shadow: 0 10px 28px rgba(78, 94, 108, 0.08);
}
.row.human .bubble{
  background: var(--bubble-human-bg);
  color: var(--bubble-human-fg);
  border: 0;
  box-shadow: 0 10px 28px rgba(78, 94, 108, 0.08);
}
/* 每段最后一条:外下角收一个小尖 */
.row.ai.tail .bubble{ border-bottom-left-radius: 2px; }
.row.human.tail .bubble{ border-bottom-right-radius: 2px; }

.bubble .txt{ white-space: normal; }
.bubble.has-att{ display:flex; flex-direction:column; gap:6px; }
.bubble.att-only{ background:transparent !important; padding:0 !important; box-shadow:none !important; }
.ys-attachment-group{ width:min(64vw,280px); max-width:100%; }
.bubble:not(.att-only) .ys-attachment-group{ width:100%; }
.ys-attachment-toggle{ display:grid; grid-template-columns:36px minmax(0,1fr) 22px; align-items:center; gap:9px; width:100%; min-height:54px; padding:8px 10px; border:1px solid var(--hairline); border-radius:14px; background:var(--field-bg); color:inherit; text-align:left; font:inherit; box-shadow:var(--soft-shadow); }
.ys-attachment-toggle-icon{ display:grid; place-items:center; width:36px; height:36px; border-radius:10px; background:rgba(125,128,135,.14); color:var(--text-soft); }
.ys-attachment-toggle-icon svg{ width:20px; height:20px; }
.ys-attachment-toggle-copy{ min-width:0; }
.ys-attachment-toggle-copy b,.ys-attachment-toggle-copy small{ display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ys-attachment-toggle-copy b{ font-size:12.5px; font-weight:500; }
.ys-attachment-toggle-copy small{ margin-top:3px; color:var(--text-faint); font-size:10px; }
.ys-attachment-toggle-arrow{ color:var(--text-faint); font:20px/1 var(--font-en); text-align:center; }
.ys-attachment-group.expanded .ys-attachment-toggle-arrow{ transform:rotate(180deg); }
.ys-attachment-body{ display:grid; gap:6px; padding-top:6px; }
.ys-attachment-group:not(.expanded) .ys-attachment-body{ display:none; }
.ys-attachment-collapse{ display:none; align-items:center; justify-content:center; gap:7px; width:100%; min-height:44px; margin-top:6px; border:1px solid var(--hairline); border-radius:12px; background:var(--field-bg); color:var(--text-soft); font:11px/1 var(--font-cn); }
.ys-attachment-group.expanded .ys-attachment-collapse{ display:flex; }
.ys-attachment-collapse span{ color:var(--text-faint); font:15px/1 var(--font-en); }
.att-img-link{ display:block; line-height:0; border-radius:14px; overflow:hidden; width:min(64vw,260px); aspect-ratio:var(--att-ratio, 1.04); max-height:340px; background:rgba(125,128,135,.10); }
.att-img{ display:block; width:100%; height:100%; object-fit:cover; border-radius:14px; }
.artifact-card{
  width:min(64vw,260px);
  margin:0;
  overflow:hidden;
  border:1px solid var(--hairline);
  border-radius:14px;
  background:var(--field-bg);
  box-shadow:var(--soft-shadow);
}
.artifact-card .att-img-link{ width:100%; padding:0; border:0; border-radius:0; cursor:zoom-in; }
.artifact-card .att-img{ border-radius:0; }
.artifact-card figcaption{
  display:flex;
  min-height:44px;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  padding:0 8px 0 12px;
  color:var(--text-faint);
  font-family:var(--font-cn);
  font-size:11px;
  line-height:1.3;
}
.artifact-viewer{
  --artifact-viewer-bg:rgba(10,16,24,.88);
  position:fixed;
  inset:0;
  z-index:500;
  opacity:0;
  pointer-events:none;
  transition:opacity var(--motion-normal) var(--ease-soft);
}
.artifact-viewer.open{ opacity:1; pointer-events:auto; }
.artifact-viewer-scrim{ position:absolute; inset:0; background:var(--artifact-viewer-bg); backdrop-filter:blur(10px); }
.artifact-viewer-panel{ position:relative; width:100%; height:100%; display:flex; flex-direction:column; color:var(--text); }
.artifact-viewer-stage{
  position:relative;
  flex:1 1 auto;
  min-height:0;
  display:grid;
  place-items:center;
  padding:max(64px,calc(env(safe-area-inset-top) + 56px)) 18px 14px;
}
.artifact-viewer-stage img{
  display:block;
  max-width:min(96vw,1400px);
  max-height:calc(100dvh - 230px);
  width:auto;
  height:auto;
  object-fit:contain;
  border-radius:12px;
  box-shadow:0 30px 80px rgba(0,0,0,.42);
}
.artifact-viewer-close{
  position:absolute;
  z-index:2;
  top:max(12px,env(safe-area-inset-top));
  right:max(12px,env(safe-area-inset-right));
  width:44px;
  height:44px;
  border:1px solid rgba(255,255,255,.24);
  border-radius:50%;
  background:rgba(18,26,36,.62);
  color:var(--accent-fg);
  font:28px/1 var(--font-en);
  cursor:pointer;
}
.artifact-viewer-footer{
  position:relative;
  flex:0 0 auto;
  width:min(calc(100vw - 28px),920px);
  margin:0 auto max(14px,env(safe-area-inset-bottom));
  padding:12px 14px;
  display:grid;
  grid-template-columns:minmax(220px,1fr) auto auto;
  align-items:center;
  gap:8px 14px;
  border:1px solid var(--hairline);
  border-radius:20px;
  background:var(--composer-bg);
  box-shadow:var(--shadow);
}
.artifact-name-field{ display:grid; grid-template-columns:auto minmax(0,1fr); align-items:center; gap:9px; min-width:0; }
.artifact-name-field span{ color:var(--text-faint); font:11px/1 var(--font-cn); }
.artifact-name-field input{
  min-width:0; min-height:44px; padding:0 11px; border:1px solid var(--field-line); border-radius:12px;
  outline:0; background:var(--field-bg); color:var(--text); font:13px/1 var(--font-cn);
}
.artifact-name-field input:focus{ border-color:var(--accent); }
.artifact-location-row{ grid-column:1/2; display:flex; align-items:center; justify-content:space-between; gap:10px; min-width:0; }
.artifact-location-row>span{ min-width:0; }
.artifact-location-row b,.artifact-location-row small{ display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.artifact-location-row b{ font:500 12px/1.3 var(--font-cn); }
.artifact-location-row small{ margin-top:2px; color:var(--text-faint); font:10.5px/1.3 var(--font-cn); }
.artifact-location-row button{
  flex:0 0 auto; min-height:44px; padding:0 12px; border:1px solid var(--hairline); border-radius:12px;
  background:var(--field-bg); color:var(--accent); font:12px/1 var(--font-cn); cursor:pointer;
}
.artifact-location-row button:disabled{ opacity:.55; cursor:default; }
.artifact-format-actions{ min-width:270px; }
.artifact-format-actions button{
  min-height:44px;
  font:12px/1 var(--font-en),var(--font-cn);
}
.artifact-confirm-download{
  min-width:112px; min-height:50px; padding:0 18px; border:0; border-radius:14px;
  background:var(--send-bg); color:var(--accent-fg); font:13px/1 var(--font-cn); cursor:pointer;
  box-shadow:var(--soft-shadow);
}
.artifact-confirm-download:active{ transform:scale(.985); }
.artifact-confirm-download:disabled{ opacity:.58; cursor:default; }
.artifact-format-note{ grid-column:2/-1; min-height:16px; margin:0; color:var(--text-faint); font:11px/1.45 var(--font-cn); text-align:right; }
body.artifact-viewer-open{ overflow:hidden; }

@media (max-width: 600px){
  .artifact-viewer-stage{ padding-inline:10px; }
  .artifact-viewer-stage img{ max-height:calc(100dvh - 350px); }
  .artifact-viewer-footer{ grid-template-columns:1fr; gap:9px; padding:11px; }
  .artifact-name-field,.artifact-location-row,.artifact-format-actions,.artifact-confirm-download,.artifact-format-note{ grid-column:1; }
  .artifact-location-row{ grid-column:1; }
  .artifact-format-actions{ min-width:0; }
  .artifact-confirm-download{ width:100%; }
  .artifact-format-note{ text-align:left; }
}
.att-file{ display:flex; align-items:center; gap:10px; padding:9px 11px; min-width:170px; max-width:280px; border:0; text-align:left; text-decoration:none; color:inherit; background:rgba(125,128,135,.12); border-radius:12px; cursor:pointer; }
.att-file:disabled{ cursor:default; }
.att-file-ic{ flex:0 0 auto; width:36px; height:36px; display:grid; place-items:center; border-radius:9px; background:rgba(125,128,135,.20); }
.att-file-ic svg{ width:20px; height:20px; opacity:.85; }
.att-file-meta{ display:flex; flex-direction:column; min-width:0; }
.att-file-name{ font-size:13px; font-weight:600; line-height:1.3; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.att-file-size{ font-size:11px; opacity:.6; margin-top:2px; }
.att-file-draft{ flex:0 0 auto; padding:3px 7px; border:1px solid var(--hairline); border-radius:999px; color:var(--text-faint); font-size:10px; line-height:1; }
.att-uploading{ opacity:.62; }
.att-img-dead img{ display:none; }
.att-img-dead::after{ content:"⚠ 图片已失效"; display:inline-block; padding:16px 20px; font-size:12px; color:var(--text-faint); background:rgba(125,128,135,.14); border-radius:14px; }
.att-failed{ outline:1.5px solid #e3534d; outline-offset:1px; }
.bubble .txt a{ color: inherit; text-decoration: underline; text-underline-offset: 2px; }
.bubble .txt code{
  font-family: ui-monospace, "SF Mono", Menlo, monospace; font-size: .92em;
  background: rgba(120,100,80,0.14); padding: 1px 5px; border-radius: 5px;
}
.bubble .txt strong{ font-weight: 700; }
.bubble .txt>p{ margin:0; }
.bubble .txt>p+p,.bubble .txt>p+ul,.bubble .txt>p+ol,.bubble .txt>ul+p,.bubble .txt>ol+p{ margin-top:.62em; }
.bubble .txt h2,.bubble .txt h3,.bubble .txt h4{ margin:.15em 0 .45em; font-family:var(--font-cn); line-height:1.35; }
.bubble .txt h2{ font-size:1.28em; }.bubble .txt h3{ font-size:1.16em; }.bubble .txt h4{ font-size:1.06em; }
.bubble .txt ul,.bubble .txt ol{ margin:.35em 0; padding-left:1.45em; }
.bubble .txt li+li{ margin-top:.2em; }
.bubble .txt blockquote{ margin:.45em 0; padding:.25em .75em; border-left:2px solid var(--hairline); color:var(--text-soft); }
.ys-code-block{ width:min(72vw,560px); max-width:100%; margin:.45em 0; overflow:hidden; border:1px solid var(--hairline); border-radius:12px; background:rgba(20,28,38,.91); color:#e8edf2; }
.ys-code-block header{ min-height:38px; display:flex; align-items:center; justify-content:space-between; padding:0 9px 0 12px; border-bottom:1px solid rgba(255,255,255,.11); color:#aebcca; font:11px/1 var(--font-en),var(--font-cn); }
.ys-code-block header button{ min-width:54px; min-height:32px; border:0; border-radius:8px; background:rgba(255,255,255,.09); color:#d9e1e8; cursor:pointer; }
.ys-code-block pre{ margin:0; padding:12px 14px 14px; overflow:auto; white-space:pre; tab-size:2; }
.ys-code-block code{ padding:0 !important; background:none !important; color:inherit; font:12.5px/1.62 ui-monospace,"SFMono-Regular",Consolas,monospace !important; }
.code-keyword{ color:#d9a9ff; }.code-string{ color:#b8dfad; }.code-comment{ color:#8092a4; font-style:italic; }
.ys-table-wrap{ max-width:100%; margin:.5em 0; overflow-x:auto; border:1px solid var(--hairline); border-radius:12px; }
.ys-table-wrap table{ width:100%; min-width:300px; border-collapse:collapse; font-size:.9em; }
.ys-table-wrap th,.ys-table-wrap td{ padding:8px 10px; border-bottom:1px solid var(--hairline); text-align:left; vertical-align:top; }
.ys-table-wrap th{ background:rgba(125,128,135,.11); font-weight:600; }.ys-table-wrap tr:last-child td{ border-bottom:0; }
.ys-svg-card,.ys-interactive-card{ width:min(72vw,560px); max-width:100%; margin:6px 0; overflow:hidden; border:1px solid var(--hairline); border-radius:14px; background:var(--field-bg); }
.ys-svg-card{ padding:10px; }.ys-svg-card img{ width:100%; max-height:340px; object-fit:contain; }.ys-svg-card figcaption{ padding:8px 2px 0; color:var(--text-faint); font-size:11px; }
.ys-interactive-card header{ display:flex; align-items:center; justify-content:space-between; min-height:42px; padding:0 12px; font-size:12px; }.ys-interactive-card header span{ color:var(--text-faint); font-size:10px; }
.ys-interactive-card iframe{ display:block; width:100%; height:260px; border:0; border-top:1px solid var(--hairline); background:#fff; }
.ys-search-results{ display:grid; gap:7px; width:min(72vw,560px); max-width:100%; margin:6px 0; }
.ys-search-results a{ display:grid; gap:3px; padding:10px 12px; border:1px solid var(--hairline); border-radius:12px; background:var(--field-bg); color:inherit; text-decoration:none !important; }
.ys-search-results strong{ font-size:13px; }.ys-search-results span{ color:var(--text-faint); font-size:11px; line-height:1.4; }
.ys-image-results{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; width:min(72vw,560px); max-width:100%; margin:6px 0; }
.ys-image-results a{ overflow:hidden; border:1px solid var(--hairline); border-radius:12px; background:var(--field-bg); color:inherit; text-decoration:none !important; }.ys-image-results img{ width:100%; aspect-ratio:4/3; object-fit:cover; }.ys-image-results span{ display:block; padding:7px 8px; font-size:10.5px; }

.file-viewer-panel{ position:relative; width:min(calc(100vw - 24px),900px); height:min(calc(100dvh - 24px),820px); margin:12px auto; display:grid; grid-template-rows:auto minmax(0,1fr) auto; overflow:hidden; border:1px solid var(--hairline); border-radius:22px; background:var(--composer-bg); box-shadow:var(--shadow); }
.file-viewer-head{ padding:max(18px,env(safe-area-inset-top)) 64px 12px 20px; border-bottom:1px solid var(--hairline); }.file-viewer-head>span{ color:var(--text-faint); font:10px/1 var(--font-en); letter-spacing:.18em; }.file-viewer-head h2{ margin:5px 0 2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font:500 17px/1.35 var(--font-cn); }.file-viewer-head p{ margin:0; color:var(--text-faint); font:11px/1.4 var(--font-cn); }
.file-viewer-content{ min-height:0; padding:18px; overflow:auto; background:rgba(255,255,255,.18); }.file-viewer-content>.ys-code-block,.file-viewer-content>.ys-table-wrap{ width:100%; max-width:100%; }.file-viewer-content>p{ margin:0 0 .8em; }.file-viewer-content iframe{ width:100%; height:100%; min-height:420px; border:0; background:#fff; }
.file-preview-loading,.file-preview-empty{ min-height:220px; display:grid; place-items:center; align-content:center; gap:8px; color:var(--text-faint); text-align:center; }.file-preview-empty span{ font-size:38px; }.file-preview-empty strong{ color:var(--text); }.file-preview-empty p{ max-width:360px; margin:0; font-size:12px; }
.file-viewer-footer{ padding:12px 14px max(12px,env(safe-area-inset-bottom)); display:grid; grid-template-columns:minmax(220px,1fr) minmax(220px,1fr) auto; align-items:center; gap:8px 14px; border-top:1px solid var(--hairline); }.file-viewer-footer .artifact-format-note{ grid-column:1/-1; }
@media(max-width:600px){ .file-viewer-panel{ width:100%; height:100dvh; margin:0; border-radius:0; }.file-viewer-content{ padding:12px; }.file-viewer-footer{ grid-template-columns:1fr; }.file-viewer-footer>*{ grid-column:1 !important; }.ys-code-block,.ys-svg-card,.ys-interactive-card,.ys-search-results,.ys-image-results{ width:100%; } }
.meta{
  display:inline; margin-left: clamp(10px, 1.4vw, 16px); white-space: nowrap;
  font-family: var(--font-en), var(--font-cn);
  font-size: clamp(11px, 1.3vw, 14px); color: var(--text-faint); user-select:none;
  vertical-align: baseline;
}
.bubble .meta:empty{ display:none; }
.meta .tick{ color: var(--tick); margin-left: 7px; letter-spacing:0; }
.meta .state{ color: var(--accent); }
.meta .fail{ color:#c0533f; cursor:pointer; }
.row.human .meta,
.row.ai .meta{ color: var(--text-faint); }
.row.human .meta .tick,
.row.ai .meta .tick{ color: var(--tick); }
/* 发送中:小时钟,转完即送达 → 同位换成 ✓ */
.meta .tick.clock{ color: var(--tick); }
.meta .tick.clock svg{ width: 1.05em; height: 1.05em; vertical-align: -0.18em; }

/* ── thinking ── collapsed follows AI bubble; expanded becomes a quiet reading section ── */
.row.think{
  justify-content: flex-start;
  padding-left: 0;
  padding-right: 0;
  margin-top: clamp(7px, 1.2vw, 12px);
  margin-bottom: clamp(10px, 1.8vw, 18px);
}
.row.think.think-open{
  justify-content: flex-start;
  padding-left: 0;
  padding-right: 0;
  margin-top: clamp(7px, 1.2vw, 12px);
  margin-bottom: clamp(10px, 1.8vw, 18px);
}
.think-block{
  width: min(61vw, 506px);
  max-width: min(61vw, 506px);
  color: var(--think-body);
  text-align: left;
  animation: pop .24s cubic-bezier(.2,.8,.2,1) both;
}
.think-block.open{
  width: min(61vw, 506px);
  max-width: min(61vw, 506px);
  padding: 10px 12px 11px;
  border-left: 2px solid var(--hairline);
  border-radius: 0 12px 12px 0;
  background: var(--seg-track);
  text-align: left;
}
.think-toggle{
  appearance: none;
  -webkit-appearance: none;
  width: auto;
  max-width: 100%;
  padding: 0;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
}
.think-block.open .think-toggle{
  width: auto;
  display: inline-flex;
  flex-direction: row;
  align-items: center;
  gap: 6px;
}
.think-toggle:hover .think-caption{ color: var(--accent); }
.think-toggle:active{ transform: translateY(1px); }
.think-rule{
  display: none;
  position: relative;
  width: 100%;
  height: 1px;
  color: var(--think-flourish);
}
.think-block.open .think-rule{ display: none; }
.think-rule::before{
  content: "";
  position: absolute;
  left: clamp(22px, 6vw, 64px);
  right: clamp(22px, 6vw, 64px);
  top: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--think-flourish) 16%, var(--think-flourish) 84%, transparent);
  opacity: .46;
}
.think-caption{
  display: inline-flex;
  align-items: center;
  justify-content: flex-start;
  gap: 6px;
  color: var(--think-label);
  font-family: var(--font-en), var(--font-cn);
  font-size: clamp(12px, 1.38vw, 14px);
  line-height: 1.1;
  letter-spacing: .08em;
  transition: color var(--motion-fast) var(--ease-soft);
}
.think-caption-star,
.think-state{
  color: var(--think-flourish);
  font-size: 1.18em;
  line-height: 1;
  transform: translateY(-.02em);
}
.think-block.open .think-caption-star{ display: none; }
.think-state::before{ content: "✧"; }
.think-block.open .think-state::before{ content: "✦"; }
.think-body[hidden]{ display: none !important; }
.think-body{
  margin-top: 8px;
}
.think-text{
  width: 100%;
  margin: 0;
  color: var(--think-body);
  font-family: var(--font-cn);
  font-size: clamp(12px, 1.25vw, 13.5px);
  line-height: 1.72;
  text-align: left;
  white-space: normal;
  overflow-wrap: break-word;
}
.think-copy{ min-width: 0; }
.think-copy a{ color: inherit; text-decoration: underline; text-underline-offset: 2px; }
.think-copy code{
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: .9em;
  background: rgba(120,100,80,0.10);
  padding: 1px 5px;
  border-radius: 5px;
}

/* ── act ── the AI's action chip: a quiet "what it just did", optionally expand to see raw tool calls ──
   视觉与 thinking 同一族(--think-* 配色),但更小、更收,贴在头像缝隙里,不抢气泡 ── */
.row.act{
  justify-content: flex-start;
  padding-left: 0;
  padding-right: clamp(12px, 4vw, 40px);
  margin-top: clamp(4px, 0.9vw, 9px);
  margin-bottom: clamp(4px, 0.9vw, 9px);
}
.act-block{
  max-width: min(80vw, 470px);
  animation: pop .24s cubic-bezier(.2,.8,.2,1) both;
}
.act-toggle{
  appearance: none; -webkit-appearance: none;
  margin: 0; padding: 2px 0; border: 0; background: transparent;
  color: inherit; font: inherit; cursor: pointer; text-align: left;
  max-width: 100%;
  display: inline-flex; align-items: baseline; gap: 7px;
}
.act-toggle.bare{ cursor: default; }
.act-toggle:focus-visible{ outline: none; }
.act-glyph{
  flex: none;
  color: var(--think-flourish);
  font-size: 1.04em; line-height: 1;
  transform: translateY(.06em);
}
.act-label{
  color: var(--think-label);
  font-family: var(--font-cn);                /* 统一宋体:--font-en 末尾的通用 serif 会先吃掉 CJK→iOS 回退黑体 */
  font-size: clamp(12px, 1.32vw, 13.5px);
  line-height: 1.46;
  letter-spacing: .02em;
}
/* 展开指示:沿用 thinking 的空心星 ✧(收起)→ 实心 ✦(展开),比"· 展开"文字更轻、不突兀 */
.act-state{
  flex: none;
  color: var(--think-flourish);
  font-size: 1.1em;
  line-height: 1;
  transform: translateY(.02em);
  transition: color var(--motion-fast) var(--ease-soft);
}
.act-state::before{ content: "✧"; }
.act-block.open .act-state::before{ content: "✦"; }
.act-toggle:hover .act-state{ color: var(--accent); }
.act-toggle:hover .act-label{ color: var(--think-body); }
.act-toggle:active{ transform: translateY(1px); }
.act-detail[hidden]{ display: none !important; }
.act-detail{
  margin-top: 8px;
  border-radius: 12px;
  background: rgba(127,127,127,0.08);
  border: 1px solid var(--field-line);
  padding: clamp(9px, 1.6vw, 13px) clamp(11px, 1.8vw, 14px);
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  font-size: 12px; line-height: 1.6;
  color: var(--think-body);
  overflow-x: auto;
  animation: pop .2s cubic-bezier(.2,.8,.2,1) both;
}
.act-step + .act-step{
  margin-top: 7px; padding-top: 7px;
  border-top: 1px dashed var(--field-line);
}
.act-line{ white-space: pre-wrap; overflow-wrap: anywhere; }
.act-k{ color: var(--text-faint); user-select: none; }
.act-v{ color: var(--think-body); }
.artifact-act .act-block{
  display:flex;
  min-height:44px;
  align-items:center;
  gap:10px;
}
.artifact-act .act-toggle{ min-height:44px; }
.artifact-act.artifact-failed .act-label{ color:var(--text); }
.artifact-action{
  min-width:72px;
  min-height:44px;
  padding:0 12px;
  border:1px solid var(--hairline);
  border-radius:12px;
  background:var(--field-bg);
  color:var(--accent);
  font:12px/1 var(--font-cn);
  cursor:pointer;
  transition:background var(--motion-fast) var(--ease-soft),opacity var(--motion-fast) var(--ease-soft);
}
.artifact-action:hover,
.artifact-action:active{ background:var(--row-press); }
.artifact-action:disabled{ opacity:.58; cursor:default; }

@media (max-width: 520px){
  .artifact-act .act-block{ width:min(88vw,470px); }
  .artifact-act .act-toggle{ min-width:0; flex:1; }
  .artifact-act .act-label{ overflow-wrap:anywhere; }
  .artifact-action{ flex:0 0 auto; }
}

/* ── interactive replies and resumable task progress ── */
.ys-interaction-card,.ys-task-card{
  min-width:min(330px,70vw);
  margin-top:10px;
  padding:12px;
  border:1px solid var(--field-line);
  border-radius:16px;
  background:rgba(255,255,255,.34);
  color:var(--text);
}
.ys-interaction-card p,.ys-task-card p{ margin:0 0 9px; color:var(--text-soft); font-size:12px; line-height:1.55; }
.ys-choice-options{ display:grid; gap:6px; }
.ys-choice-options button,.ys-choice-own,.ys-task-card>button{
  width:100%; min-height:42px; padding:8px 11px;
  border:1px solid var(--hairline); border-radius:11px;
  background:var(--field-bg); color:var(--text); font:11px/1.3 var(--font-cn); text-align:left;
}
.ys-choice-options button.selected{ border-color:var(--accent); color:var(--accent); }
.ys-choice-options button:disabled{ opacity:.62; }
.ys-choice-own{ margin-top:6px; color:var(--text-soft); text-align:center; }
.ys-interaction-card small{ display:block; margin-top:8px; color:var(--text-faint); font-size:9px; }
.ys-task-card header{ display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:4px; }
.ys-task-card header strong{ font-size:12px; font-weight:500; }
.ys-task-card header span{ color:var(--accent); font-size:9px; }
.ys-task-track{ height:4px; margin:10px 0 12px; border-radius:99px; overflow:hidden; background:var(--slider-track); }
.ys-task-track i{ display:block; height:100%; border-radius:inherit; background:var(--slider-thumb); transition:width .32s var(--ease-soft); }
.ys-task-card ol{ display:grid; gap:7px; margin:0; padding:0; list-style:none; }
.ys-task-card li{ display:flex; align-items:center; gap:8px; color:var(--text-faint); font-size:10px; }
.ys-task-card li span{ display:grid; place-items:center; flex:0 0 21px; width:21px; height:21px; border:1px solid var(--hairline); border-radius:50%; font:9px/1 var(--font-en); }
.ys-task-card li.active{ color:var(--text); }
.ys-task-card li.active span{ border-color:var(--accent); color:var(--accent); }
.ys-task-card li.done{ color:var(--text-soft); }
.ys-task-card li.done span{ border-color:transparent; background:var(--seg-track); }
.ys-task-card>button{ margin-top:11px; color:var(--accent); text-align:center; }
@media (max-width:520px){.ys-interaction-card,.ys-task-card{ min-width:0; width:min(72vw,330px); box-sizing:border-box; }}
@media (prefers-reduced-motion:reduce){.ys-task-track i{ transition:none; }}



