Files
MyAiDesk/nomifun-tauri/test-data/builtin-skills/morph-ppt/reference/styles/dark--cyber-future/build.sh
T
freedak f7a720204a Update: 将子项目从 submodule 转为完整内容
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用
- 添加所有子项目的完整源代码
- 保留原始 .git 为 .git.bak 备份
2026-07-04 19:20:46 +08:00

429 lines
16 KiB
Bash

#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
OUTPUT="$SCRIPT_DIR/dark__cyber_future.pptx"
echo "Building: dark--cyber-future (未来已来:2050)"
rm -f "$OUTPUT"
officecli create "$OUTPUT"
# Colors
BG=0B0C10
CYAN=66FCF1
GRAY=1F2833
TEAL=45A29E
WHITE=FFFFFF
GRAY2=C5C6C7
# Off-canvas position
OFFSCREEN=36cm
# ============================================
# SLIDE 1 - HERO
# ============================================
echo "Building Slide 1: Hero..."
officecli add "$OUTPUT" '/' --type slide --prop layout=blank --prop background=$BG
# Scene actors: background elements
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!bg-orb' \
--prop preset=ellipse \
--prop fill=$CYAN \
--prop opacity=0.08 \
--prop x=0cm --prop y=0cm --prop width=20cm --prop height=20cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!bg-box' \
--prop fill=$GRAY \
--prop opacity=0.3 \
--prop x=2cm --prop y=2cm --prop width=8cm --prop height=15cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!accent-line' \
--prop fill=$CYAN \
--prop x=1cm --prop y=4cm --prop width=0.2cm --prop height=5cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!frame' \
--prop fill=none \
--prop line=$GRAY \
--prop lineWidth=2 \
--prop x=1.2cm --prop y=0.8cm --prop width=31.47cm --prop height=17.45cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!dot-1' \
--prop preset=ellipse \
--prop fill=$TEAL \
--prop x=5cm --prop y=10cm --prop width=0.5cm --prop height=0.5cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!dot-2' \
--prop preset=ellipse \
--prop fill=$CYAN \
--prop x=30cm --prop y=15cm --prop width=1cm --prop height=1cm
# Slide 1 headline actors (visible on hero)
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!hero-title' \
--prop text="未来已来:2050" \
--prop font="Arial" \
--prop size=64 \
--prop bold=true \
--prop color=$WHITE \
--prop fill=none \
--prop x=4cm --prop y=6cm --prop width=25cm --prop height=4cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!hero-sub' \
--prop text="全息时代的一天" \
--prop font="Arial" \
--prop size=36 \
--prop color=$GRAY2 \
--prop fill=none \
--prop x=4.2cm --prop y=10.5cm --prop width=15cm --prop height=2cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!hero-tag' \
--prop text="THE BOUNDARY DISSOLVES" \
--prop font="Montserrat" \
--prop size=16 \
--prop color=$CYAN \
--prop bold=true \
--prop fill=none \
--prop x=4.2cm --prop y=13cm --prop width=15cm --prop height=1.5cm
# Slide 2 statement actors (hidden initially)
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!stmt-text' \
--prop text="物理与数字的边界彻底消融" \
--prop font="Arial" \
--prop size=54 \
--prop bold=true \
--prop color=$WHITE \
--prop align=center \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=7cm --prop width=28cm --prop height=4cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!stmt-sub' \
--prop text="智能代理、脑机接口与空间计算重塑了我们的每一秒" \
--prop font="Arial" \
--prop size=24 \
--prop color=$TEAL \
--prop align=center \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=12cm --prop width=28cm --prop height=2cm
# Slide 3 pillar content actors (hidden initially)
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p1-bg' \
--prop preset=roundRect \
--prop fill=$GRAY \
--prop opacity=0.4 \
--prop x=${OFFSCREEN} --prop y=4.5cm --prop width=9cm --prop height=11cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p1-time' \
--prop text="07:00" \
--prop font="Montserrat" \
--prop size=28 \
--prop bold=true \
--prop color=$CYAN \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=5.5cm --prop width=7cm --prop height=1.5cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p1-title' \
--prop text="基因营养与唤醒" \
--prop font="Arial" \
--prop size=24 \
--prop bold=true \
--prop color=$WHITE \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=7.5cm --prop width=7.5cm --prop height=1.5cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p1-desc' \
--prop text="AI管家实时读取体征,合成专属营养早餐,温和唤醒意识。" \
--prop font="Arial" \
--prop size=16 \
--prop color=$GRAY2 \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=10cm --prop width=7cm --prop height=4cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p2-bg' \
--prop preset=roundRect \
--prop fill=$GRAY \
--prop opacity=0.4 \
--prop x=${OFFSCREEN} --prop y=4.5cm --prop width=9cm --prop height=11cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p2-time' \
--prop text="14:00" \
--prop font="Montserrat" \
--prop size=28 \
--prop bold=true \
--prop color=$CYAN \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=5.5cm --prop width=7cm --prop height=1.5cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p2-title' \
--prop text="全息远程协同" \
--prop font="Arial" \
--prop size=24 \
--prop bold=true \
--prop color=$WHITE \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=7.5cm --prop width=7.5cm --prop height=1.5cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p2-desc' \
--prop text="在虚拟火星基地与全球团队开启三维会议,数据触手可及。" \
--prop font="Arial" \
--prop size=16 \
--prop color=$GRAY2 \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=10cm --prop width=7cm --prop height=4cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p3-bg' \
--prop preset=roundRect \
--prop fill=$GRAY \
--prop opacity=0.4 \
--prop x=${OFFSCREEN} --prop y=4.5cm --prop width=9cm --prop height=11cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p3-time' \
--prop text="21:00" \
--prop font="Montserrat" \
--prop size=28 \
--prop bold=true \
--prop color=$CYAN \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=5.5cm --prop width=7cm --prop height=1.5cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p3-title' \
--prop text="沉浸式潜意识休眠" \
--prop font="Arial" \
--prop size=24 \
--prop bold=true \
--prop color=$WHITE \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=7.5cm --prop width=8cm --prop height=1.5cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!p3-desc' \
--prop text="脑机接口连接潜意识网络,在深睡中完成知识载入与精神放松。" \
--prop font="Arial" \
--prop size=16 \
--prop color=$GRAY2 \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=10cm --prop width=7cm --prop height=4cm
# Slide 4 evidence actors (hidden initially)
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!ev-bg' \
--prop fill=$TEAL \
--prop opacity=0.3 \
--prop x=${OFFSCREEN} --prop y=3cm --prop width=15cm --prop height=13cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!ev-num' \
--prop text="98.5%" \
--prop font="Montserrat" \
--prop size=96 \
--prop bold=true \
--prop color=$CYAN \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=5cm --prop width=15cm --prop height=5cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!ev-label' \
--prop text="全球人口脑机接口接入率" \
--prop font="Arial" \
--prop size=24 \
--prop color=$WHITE \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=11cm --prop width=13cm --prop height=2cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!ev2-bg' \
--prop fill=$GRAY \
--prop opacity=0.5 \
--prop x=${OFFSCREEN} --prop y=8cm --prop width=12cm --prop height=8cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!ev2-num' \
--prop text="12.4 hrs" \
--prop font="Montserrat" \
--prop size=64 \
--prop bold=true \
--prop color=$WHITE \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=9.5cm --prop width=10cm --prop height=3cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!ev2-label' \
--prop text="平均每日混合现实驻留时长" \
--prop font="Arial" \
--prop size=18 \
--prop color=$GRAY2 \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=13.5cm --prop width=10cm --prop height=2cm
# Slide 5 CTA actors (hidden initially)
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!cta-title' \
--prop text="准备好迎接你的未来了吗?" \
--prop font="Arial" \
--prop size=48 \
--prop bold=true \
--prop color=$WHITE \
--prop align=center \
--prop fill=none \
--prop x=${OFFSCREEN} --prop y=7cm --prop width=26cm --prop height=3cm
officecli add "$OUTPUT" '/slide[1]' --type shape \
--prop 'name=!!cta-btn' \
--prop text="EXPLORE 2050" \
--prop preset=roundRect \
--prop font="Montserrat" \
--prop size=18 \
--prop bold=true \
--prop color=$BG \
--prop fill=$CYAN \
--prop align=center \
--prop x=${OFFSCREEN} --prop y=11.5cm --prop width=6cm --prop height=1.5cm
# ============================================
# SLIDE 2 - STATEMENT
# ============================================
echo "Building Slide 2: Statement..."
officecli add "$OUTPUT" '/' --from '/slide[1]'
officecli set "$OUTPUT" '/slide[2]' --prop transition=morph
# Move scene actors
officecli set "$OUTPUT" '/slide[2]/shape[1]' --prop x=20cm --prop y=8cm --prop opacity=0.05 --prop fill=$TEAL
officecli set "$OUTPUT" '/slide[2]/shape[2]' --prop x=14cm --prop y=2cm --prop width=18cm --prop opacity=0.1
officecli set "$OUTPUT" '/slide[2]/shape[3]' --prop x=2cm --prop y=2cm --prop width=30cm --prop height=0.2cm
officecli set "$OUTPUT" '/slide[2]/shape[5]' --prop x=31cm --prop y=4cm
officecli set "$OUTPUT" '/slide[2]/shape[6]' --prop x=3cm --prop y=16cm
# Hide hero text
officecli set "$OUTPUT" '/slide[2]/shape[7]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[2]/shape[8]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[2]/shape[9]' --prop x=${OFFSCREEN} --prop y=0cm
# Show statement text
officecli set "$OUTPUT" '/slide[2]/shape[10]' --prop x=2.9cm --prop y=7cm
officecli set "$OUTPUT" '/slide[2]/shape[11]' --prop x=2.9cm --prop y=12cm
# ============================================
# SLIDE 3 - PILLARS
# ============================================
echo "Building Slide 3: Pillars..."
officecli add "$OUTPUT" '/' --from '/slide[2]'
officecli set "$OUTPUT" '/slide[3]' --prop transition=morph
# Move scene actors
officecli set "$OUTPUT" '/slide[3]/shape[1]' --prop x=10cm --prop y=0cm --prop opacity=0.08 --prop fill=$CYAN
officecli set "$OUTPUT" '/slide[3]/shape[2]' --prop x=2cm --prop y=2cm --prop width=30cm --prop height=2cm --prop opacity=0.1
officecli set "$OUTPUT" '/slide[3]/shape[3]' --prop x=31cm --prop y=4cm --prop width=0.2cm --prop height=5cm
# Hide statement text
officecli set "$OUTPUT" '/slide[3]/shape[10]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[3]/shape[11]' --prop x=${OFFSCREEN} --prop y=0cm
# Show pillar 1
officecli set "$OUTPUT" '/slide[3]/shape[12]' --prop x=2.5cm --prop y=4.5cm
officecli set "$OUTPUT" '/slide[3]/shape[13]' --prop x=3.5cm --prop y=5.5cm
officecli set "$OUTPUT" '/slide[3]/shape[14]' --prop x=3.5cm --prop y=7.5cm
officecli set "$OUTPUT" '/slide[3]/shape[15]' --prop x=3.5cm --prop y=10cm
# Show pillar 2
officecli set "$OUTPUT" '/slide[3]/shape[16]' --prop x=12.5cm --prop y=4.5cm
officecli set "$OUTPUT" '/slide[3]/shape[17]' --prop x=13.5cm --prop y=5.5cm
officecli set "$OUTPUT" '/slide[3]/shape[18]' --prop x=13.5cm --prop y=7.5cm
officecli set "$OUTPUT" '/slide[3]/shape[19]' --prop x=13.5cm --prop y=10cm
# Show pillar 3
officecli set "$OUTPUT" '/slide[3]/shape[20]' --prop x=22.5cm --prop y=4.5cm
officecli set "$OUTPUT" '/slide[3]/shape[21]' --prop x=23.5cm --prop y=5.5cm
officecli set "$OUTPUT" '/slide[3]/shape[22]' --prop x=23.5cm --prop y=7.5cm
officecli set "$OUTPUT" '/slide[3]/shape[23]' --prop x=23.5cm --prop y=10cm
# ============================================
# SLIDE 4 - EVIDENCE
# ============================================
echo "Building Slide 4: Evidence..."
officecli add "$OUTPUT" '/' --from '/slide[3]'
officecli set "$OUTPUT" '/slide[4]' --prop transition=morph
# Move scene actors
officecli set "$OUTPUT" '/slide[4]/shape[1]' --prop x=15cm --prop y=10cm --prop opacity=0.05
officecli set "$OUTPUT" '/slide[4]/shape[2]' --prop x=2cm --prop y=4cm --prop width=4cm --prop height=11cm
officecli set "$OUTPUT" '/slide[4]/shape[3]' --prop x=2cm --prop y=15.5cm --prop width=12cm --prop height=0.2cm
# Hide pillars
officecli set "$OUTPUT" '/slide[4]/shape[12]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[13]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[14]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[15]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[16]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[17]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[18]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[19]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[20]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[21]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[22]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[4]/shape[23]' --prop x=${OFFSCREEN} --prop y=0cm
# Show evidence
officecli set "$OUTPUT" '/slide[4]/shape[24]' --prop x=4cm --prop y=3cm
officecli set "$OUTPUT" '/slide[4]/shape[25]' --prop x=5cm --prop y=5cm
officecli set "$OUTPUT" '/slide[4]/shape[26]' --prop x=5cm --prop y=12cm
officecli set "$OUTPUT" '/slide[4]/shape[27]' --prop x=20cm --prop y=8cm
officecli set "$OUTPUT" '/slide[4]/shape[28]' --prop x=21cm --prop y=9.5cm
officecli set "$OUTPUT" '/slide[4]/shape[29]' --prop x=21cm --prop y=13.5cm
# ============================================
# SLIDE 5 - CTA
# ============================================
echo "Building Slide 5: CTA..."
officecli add "$OUTPUT" '/' --from '/slide[4]'
officecli set "$OUTPUT" '/slide[5]' --prop transition=morph
# Move scene actors
officecli set "$OUTPUT" '/slide[5]/shape[1]' --prop x=8cm --prop y=0cm --prop width=15cm --prop height=15cm --prop opacity=0.08
officecli set "$OUTPUT" '/slide[5]/shape[2]' --prop x=12cm --prop y=10cm --prop width=10cm --prop height=6cm
officecli set "$OUTPUT" '/slide[5]/shape[3]' --prop x=16.5cm --prop y=16cm --prop width=0.8cm --prop height=0.2cm
# Hide evidence
officecli set "$OUTPUT" '/slide[5]/shape[24]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[5]/shape[25]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[5]/shape[26]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[5]/shape[27]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[5]/shape[28]' --prop x=${OFFSCREEN} --prop y=0cm
officecli set "$OUTPUT" '/slide[5]/shape[29]' --prop x=${OFFSCREEN} --prop y=0cm
# Show CTA
officecli set "$OUTPUT" '/slide[5]/shape[30]' --prop x=3.9cm --prop y=7cm
officecli set "$OUTPUT" '/slide[5]/shape[31]' --prop x=13.9cm --prop y=11.5cm
# ============================================
# FINAL VALIDATION
# ============================================
officecli validate "$OUTPUT"
officecli view "$OUTPUT" outline
echo "✅ Build complete: $OUTPUT"