/* ================================================================
   OpenGovDev · 首页 AI 演示模块（融合版）
   视觉：miora open2（玻璃卡片 / 克制留白 / 浏览器外框 / 居中控制条）
   功能：open0721 原版（六步流式生成 / 可交互高保真后台 / 报价弹窗）
   仅服务于 #demo 区块，可独立复用。
   ================================================================ */

/* 纯黑背景；收紧上下留白，让 标题 + 演示窗口 + 控制条 一屏显示完整
   （用 #demo 提升优先级，压过 body>section:not(.hero) 的 9vh padding） */
.demo{background:#000}
#demo{padding:34px 0 38px}
.demo-shell{scroll-margin-top:92px}

/* ---------- 段落标题 ---------- */
.demo-head{text-align:center;max-width:760px;margin:0 auto 22px}
.demo-head .eyebrow{color:#8a8278;font-size:12px;font-weight:500;letter-spacing:.14em;margin-bottom:12px}
.demo-head h2{font-size:clamp(26px,3.2vw,38px);letter-spacing:-.03em;font-weight:800;color:var(--text)}
.demo-head .lede{margin-top:14px;font-size:14.5px;line-height:1.8;color:var(--muted)}
.demo-case-copy span{display:block}
.demo-case-copy span:first-child{color:#d7d0c3;font-weight:650}
.demo-case-copy span+span{margin-top:2px}

/* ---------- 外壳：玻璃卡片（参考更舒服的 open3 glass-card：更轻的阴影） ---------- */
.demo-shell{
  border:1px solid rgba(226,189,85,.12);
  border-radius:16px;
  background:rgba(255,255,255,.03);
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);
  overflow:hidden;
  box-shadow:0 24px 64px -48px rgba(0,0,0,.7);
}

/* ---------- 需求摘要条 ---------- */
.agent-bar{display:flex;align-items:center;gap:14px;padding:13px 20px;border-bottom:1px solid rgba(226,189,85,.08);background:rgba(0,0,0,.14)}
.agent-bar .lab{flex:0 0 auto;font-size:11.5px;font-weight:700;color:var(--gold);letter-spacing:.14em}
.agent-bar .sum{flex:1;min-width:0;text-align:left;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);border-radius:10px;padding:8px 13px;font-size:12.5px;color:var(--muted);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:border-color .25s,color .25s}
.agent-bar .sum:hover{border-color:rgba(226,189,85,.3);color:var(--text)}
.agent-bar .acts{flex:0 0 auto;display:flex;gap:9px}
/* 顶部两个操作按钮：都带图标、等宽等高，视觉一致 */
.agent-bar .acts .demo-act{min-width:112px;justify-content:center;gap:6px}
.agent-bar .acts .demo-act svg{width:14px;height:14px;flex:none;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* ---------- 双栏 ---------- */
.agent-grid{display:grid;grid-template-columns:minmax(0,420px) minmax(0,1fr);min-height:600px}
.agent-col{display:flex;flex-direction:column;min-width:0}
.agent-col.chat{border-right:1px solid rgba(226,189,85,.08);padding:20px 20px 22px;gap:0}

/* 桌面端：演示区是首页最重要的产品证明区域，给足高度
   注意：下面 .prev-stage/.prev-frame 有一条不分断点的基础规则 min-height:520px，
   在源码顺序上排在本区块之后，会覆盖掉这里的 min-height:0，导致右侧预览框
   比左侧聊天列高、被 demo-shell 裁切、视觉上盖住下方控制条——这里用 !important 保证桌面端胜出 */
@media(min-width:1081px){
  #demo .agent-grid{grid-template-columns:minmax(0,420px) minmax(0,1fr);min-height:0;height:clamp(440px,calc(100svh - 272px),680px)}
  .agent-col{min-height:0}
  .agent-chat{max-height:none;flex:1;min-height:0}
  .prev-stage,.prev-frame{min-height:0!important;flex:1}
  .agent-col.chat{justify-content:flex-start}
}
@media(min-width:1400px){
  .agent-grid{grid-template-columns:minmax(0,440px) minmax(0,1fr)}
}

/* ---------- 左：AI 对话头 ---------- */
.agent-head{display:flex;align-items:center;gap:9px;margin-bottom:16px;flex-wrap:wrap}
.agent-head .bot{width:24px;height:24px;border-radius:50%;background:linear-gradient(135deg,var(--gold),#d4a843);display:flex;align-items:center;justify-content:center;flex:0 0 24px}
.agent-head .bot svg{width:13px;height:13px;stroke:#20180a;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.agent-head .nm{font-size:12px;font-weight:700;color:var(--gold);letter-spacing:.01em}
.agent-head .step{margin-left:auto;font-size:11px;color:var(--muted2);white-space:nowrap;font-variant-numeric:tabular-nums}
.agent-head .dots{display:flex;gap:4px;margin-left:8px}
.agent-head .dots i{width:14px;height:3px;border-radius:2px;background:rgba(255,255,255,.1);transition:background .35s var(--ease)}
.agent-head .dots i.on{background:linear-gradient(90deg,var(--gold),var(--gold2))}
.agent-head .dots i.run{background:rgba(226,189,85,.45);animation:demo-dot 1.1s ease-in-out infinite}
@keyframes demo-dot{50%{opacity:.35}}

/* ---------- 左：消息流 ---------- */
.agent-chat{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:14px;max-height:none;padding-right:4px;scroll-behavior:smooth}
.agent-chat::-webkit-scrollbar{width:4px}
.agent-chat::-webkit-scrollbar-thumb{background:rgba(255,255,255,.1);border-radius:3px}
.agent-chat::-webkit-scrollbar-track{background:transparent}

.brow{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.brow.user{align-items:flex-end}
.bstack{display:flex;flex-direction:column;gap:8px;min-width:0;max-width:88%}
.brow.user .bstack{align-items:flex-end;max-width:82%}

.bub{padding:12px 16px;font-size:13px;line-height:1.75;border-radius:16px;word-break:break-word}
.bub.ai{background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.055);color:var(--muted);border-top-left-radius:5px}
.bub.user{background:rgba(226,189,85,.09);border:1px solid rgba(226,189,85,.14);color:var(--text);border-top-right-radius:5px}
.bub .lead{color:#d7d0c3}

/* 工具调用（MHTML 蓝色等宽风格） */
.tool{display:flex;gap:9px;align-items:center;width:100%;padding:8px 12px;border-radius:10px;
  background:rgba(100,180,255,.05);border:1px solid rgba(100,180,255,.12);
  font-family:"Space Mono",ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:rgba(150,200,255,.92);
  text-align:left;transition:border-color .22s,background .22s,transform .18s var(--ease)}
.tool svg{flex:0 0 13px;width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.tool .lb{min-width:0;flex:1}
.tool .lb b{display:block;font-weight:700;color:rgba(180,215,255,.96);font-size:11px;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tool .lb small{display:block;margin-top:2px;font-size:10.5px;line-height:1.55;color:var(--muted2);word-break:break-word}
.tool .stt{flex:0 0 auto;font-size:10.5px;color:#7ec88c;white-space:nowrap}
.tool.run{background:rgba(100,180,255,.07)}
.tool.run .stt{color:rgba(150,200,255,.75)}
.tool.run svg{animation:demo-spin 1.4s linear infinite}
@keyframes demo-spin{to{transform:rotate(360deg)}}
button.tool{cursor:pointer}
button.tool:hover{border-color:rgba(100,180,255,.3);background:rgba(100,180,255,.09);transform:translate3d(2px,0,0)}
button.tool:focus-visible{outline:2px solid var(--gold);outline-offset:2px}

.chip{align-self:center;max-width:100%;padding:4px 12px;border-radius:999px;border:1px solid rgba(226,189,85,.14);background:rgba(226,189,85,.04);font-size:10.5px;color:var(--muted2);white-space:nowrap}
.chip b{color:var(--gold2);font-weight:700}

.typing{display:flex;gap:4px;padding:12px 15px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:16px;border-top-left-radius:5px;width:fit-content;align-items:center}
.typing span{width:5px;height:5px;border-radius:50%;background:var(--muted2);animation:demo-bounce 1.2s ease-in-out infinite}
.typing span:nth-child(2){animation-delay:.16s}
.typing span:nth-child(3){animation-delay:.32s}
.typing em{font-style:normal;font-size:11px;color:var(--muted2);margin-left:6px}
@keyframes demo-bounce{0%,60%,100%{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}

/* 入场：轻微淡入 + 10px 位移 */
.msg-in{animation:demo-in .34s cubic-bezier(.22,1,.36,1) both}
@keyframes demo-in{from{opacity:0;transform:translate3d(0,10px,0)}to{opacity:1;transform:none}}

/* ---------- 左：输入 ---------- */
.agent-input{display:flex;gap:9px;align-items:flex-end;margin-top:16px;padding-top:14px;border-top:1px solid rgba(255,255,255,.05)}
.agent-input textarea{flex:1;resize:none;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);border-radius:12px;padding:10px 13px;color:var(--text);font-size:13px;line-height:1.65;font-family:inherit;min-height:44px;max-height:84px;transition:border-color .22s}
.agent-input textarea:focus{outline:none;border-color:rgba(226,189,85,.34)}
.agent-input textarea::placeholder{color:var(--muted2)}
.agent-input textarea.is-typing{border-color:rgba(226,189,85,.28);caret-color:var(--gold)}
.send{position:relative;flex:0 0 44px;height:44px;border-radius:12px;border:0;cursor:pointer;background:linear-gradient(135deg,var(--gold-hi),var(--gold));display:flex;align-items:center;justify-content:center;transition:transform .25s var(--ease),opacity .25s}
.send svg{width:16px;height:16px;stroke:#20180a;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.send::after{content:attr(data-tip);position:absolute;right:0;bottom:calc(100% + 9px);z-index:4;width:max-content;padding:6px 9px;border:1px solid rgba(226,189,85,.24);border-radius:7px;background:rgba(13,13,12,.96);color:#d9c99d;font-size:11px;font-weight:650;line-height:1;opacity:0;pointer-events:none;transform:translate3d(0,4px,0);transition:opacity .18s ease,transform .18s cubic-bezier(.22,1,.36,1)}
.send:hover::after,.send:focus-visible::after{opacity:1;transform:none}
.send:hover:not(:disabled){transform:scale(1.04)}
.send:disabled{opacity:.42;cursor:progress}
.send:focus-visible{outline:2px solid var(--gold);outline-offset:3px}

/* ---------- 底部控制条：居中按钮组，不重复顶部已有的报价/重置/步骤信息 ---------- */
/* 底部控制条整条去掉（重置/自动播放已在右上角与自动逻辑里处理），把高度让给内容区 */
.demo-ctl{display:none!important}
.demo-ctl{padding:13px 20px;border-top:1px solid rgba(226,189,85,.08);background:rgba(0,0,0,.14)}
.demo-ctl-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:center}
/* 去掉“上一步/下一步”，只留“自动播放/重置演示”，控制条更简洁，窗口视觉上更大 */
#prevBtn,#nextBtn{display:none!important}
.demo-ctl-actions [hidden]{display:none!important}
.cbtn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 13px;border-radius:10px;border:1px solid rgba(255,255,255,.06);background:rgba(255,255,255,.02);color:var(--muted);font-size:12px;white-space:nowrap;cursor:pointer;
  transition:color .22s,border-color .22s,background .22s,transform .16s var(--ease)}
.cbtn svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.cbtn:hover:not(:disabled){color:var(--gold2);border-color:rgba(226,189,85,.2)}
.cbtn:disabled{opacity:.3;cursor:not-allowed}
.cbtn.on,.cbtn.primary{background:rgba(226,189,85,.09);border-color:rgba(226,189,85,.18);color:var(--gold2)}
.cbtn:focus-visible{outline:2px solid var(--gold);outline-offset:2px}

/* ---------- 右：高保真后台 ---------- */
.agent-col.prev{padding:20px 20px 22px;background:rgba(0,0,0,.1)}
.prev-bar{display:flex;align-items:center;gap:10px;padding:6px 12px;margin-bottom:8px;border-radius:10px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.055)}
.prev-bar .lights{display:flex;gap:6px;flex:0 0 auto}
.prev-bar .lights i{width:9px;height:9px;border-radius:50%;display:block}
.prev-bar .lights i:nth-child(1){background:rgba(239,68,68,.6)}
.prev-bar .lights i:nth-child(2){background:rgba(234,179,8,.6)}
.prev-bar .lights i:nth-child(3){background:rgba(34,197,94,.6)}
.prev-bar .url{flex:1;min-width:0;margin-left:4px;padding:4px 11px;border-radius:6px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.04);color:var(--muted2);
  font-family:"Space Mono",ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.prev-bar .st{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;border:1px solid rgba(226,189,85,.16);background:rgba(226,189,85,.06);color:var(--gold);font-size:10.5px;white-space:nowrap}
.prev-bar .st i{width:5px;height:5px;border-radius:50%;background:currentColor}
.prev-bar .st.busy i{animation:demo-dot 1s ease-in-out infinite}
.prev-bar .st.done{border-color:rgba(120,200,140,.24);background:rgba(120,200,140,.07);color:#7ec88c}

.prev-stage{position:relative;flex:1;min-height:520px;border-radius:12px;overflow:hidden;border:1px solid rgba(255,255,255,.06);background:#0a0a0a}
.prev-frame{width:100%;height:100%;min-height:520px;border:0;background:#0a0a0a;display:block}
/* 生成中骨架遮罩：不是替换 iframe，只是覆盖一层 */
.prev-veil{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;gap:12px;padding:26px;background:rgba(10,10,10,.86);
  -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);opacity:0;visibility:hidden;transition:opacity .28s ease,visibility 0s linear .28s}
.prev-veil.on{opacity:1;visibility:visible;transition-delay:0s}
.prev-veil .ph{height:11px;border-radius:6px;background:linear-gradient(90deg,rgba(255,255,255,.08),rgba(255,255,255,.03));animation:demo-sh 1.6s ease-in-out infinite}
.prev-veil .ph.w40{width:40%}.prev-veil .ph.w60{width:60%}.prev-veil .ph.w80{width:80%}
.prev-veil .ph:nth-child(2){animation-delay:.15s}.prev-veil .ph:nth-child(3){animation-delay:.3s}
.prev-veil .ph:nth-child(4){animation-delay:.45s}.prev-veil .ph:nth-child(5){animation-delay:.6s}
.prev-veil .lb{margin-top:auto;font-size:11.5px;color:var(--gold);letter-spacing:.04em;display:flex;align-items:center;gap:7px}
.prev-veil .lb i{width:5px;height:5px;border-radius:50%;background:currentColor;animation:demo-dot 1s ease-in-out infinite}
@keyframes demo-sh{50%{opacity:.45}}

/* ---------- 响应式 ---------- */
@media(max-width:1080px){
  .agent-grid{grid-template-columns:1fr}
  .agent-col.chat{border-right:0;border-bottom:1px solid rgba(226,189,85,.08)}
  .agent-chat{max-height:380px}
  .prev-stage,.prev-frame{min-height:460px}
}
@media(max-width:640px){
  .demo-head{margin-bottom:26px}
  .agent-bar{flex-wrap:wrap;gap:10px}
  .agent-bar .sum{order:3;flex:1 0 100%}
  .agent-col.chat{padding:18px 15px}
  .agent-col.prev{padding:14px 15px 16px}
  .agent-chat{max-height:320px}
  .bstack,.brow.user .bstack{max-width:94%}
  .prev-stage,.prev-frame{min-height:380px}
  .demo-ctl{padding:11px 12px}
}

@media(prefers-reduced-motion:reduce){
  .msg-in{animation:none}
  .tool.run svg,.typing span,.prev-veil .ph,.agent-head .dots i.run,.prev-bar .st.busy i{animation:none}
  .agent-chat{scroll-behavior:auto}
}
