agent-Specialization/website-design/exp/site-assets/anim-version.css
JOJO 39a7a5fc6f chore(website): 归档官网文档内容与设计素材
- website-content/:官网 10 篇文档内容 + README
- website-design/:官网设计稿、动画实验、预览图与资源
- 根目录官网截图两张
- .gitignore 忽略 website-design/exp/static/dist 构建产物(7.1MB)
2026-09-02 14:38:51 +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; }