diff --git a/product-source/hololake-native-desktop/scripts/ambient-motion-idle.test.mjs b/product-source/hololake-native-desktop/scripts/ambient-motion-idle.test.mjs index d2ac7dc99..8174ab79d 100644 --- a/product-source/hololake-native-desktop/scripts/ambient-motion-idle.test.mjs +++ b/product-source/hololake-native-desktop/scripts/ambient-motion-idle.test.mjs @@ -10,8 +10,8 @@ test('ambient lake motion sleeps by default and wakes only after human interacti assert.match(source, /onPointerMove=\{wakeAmbientMotion\}/) assert.match(source, /onPointerDown=\{wakeAmbientMotion\}/) assert.match(source, /onKeyDown=\{wakeAmbientMotion\}/) - assert.match(styles, /\.official-world \.world-star,[\s\S]*animation-play-state: paused/) - assert.match(styles, /\.official-world\.motion-awake \.world-star,[\s\S]*animation-play-state: running/) + assert.match(styles, /\.official-world \.world-star,[\s\S]*animation: none/) + assert.match(styles, /\.official-world\.motion-awake \.world-star \{ animation: world-star-breathe/) }) test('the desktop shell has no permanent polling interval while idle', () => { diff --git a/product-source/hololake-native-desktop/scripts/fifth-domain-private-route.test.mjs b/product-source/hololake-native-desktop/scripts/fifth-domain-private-route.test.mjs index ea965998b..98754209f 100644 --- a/product-source/hololake-native-desktop/scripts/fifth-domain-private-route.test.mjs +++ b/product-source/hololake-native-desktop/scripts/fifth-domain-private-route.test.mjs @@ -18,6 +18,13 @@ test('the verified Zhizhi route unfolds through her exact private nesting', () = assert.match(source, /ICE-BB-\* · AGE/) }) +test('the Eternal Lake Heart system body exposes both owned branches before channel tools', () => { + assert.match(source, /title="心跳核心频道" meta="冰朔 · 私人频道"/) + assert.match(source, /title="爱之核心子系统" meta="责任主体 · 之之"/) + assert.match(source, /worldStage === 'heartbeat'/) + assert.match(source, /

心跳核心频道<\/h1>/) +}) + test('Fifth Domain human numbers are paired with their own login account', () => { assert.match(source, /'ICE-GL∞': 'bingshuo'/) assert.match(source, /'ICE-GL-ZHI∞': 'zhizhi'/) diff --git a/product-source/hololake-native-desktop/src/main.tsx b/product-source/hololake-native-desktop/src/main.tsx index b0fc7c645..717737c13 100644 --- a/product-source/hololake-native-desktop/src/main.tsx +++ b/product-source/hololake-native-desktop/src/main.tsx @@ -49,7 +49,7 @@ import './styles.css' type ThemeId = 'night' | 'dawn' | 'nebula' | 'candle' | 'clear' type ViewId = 'overview' | 'knowledge' | 'code' | 'receipts' | 'system' -type WorldStage = 'domain' | 'heart' | 'love' | 'tomorrow' | 'bottle' | 'channel' | 'tool' +type WorldStage = 'domain' | 'heart' | 'heartbeat' | 'love' | 'tomorrow' | 'bottle' | 'channel' | 'tool' type KnowledgeSource = 'native' | 'legacy' interface HomeStatus { @@ -1308,7 +1308,7 @@ function HoloLakeApp() { } const isZhizhi = repoLogin.domain === 'FIFTH_DOMAIN' && zeroPoint?.userNumber === 'ICE-GL-ZHI∞' - const toolReturnStage: WorldStage = isZhizhi ? 'tomorrow' : 'channel' + const toolReturnStage: WorldStage = isZhizhi ? 'tomorrow' : repoLogin.domain === 'FIFTH_DOMAIN' ? 'heartbeat' : 'channel' return
@@ -1326,10 +1326,10 @@ function HoloLakeApp() { setWorldStage('love')}/>

第五域内部结构仅对本编号与已绑定账号开放

} - {worldStage === 'love' && isZhizhi &&
- + {worldStage === 'love' && repoLogin.domain === 'FIFTH_DOMAIN' &&
+

爱之核心子系统

责任主体 · 之之 · ICE-GL-ZHI∞

- setWorldStage('tomorrow')}/> + setWorldStage('tomorrow') : undefined}/>
} {worldStage === 'tomorrow' && isZhizhi &&
@@ -1349,7 +1349,23 @@ function HoloLakeApp() { {worldStage === 'channel' &&

{repoLogin.domain === 'FIFTH_DOMAIN' ? '永恒湖心系统' : '光湖频道'}

选择路径 · 湖面向下一层展开

- repoLogin.domain === 'FIFTH_DOMAIN' ? setWorldStage('bottle') : openWorldTool('overview')}/> + {repoLogin.domain === 'FIFTH_DOMAIN' ? <> + setWorldStage('bottle')}/> + setWorldStage('heartbeat')}/> + setWorldStage('love')}/> + openWorldTool('system')}/> + : <> + openWorldTool('overview')}/> + openWorldTool('knowledge')}/> + openWorldTool('code')}/> + openWorldTool('receipts')}/> + openWorldTool('system')}/> + } +
} + {worldStage === 'heartbeat' && repoLogin.domain === 'FIFTH_DOMAIN' &&
+ +

心跳核心频道

冰朔 · ICE-GL∞ · 私人频道全景

+ openWorldTool('overview')}/> openWorldTool('knowledge')}/> openWorldTool('code')}/> openWorldTool('receipts')}/> diff --git a/product-source/hololake-native-desktop/src/styles.css b/product-source/hololake-native-desktop/src/styles.css index 5b29ba25f..46e9ff8a8 100644 --- a/product-source/hololake-native-desktop/src/styles.css +++ b/product-source/hololake-native-desktop/src/styles.css @@ -580,14 +580,15 @@ svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-lineca .official-world .pool-bay, .official-world .pool-halo, .official-world .pool-ring, -.official-world .nucleus-locus i { animation-play-state: paused; } -.official-world.motion-awake .world-star, -.official-world.motion-awake .world-shine, -.official-world.motion-awake .world-glint, -.official-world.motion-awake .pool-bay, -.official-world.motion-awake .pool-halo, -.official-world.motion-awake .pool-ring, -.official-world.motion-awake .nucleus-locus i { animation-play-state: running; } +.official-world .nucleus-locus i { animation: none; } +.official-world.motion-awake .world-star { animation: world-star-breathe var(--star-duration) ease-in-out var(--star-delay) infinite; } +.official-world.motion-awake .world-shine { animation: world-shine-glide 28s ease-in-out infinite alternate; } +.official-world.motion-awake .world-shine.warm { animation-delay: 4s; } +.official-world.motion-awake .world-glint { animation: world-glint var(--glint-duration) ease-in-out var(--glint-delay) infinite; } +.official-world.motion-awake .pool-bay { animation: world-pool-float 6.8s ease-in-out infinite; } +.official-world.motion-awake .pool-halo { animation: world-pool-breathe 5.8s ease-in-out infinite; } +.official-world.motion-awake .pool-ring { animation: world-ripple 5.5s ease-out infinite; } +.official-world.motion-awake .nucleus-locus i { animation: world-pool-breathe 5.2s ease-in-out infinite; } .official-hero { position: absolute; z-index: 10; top: 26px; left: 0; right: 0; text-align: center; } .official-hero h1 { margin: 0; color: var(--content-primary); font-size: clamp(24px, 3vw, 34px); font-weight: 700; letter-spacing: .09em; }