astrion-website/demo/site-assets/anim-version.css
JOJO 64d0a377dc feat: 04版本控制动画 + 演示区5条真实对话mock + 文档同步沙箱重构
- 主页第4行特色动画(版本控制)及 01/02/03 动画迭代
- 演示区对话 mock 全部换为真实对话转换:日常使用(汽车对比新/整理周会速记)、
  StarRaid(弹幕调研/像素飞机设计)、开发实战(猫咪咖啡店多智能体)
- 子智能体 activity、消息截图媒体、文件卡片资源(docx/pdf/html)随站点发布
- sw.js: file/content 二进制 MIME、/api/conversations/media 路由、
  模型列表扩为 K3/V4-Flash/MiniMax-M3/GLM-5.2、CACHE v5
- content/ 同步 8-31 沙箱重构文档更新
2026-09-03 07:47:39 +08:00

270 lines
8.4 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* 版本控制动画 —— 模块样式(主页 feature 行 / anim4-demo 页共用)
无边框无底色,融于星空;无 glow。token--text-1 等)由宿主页面提供。
类名一律 anim4- 前缀,避免与 01~03 模块冲突。 */
.anim4-window {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
}
/* 舞台:固定 540×380 逻辑尺寸JS 按容器等比缩放居中transform: translate+scale */
.anim4-stage {
position: absolute;
left: 50%;
top: 50%;
width: 540px;
height: 380px;
overflow: hidden;
user-select: none;
-webkit-user-select: none;
}
/* ───────── 用户指令气泡(右上角堆叠) ───────── */
/* 新气泡从下面浮现,旧的上移跑出可视区(不销毁,倒带时随堆叠回落);
容器高度 = 2.5 个气泡 + 间距,顶部渐隐遮罩 = 边缘虚化。
进出场全由 JS tween 驱动 margin/transformrAF 可见时间),不用 CSS transition、不 tween height。 */
.anim4-bubbles {
position: absolute;
right: 8px;
top: 2px;
width: 248px;
height: 84px;
display: flex;
flex-direction: column;
justify-content: flex-end;
overflow: hidden;
z-index: 30;
-webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 26px);
mask-image: linear-gradient(to bottom, transparent 0, #000 26px);
pointer-events: none;
}
/* 单条气泡:风格同 01 的用户气泡accent 底深字、右下小尾巴),不变色 */
.anim4-bubble {
flex: none;
align-self: flex-end;
max-width: 236px; /* 兜底最长指令「我让你整理工作区不是让你全删了」17 字单行放下 */
margin-top: 6px;
padding: 6px 11px;
background: var(--accent);
color: var(--bg-0);
font-size: 12px;
line-height: 1.35;
border-radius: 10px 10px 3px 10px;
}
/* 湮灭碎片:回卷时被时间抹掉的指令字符(逐字 spanJS 物理驱动) */
.anim4-shard {
position: absolute;
left: 0;
top: 0;
color: var(--accent);
font-size: 12px;
line-height: 1.35;
white-space: nowrap;
z-index: 40;
pointer-events: none;
will-change: transform, opacity;
}
/* ───────── 纸3D 斜铺的工作台) / 终端 ───────── */
.anim4-paper {
position: absolute;
left: 268px;
top: 190px;
width: 192px;
height: 122px;
transform: perspective(760px) rotateX(42deg) rotateZ(-7deg); /* 尺寸/倾斜与 03 一致;位置比 03 低 60px避让右上气泡区 */
z-index: 15;
will-change: transform;
}
.anim4-paper-sheet {
width: 100%;
height: 100%;
background: var(--bg-panel);
border: 1px solid var(--line);
border-radius: 6px;
padding: 18px 16px;
display: flex;
flex-direction: column;
gap: 14px; /* 与 03 纸页行距一致 */
transition: background 0.3s ease;
}
.anim4-paper.is-term .anim4-paper-sheet { background: var(--bg-1); }
/* 内容行(行宽由 JS 逐帧驱动,不用 transition */
.anim4-pl {
position: relative;
width: 0; /* 初始是空纸:宽度由 JS 逐帧写入;不写死 100% 会默认撑满 */
height: 4px;
border-radius: 2px;
background: var(--text-3);
opacity: 0.75;
transition: opacity 0.25s ease;
}
.anim4-paper.is-term .anim4-pl { opacity: 0; }
.anim4-pl-end {
position: absolute;
right: 0;
top: 50%;
width: 0;
height: 0;
}
/* 终端层叠在纸面上morph 时淡入 */
.anim4-term {
position: absolute;
inset: 0;
padding: 16px 16px;
font-family: var(--font-mono);
font-size: 12px;
line-height: 1.75;
color: var(--text-2);
opacity: 0;
overflow: hidden; /* 抢救段行多上滚时,裁掉滚出纸面的行 */
transition: opacity 0.3s ease;
}
/* 内容上滚动画在 body 内层做term 自身 transform 会连同裁剪区一起跑 */
.anim4-term-body { transition: transform 0.25s ease; }
.anim4-paper.is-term .anim4-term { opacity: 1; }
.anim4-term-line {
display: flex;
align-items: baseline;
white-space: nowrap;
}
.anim4-term-p { color: var(--accent); margin-right: 6px; }
.anim4-term-c { color: var(--text-1); }
.anim4-term-out {
color: var(--text-3);
visibility: hidden;
}
.anim4-term-out.is-on { visibility: visible; }
.anim4-term-new {
visibility: hidden;
}
.anim4-term-new.is-on { visibility: visible; }
.anim4-term-caret {
display: inline-block;
width: 7px;
height: 13px;
margin-left: 1px;
vertical-align: -2px;
background: var(--accent);
animation: anim4-caret 0.85s steps(1) infinite;
}
@keyframes anim4-caret { 50% { opacity: 0; } }
/* ───────── 智能体(全部动作由 JS 逐帧驱动,无 CSS 过渡,防 fill 冲突) ───────── */
.anim4-agent {
position: absolute;
left: 0;
top: 0;
width: 70px;
height: 70px;
z-index: 35;
will-change: transform;
pointer-events: none;
}
.anim4-agent-avatar {
display: block;
width: 70px;
height: 70px;
color: var(--text-1);
}
.anim4-agent-avatar .astrion-avatar { width: 100%; height: 100%; }
/* 本动画里智能体在纸/终端/亭前活动:六边形填底色遮住后方元素(组件默认 fill:none 是状态栏规格,此处局部覆盖) */
.anim4-agent-avatar .aa-frame { fill: var(--bg-0); }
/* ───────── 笔(结构同 03外层定位 + 内层绕笔尖摇摆) ───────── */
.anim4-pen-pos {
position: absolute;
left: 0;
top: 0;
z-index: 40;
width: 40px;
height: 40px;
color: var(--accent);
will-change: transform;
transition: transform 0.45s cubic-bezier(.4, 0, .2, 1); /* 普通飞行用过渡 */
}
.anim4-pen-pos.is-live { transition: none; } /* 逐帧驱动时关闭过渡 */
.anim4-pen {
width: 40px;
height: 40px;
transform-origin: 11% 87.6%; /* 笔尖触点(同 03 */
}
/* 写字摇晃由 JS 逐帧驱动(振幅包络起止收敛到 0°见 writeLine不用 CSS 动画 */
/* 甩飞:绕中心翻滚 */
.anim4-pen.is-free { transform-origin: 50% 50%; animation: none; }
/* 捡笔回正:过渡平滑转正,期间 origin 保持中心(结束移除后 rotate=0 不受 origin 影响) */
.anim4-pen.is-returning { transition: transform 0.38s ease; transform-origin: 50% 50%; animation: none; }
.anim4-pen-ref { visibility: hidden; fill: none; stroke: none; pointer-events: none; }
/* ───────── 时光机(整机 2D 矢量化:所有面 JS 手算透视投影、屏幕空间 SVG 绘制) ─────────
wrapper 承担 2D 整体运动(下落/浮空/微倾);面的投影由 drawBooth() 每帧按偏航 24°+sway 计算。
三层:后层 svg z1左外墙 + clip 到门洞的内景)< 智能体 z2 < 前层 svg z3关门即挡住他
96×96×142 正方形柱;正面左右梃各 18 + 门洞 60双开门屋顶四棱锥底 108×108 高 28。
智能体进出不做消失动画:走进深处被左梃自然遮挡。 */
.anim4-booth {
position: absolute;
left: 0;
top: 0;
width: 150px;
height: 220px;
z-index: 20;
opacity: 0;
will-change: transform;
pointer-events: none;
}
/* 智能体挂载层:与门洞投影对齐的透明层(投影公式标定),夹在前后两层 svg 之间。
无背景无裁剪:室内由内景多边形提供;超出门口的部分被前层双梃/门板自然遮住。 */
.anim4-booth-inner {
position: absolute;
z-index: 2;
pointer-events: none;
}
/* 矢量化覆盖层:屏幕空间绘制(原生 AA 永远锐利,根治 3D 纹理重采样锯齿);
填色/描边语言延续线稿bg-1 面 + text-1 棱;内景 bg-0、地板 bg-panel */
.anim4-booth-wire {
position: absolute;
inset: 0;
overflow: visible;
pointer-events: none;
}
.anim4-booth-wire-back { z-index: 1; }
#boothWireFront { z-index: 3; }
.anim4-booth-wire polygon {
fill: var(--bg-1);
stroke: var(--text-1);
stroke-width: 1.6;
stroke-linejoin: round;
}
#bwInBack, #bwInSideR, #bwInCeil { fill: var(--bg-0); }
#bwInFloor { fill: var(--bg-panel); }
.bw-door-stripe { stroke: var(--text-1); stroke-width: 1.6; }
.bw-door-knob { fill: var(--text-1); stroke: none; }
#bwRod { stroke: var(--text-1); stroke-width: 2; stroke-linecap: round; }
#bwKnob { fill: var(--bg-1); stroke: var(--text-1); stroke-width: 1.6; }
/* ───────── 地面接触阴影(中性灰,非发光) ───────── */
.anim4-shadow {
position: absolute;
height: 10px;
border-radius: 50%;
background: rgba(0, 0, 0, 0.35);
z-index: 5;
pointer-events: none;
}
.anim4-shadow-booth { width: 116px; opacity: 0; }
.anim4-shadow-agent { width: 56px; opacity: 0; }