mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
fix(guide): 架构图标签改为产品名称(Claude/Gemini)并调整节点间距
- 将 Source/Output 标签从 Anthropic/Google 改为 Claude/Gemini - 增大虚线框与引擎卡片的垂直间距,改善布局层次 - 同步调整连接线路径坐标和动画时长
This commit is contained in:
@@ -63,17 +63,17 @@ const shadows = computed(() => {
|
|||||||
*
|
*
|
||||||
* SOURCES label: Y = 8
|
* SOURCES label: Y = 8
|
||||||
* Source pills: top=24, h=36 => bottom = 60
|
* Source pills: top=24, h=36 => bottom = 60
|
||||||
* Line: 3 merge to 1 at Gateway top Y=78, then straight to dashed box top Y=88
|
* Line: 3 merge to 1 at Gateway top Y=78, then straight to dashed box top Y=98
|
||||||
* Gateway box: top=78, h=240 => bottom = 318
|
* Gateway box: top=78, h=240 => bottom = 318
|
||||||
* Dashed box: top=88, h=112 => bottom=200 (left=180, w=400)
|
* Dashed box: top=98, h=112 => bottom=210 (left=180, w=400)
|
||||||
*
|
*
|
||||||
* Junction dots (3 total, all at X=380):
|
* Junction dots (3 total, all at X=380):
|
||||||
* [dot] Y=78 Gateway top merge (3 sources -> 1)
|
* [dot] Y=78 Gateway top merge (3 sources -> 1)
|
||||||
* [dot] Y=200 Route node (1 -> 3 engines)
|
* [dot] Y=210 Route node (1 -> 3 engines)
|
||||||
* [dot] Y=318 Merge/exit node (3 engines -> 1 -> 3 outputs, at Gateway bottom)
|
* [dot] Y=318 Merge/exit node (3 engines -> 1 -> 3 outputs, at Gateway bottom)
|
||||||
*
|
*
|
||||||
* Engine cards: top=230, h=28 => bottom=258
|
* Engine cards: top=250, h=28 => bottom=278
|
||||||
* Line: Y=258 stub Y=264, curve to merge/exit Y=318
|
* Line: Y=278 stub Y=284, curve to merge/exit Y=318
|
||||||
* Line: Y=318 diverge to output pills top Y=360
|
* Line: Y=318 diverge to output pills top Y=360
|
||||||
* OUTPUTS label: Y = 342
|
* OUTPUTS label: Y = 342
|
||||||
* Output pills: top=360, h=36
|
* Output pills: top=360, h=36
|
||||||
@@ -118,44 +118,44 @@ const shadows = computed(() => {
|
|||||||
fill="none"
|
fill="none"
|
||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
>
|
>
|
||||||
<!-- Sources (Y=60) -> merge at Gateway top (Y=78) -> dashed box top (Y=88) -->
|
<!-- Sources (Y=60) -> merge at Gateway top (Y=78) -> dashed box top (Y=98) -->
|
||||||
<path
|
<path
|
||||||
id="f-in-1"
|
id="f-in-1"
|
||||||
d="M 188 60 L 188 66 C 188 72, 380 72, 380 78 L 380 88"
|
d="M 188 60 L 188 66 C 188 72, 380 72, 380 78 L 380 98"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
id="f-in-2"
|
id="f-in-2"
|
||||||
d="M 380 60 L 380 88"
|
d="M 380 60 L 380 98"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
id="f-in-3"
|
id="f-in-3"
|
||||||
d="M 572 60 L 572 66 C 572 72, 380 72, 380 78 L 380 88"
|
d="M 572 60 L 572 66 C 572 72, 380 72, 380 78 L 380 98"
|
||||||
/>
|
/>
|
||||||
<!-- Route dot (Y=200) -> Engine cards top (Y=230) -->
|
<!-- Route dot (Y=210) -> Engine cards top (Y=250) -->
|
||||||
<path
|
<path
|
||||||
id="f-sL"
|
id="f-sL"
|
||||||
d="M 380 200 C 380 214, 188 214, 188 230"
|
d="M 380 210 C 380 230, 188 230, 188 250"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
id="f-sM"
|
id="f-sM"
|
||||||
d="M 380 200 L 380 230"
|
d="M 380 210 L 380 250"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
id="f-sR"
|
id="f-sR"
|
||||||
d="M 380 200 C 380 214, 572 214, 572 230"
|
d="M 380 210 C 380 230, 572 230, 572 250"
|
||||||
/>
|
/>
|
||||||
<!-- Engine bottom (Y=258) -> merge/exit node at Gateway bottom (Y=318) -->
|
<!-- Engine bottom (Y=278) -> merge/exit node at Gateway bottom (Y=318) -->
|
||||||
<path
|
<path
|
||||||
id="f-oL"
|
id="f-oL"
|
||||||
d="M 188 258 L 188 264 C 188 292, 380 292, 380 318"
|
d="M 188 278 L 188 284 C 188 302, 380 302, 380 318"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
id="f-oM"
|
id="f-oM"
|
||||||
d="M 380 258 L 380 318"
|
d="M 380 278 L 380 318"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
id="f-oR"
|
id="f-oR"
|
||||||
d="M 572 258 L 572 264 C 572 292, 380 292, 380 318"
|
d="M 572 278 L 572 284 C 572 302, 380 302, 380 318"
|
||||||
/>
|
/>
|
||||||
<!-- Merge/exit node at Gateway bottom (Y=318) -> output pills top (Y=360) -->
|
<!-- Merge/exit node at Gateway bottom (Y=318) -> output pills top (Y=360) -->
|
||||||
<path
|
<path
|
||||||
@@ -173,7 +173,7 @@ const shadows = computed(() => {
|
|||||||
</g>
|
</g>
|
||||||
<!-- Animated dots -->
|
<!-- Animated dots -->
|
||||||
<g>
|
<g>
|
||||||
<!-- Sources -> dashed box top (curves only, ~220px each, ~100px/s) -->
|
<!-- Sources -> dashed box top (curves only, ~230px each, ~100px/s) -->
|
||||||
<circle
|
<circle
|
||||||
r="2.5"
|
r="2.5"
|
||||||
:fill="colors.brand"
|
:fill="colors.brand"
|
||||||
@@ -188,34 +188,34 @@ const shadows = computed(() => {
|
|||||||
dur="2.2s"
|
dur="2.2s"
|
||||||
repeatCount="indefinite"
|
repeatCount="indefinite"
|
||||||
><mpath href="#f-in-3" /></animateMotion></circle>
|
><mpath href="#f-in-3" /></animateMotion></circle>
|
||||||
<!-- Route -> Engines (curves only, ~210px each) -->
|
<!-- Route -> Engines (curves only, ~250px each) -->
|
||||||
<circle
|
<circle
|
||||||
r="2.5"
|
r="2.5"
|
||||||
:fill="colors.brand"
|
:fill="colors.brand"
|
||||||
><animateMotion
|
><animateMotion
|
||||||
dur="1.2s"
|
dur="1.4s"
|
||||||
repeatCount="indefinite"
|
repeatCount="indefinite"
|
||||||
><mpath href="#f-sL" /></animateMotion></circle>
|
><mpath href="#f-sL" /></animateMotion></circle>
|
||||||
<circle
|
<circle
|
||||||
r="2.5"
|
r="2.5"
|
||||||
:fill="colors.brand"
|
:fill="colors.brand"
|
||||||
><animateMotion
|
><animateMotion
|
||||||
dur="1.2s"
|
dur="1.4s"
|
||||||
repeatCount="indefinite"
|
repeatCount="indefinite"
|
||||||
><mpath href="#f-sR" /></animateMotion></circle>
|
><mpath href="#f-sR" /></animateMotion></circle>
|
||||||
<!-- Engines -> merge/exit node (curves only, ~260px each) -->
|
<!-- Engines -> merge/exit node (curves only, ~230px each) -->
|
||||||
<circle
|
<circle
|
||||||
r="2.5"
|
r="2.5"
|
||||||
:fill="colors.brand"
|
:fill="colors.brand"
|
||||||
><animateMotion
|
><animateMotion
|
||||||
dur="1.6s"
|
dur="1.4s"
|
||||||
repeatCount="indefinite"
|
repeatCount="indefinite"
|
||||||
><mpath href="#f-oL" /></animateMotion></circle>
|
><mpath href="#f-oL" /></animateMotion></circle>
|
||||||
<circle
|
<circle
|
||||||
r="2.5"
|
r="2.5"
|
||||||
:fill="colors.brand"
|
:fill="colors.brand"
|
||||||
><animateMotion
|
><animateMotion
|
||||||
dur="1.6s"
|
dur="1.4s"
|
||||||
repeatCount="indefinite"
|
repeatCount="indefinite"
|
||||||
><mpath href="#f-oR" /></animateMotion></circle>
|
><mpath href="#f-oR" /></animateMotion></circle>
|
||||||
<!-- Exit -> outputs (curves only, ~210px each) -->
|
<!-- Exit -> outputs (curves only, ~210px each) -->
|
||||||
@@ -249,9 +249,9 @@ const shadows = computed(() => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Source pills: top=24, h=36, centerY=42 -->
|
<!-- Source pills: top=24, h=36, centerY=42 -->
|
||||||
<!-- Anthropic: center X=188, w=100 => left=138 -->
|
<!-- Claude: center X=188, w=100 => left=138 -->
|
||||||
<!-- OpenAI: center X=380, w=100 => left=330 -->
|
<!-- OpenAI: center X=380, w=100 => left=330 -->
|
||||||
<!-- Google: center X=572, w=100 => left=522 -->
|
<!-- Gemini: center X=572, w=100 => left=522 -->
|
||||||
<div class="absolute w-full top-[24px] z-10">
|
<div class="absolute w-full top-[24px] z-10">
|
||||||
<div
|
<div
|
||||||
class="absolute left-[138px] w-[100px] h-[36px] rounded-full flex items-center justify-center gap-2 transition-transform hover:-translate-y-0.5 cursor-pointer"
|
class="absolute left-[138px] w-[100px] h-[36px] rounded-full flex items-center justify-center gap-2 transition-transform hover:-translate-y-0.5 cursor-pointer"
|
||||||
@@ -264,7 +264,7 @@ const shadows = computed(() => {
|
|||||||
<span
|
<span
|
||||||
class="font-sans text-[11px] font-bold"
|
class="font-sans text-[11px] font-bold"
|
||||||
:style="{ color: colors.textMain }"
|
:style="{ color: colors.textMain }"
|
||||||
>Anthropic</span>
|
>Claude</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="absolute left-[330px] w-[100px] h-[36px] rounded-full flex items-center justify-center gap-2 transition-transform hover:-translate-y-0.5 cursor-pointer"
|
class="absolute left-[330px] w-[100px] h-[36px] rounded-full flex items-center justify-center gap-2 transition-transform hover:-translate-y-0.5 cursor-pointer"
|
||||||
@@ -290,7 +290,7 @@ const shadows = computed(() => {
|
|||||||
<span
|
<span
|
||||||
class="font-sans text-[11px] font-bold"
|
class="font-sans text-[11px] font-bold"
|
||||||
:style="{ color: colors.textMain }"
|
:style="{ color: colors.textMain }"
|
||||||
>Google</span>
|
>Gemini</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -308,9 +308,9 @@ const shadows = computed(() => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Dashed box: abs positioned in outer 760x420 container -->
|
<!-- Dashed box: abs positioned in outer 760x420 container -->
|
||||||
<!-- center X=380, w=400 => left=180. top=88, h=112 => bottom=200 -->
|
<!-- center X=380, w=400 => left=180. top=98, h=112 => bottom=210 -->
|
||||||
<div
|
<div
|
||||||
class="absolute left-[180px] top-[88px] w-[400px] h-[112px] rounded-2xl flex flex-col items-center gap-1.5 px-5 py-[10px] z-20"
|
class="absolute left-[180px] top-[98px] w-[400px] h-[112px] rounded-2xl flex flex-col items-center gap-1.5 px-5 py-[10px] z-20"
|
||||||
:style="{ border: `1.5px dashed ${colors.coreBorder}` }"
|
:style="{ border: `1.5px dashed ${colors.coreBorder}` }"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@@ -355,7 +355,7 @@ const shadows = computed(() => {
|
|||||||
|
|
||||||
<!-- Engine cards: bar style matching feature bars, w=170, h=28 -->
|
<!-- Engine cards: bar style matching feature bars, w=170, h=28 -->
|
||||||
<div
|
<div
|
||||||
class="absolute left-[103px] top-[230px] w-[170px] h-[28px] rounded-full flex items-center justify-center gap-1.5 z-20"
|
class="absolute left-[103px] top-[250px] w-[170px] h-[28px] rounded-full flex items-center justify-center gap-1.5 z-20"
|
||||||
:style="{ backgroundColor: colors.brandSoft, border: `1px solid ${colors.cardBorder}` }"
|
:style="{ backgroundColor: colors.brandSoft, border: `1px solid ${colors.cardBorder}` }"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@@ -368,7 +368,7 @@ const shadows = computed(() => {
|
|||||||
>格式转换</span>
|
>格式转换</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="absolute left-[295px] top-[230px] w-[170px] h-[28px] rounded-full flex items-center justify-center gap-1.5 z-20"
|
class="absolute left-[295px] top-[250px] w-[170px] h-[28px] rounded-full flex items-center justify-center gap-1.5 z-20"
|
||||||
:style="{ backgroundColor: colors.brandSoft, border: `1px solid ${colors.cardBorder}` }"
|
:style="{ backgroundColor: colors.brandSoft, border: `1px solid ${colors.cardBorder}` }"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@@ -381,7 +381,7 @@ const shadows = computed(() => {
|
|||||||
>反向代理</span>
|
>反向代理</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="absolute left-[487px] top-[230px] w-[170px] h-[28px] rounded-full flex items-center justify-center gap-1.5 z-20"
|
class="absolute left-[487px] top-[250px] w-[170px] h-[28px] rounded-full flex items-center justify-center gap-1.5 z-20"
|
||||||
:style="{ backgroundColor: colors.brandSoft, border: `1px solid ${colors.cardBorder}` }"
|
:style="{ backgroundColor: colors.brandSoft, border: `1px solid ${colors.cardBorder}` }"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@@ -400,9 +400,9 @@ const shadows = computed(() => {
|
|||||||
class="absolute left-[376px] top-[74px] w-2 h-2 rounded-full border border-white dark:border-[#1e1e1e] z-40"
|
class="absolute left-[376px] top-[74px] w-2 h-2 rounded-full border border-white dark:border-[#1e1e1e] z-40"
|
||||||
:style="{ backgroundColor: colors.brand }"
|
:style="{ backgroundColor: colors.brand }"
|
||||||
/>
|
/>
|
||||||
<!-- Route node: center (380, 200) — 1 diverges to 3 engines -->
|
<!-- Route node: center (380, 210) — 1 diverges to 3 engines -->
|
||||||
<div
|
<div
|
||||||
class="absolute left-[376px] top-[196px] w-2 h-2 rounded-full border border-white dark:border-[#1e1e1e] z-40"
|
class="absolute left-[376px] top-[206px] w-2 h-2 rounded-full border border-white dark:border-[#1e1e1e] z-40"
|
||||||
:style="{ backgroundColor: colors.brand }"
|
:style="{ backgroundColor: colors.brand }"
|
||||||
/>
|
/>
|
||||||
<!-- Merge/exit node: center (380, 318) at Gateway bottom border -->
|
<!-- Merge/exit node: center (380, 318) at Gateway bottom border -->
|
||||||
@@ -424,9 +424,9 @@ const shadows = computed(() => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Output pills: top=360, h=36 -->
|
<!-- Output pills: top=360, h=36 -->
|
||||||
<!-- Anthropic: center X=188, w=120 => left=128 -->
|
<!-- Claude: center X=188, w=120 => left=128 -->
|
||||||
<!-- OpenAI: center X=380, w=120 => left=320 -->
|
<!-- OpenAI: center X=380, w=120 => left=320 -->
|
||||||
<!-- Google: center X=572, w=120 => left=512 -->
|
<!-- Gemini: center X=572, w=120 => left=512 -->
|
||||||
<div class="absolute w-full top-[360px] z-10">
|
<div class="absolute w-full top-[360px] z-10">
|
||||||
<div
|
<div
|
||||||
class="absolute left-[128px] w-[120px] h-[36px] rounded-full flex items-center justify-center gap-2"
|
class="absolute left-[128px] w-[120px] h-[36px] rounded-full flex items-center justify-center gap-2"
|
||||||
@@ -439,7 +439,7 @@ const shadows = computed(() => {
|
|||||||
<span
|
<span
|
||||||
class="font-sans text-[10px] font-bold"
|
class="font-sans text-[10px] font-bold"
|
||||||
:style="{ color: colors.textMain }"
|
:style="{ color: colors.textMain }"
|
||||||
>Anthropic 响应</span>
|
>Claude 响应</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="absolute left-[320px] w-[120px] h-[36px] rounded-full flex items-center justify-center gap-2"
|
class="absolute left-[320px] w-[120px] h-[36px] rounded-full flex items-center justify-center gap-2"
|
||||||
@@ -465,7 +465,7 @@ const shadows = computed(() => {
|
|||||||
<span
|
<span
|
||||||
class="font-sans text-[10px] font-bold"
|
class="font-sans text-[10px] font-bold"
|
||||||
:style="{ color: colors.textMain }"
|
:style="{ color: colors.textMain }"
|
||||||
>Google 响应</span>
|
>Gemini 响应</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user