2026-01-18 10:24:35 +08:00
< template >
< div class = "ai-evolution-demo" >
<!-- Timeline -- >
< div class = "timeline-container" >
< div class = "timeline-track" > < / div >
2026-01-18 12:21:49 +08:00
< button
v-for = "(stage, index) in stages"
2026-01-18 10:24:35 +08:00
:key = "index"
class = "timeline-node"
2026-01-18 12:21:49 +08:00
: class = "{
active: currentStage === index,
passed: currentStage > index
}"
2026-01-18 10:24:35 +08:00
@click ="currentStage = index"
>
< div class = "node-dot" >
< div class = "inner-dot" > < / div >
< / div >
< div class = "node-content" >
< span class = "year-badge" > { { stage . year } } < / span >
< span class = "node-label" > { { stage . label } } < / span >
< / div >
< / button >
< / div >
<!-- Content -- >
< div class = "content-wrapper" >
< transition name = "fade-slide" mode = "out-in" >
< div :key = "currentStage" class = "stage-content" >
< div class = "header-section" >
< h3 >
2026-01-18 12:21:49 +08:00
< span class = "stage-index"
> { { indexToRoman ( currentStage + 1 ) } } . < / s p a n
>
2026-01-18 10:24:35 +08:00
{ { stages [ currentStage ] . title } }
< / h3 >
< p > { { stages [ currentStage ] . desc } } < / p >
< / div >
< div class = "visualization-grid" >
<!-- Concept / Logic View -- >
< div class = "mac-window concept-window" >
< div class = "window-bar" >
< div class = "traffic-lights" >
< span class = "light red" > < / span >
< span class = "light yellow" > < / span >
< span class = "light green" > < / span >
< / div >
< div class = "window-title" > Core Logic < / div >
< / div >
< div class = "concept-canvas" >
<!-- Stage 0 : Symbolism -- >
< div v-if = "currentStage === 0" class="vis-symbolism" >
< div class = "logic-gate" >
< div class = "input-group" >
< span class = "input-val" > A : True < / span >
< span class = "input-val" > B : False < / span >
< / div >
2026-01-18 12:21:49 +08:00
< div class = "gate-box" > AND Rule < / div >
2026-01-18 10:24:35 +08:00
< div class = "output-val" > Output : False < / div >
< / div >
< div class = "math-note" > If A and B then C < / div >
< / div >
<!-- Stage 1 : Expert Systems -- >
< div v-if = "currentStage === 1" class="vis-expert" >
< div class = "decision-tree" >
< div class = "tree-node root" > Is it raining ? < / div >
< div class = "branches" >
< div class = "branch" >
< span class = "condition" > Yes < / span >
< div class = "tree-node leaf" > Take Umbrella < / div >
< / div >
< div class = "branch" >
< span class = "condition" > No < / span >
< div class = "tree-node leaf" > Go Out < / div >
< / div >
< / div >
< / div >
< div class = "kb-note" > Knowledge Base + Inference Engine < / div >
< / div >
<!-- Stage 2 : Deep Learning -- >
< div v-if = "currentStage === 2" class="vis-dl" >
< div class = "neural-net" >
< div class = "layer input" >
< div class = "neuron" v-for = "n in 3" :key="`i-${n}`" > < / div >
< / div >
< div class = "layer hidden" >
< div class = "neuron" v-for = "n in 4" :key="`h-${n}`" > < / div >
< / div >
< div class = "layer output" >
< div class = "neuron" v-for = "n in 2" :key="`o-${n}`" > < / div >
< / div >
< ! - - Connections drawn via CSS / SVG ideally , simplified here - - >
< svg class = "connections" >
< line x1 = "10" y1 = "20" x2 = "60" y2 = "10" / >
< line x1 = "10" y1 = "20" x2 = "60" y2 = "30" / >
<!-- Abstract lines -- >
< / svg >
< / div >
< div class = "dl-note" > Feature Extraction ( Black Box ) < / div >
< / div >
<!-- Stage 3 : GenAI -- >
< div v-if = "currentStage === 3" class="vis-genai" >
< div class = "transformer-block" >
< div class = "block-layer attn" > Self - Attention < / div >
< div class = "block-layer ff" > Feed Forward < / div >
< div class = "block-layer norm" > Norm & Add < / div >
< / div >
< div class = "chat-sim" >
< div class = "msg user" > "Draw a cat" < / div >
< div class = "msg ai" > Generates 🐱 ... < / div >
< / div >
< / div >
< / div >
< / div >
<!-- Application / Impact View -- >
< div class = "mac-window app-window" >
< div class = "window-bar" >
< div class = "window-title" > Real - world Impact < / div >
< / div >
< div class = "app-canvas" >
< div class = "impact-card" >
< div class = "impact-icon" > { { stages [ currentStage ] . icon } } < / div >
2026-01-18 12:21:49 +08:00
< div class = "impact-title" >
{ { stages [ currentStage ] . appTitle } }
< / div >
< div class = "impact-desc" >
{ { stages [ currentStage ] . appDesc } }
< / div >
2026-01-18 10:24:35 +08:00
< / div >
< / div >
< / div >
< / div >
< / div >
< / transition >
< / div >
< / div >
< / template >
< script setup >
import { ref } from 'vue'
const currentStage = ref ( 0 )
const indexToRoman = ( num ) => {
const map = { 1 : 'I' , 2 : 'II' , 3 : 'III' , 4 : 'IV' }
return map [ num ] || num
}
const stages = [
{
year : '1950s-1970s' ,
label : 'Symbolism' ,
title : 'The Dawn: Logic & Rules' ,
desc : 'AI started as "Symbolic AI". Scientists believed intelligence could be described by formal logic and rules. If we can write down all the rules of the world, a computer can be intelligent.' ,
icon : '♟️' ,
appTitle : 'Chess & Logic' ,
2026-01-18 12:21:49 +08:00
appDesc :
'Programs could solve logic puzzles and play simple chess, but failed at "common sense" or recognizing a cat in a photo.'
2026-01-18 10:24:35 +08:00
} ,
{
year : '1980s-1990s' ,
label : 'Expert Systems' ,
title : 'Knowledge Engineering' ,
desc : 'The era of "Expert Systems". We tried to hard-code human expertise (e.g., medical diagnosis rules) into databases. Useful for specific domains, but brittle and hard to maintain.' ,
icon : '🏥' ,
appTitle : 'MYCIN / Deep Blue' ,
2026-01-18 12:21:49 +08:00
appDesc :
'Systems that could diagnose blood infections or beat Garry Kasparov at chess (Deep Blue, 1997), but still lacked true learning capability.'
2026-01-18 10:24:35 +08:00
} ,
{
year : '2010s' ,
label : 'Deep Learning' ,
title : 'Connectionism & Big Data' ,
desc : 'The breakthrough of Neural Networks. Inspired by the human brain, computers learned patterns from massive data instead of being told rules. AlexNet (2012) changed everything.' ,
icon : '🧠' ,
appTitle : 'AlphaGo & FaceID' ,
2026-01-18 12:21:49 +08:00
appDesc :
'AI learned to see (ImageNet), hear (Siri), and play Go (AlphaGo). It surpassed humans in specific perceptual tasks.'
2026-01-18 10:24:35 +08:00
} ,
{
year : '2020s+' ,
label : 'Generative AI' ,
title : 'Generative Intelligence (LLMs)' ,
desc : 'The Transformer architecture allowed AI to understand context and generate new content. AI moved from "classifying" (is this a cat?) to "creating" (draw a cat).' ,
icon : '✨' ,
appTitle : 'ChatGPT & Midjourney' ,
2026-01-18 12:21:49 +08:00
appDesc :
'AI that can write code, poetry, paint images, and reason across multiple domains. A step towards AGI (General Intelligence).'
2026-01-18 10:24:35 +08:00
}
]
< / script >
< style scoped >
. ai - evolution - demo {
2026-01-19 11:25:10 +08:00
border - radius : 8 px ;
background : var ( -- vp - c - bg - soft ) ;
2026-01-18 10:24:35 +08:00
border : 1 px solid var ( -- vp - c - divider ) ;
overflow : hidden ;
2026-01-19 11:25:10 +08:00
margin : 1 rem 0 ;
2026-01-18 10:24:35 +08:00
}
/* Reusing Timeline Styles from FrontendEvolutionDemo for consistency */
. timeline - container {
padding : 2 rem 1 rem 1 rem ;
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - bg - soft ) ;
2026-01-18 10:24:35 +08:00
display : flex ;
justify - content : space - between ;
position : relative ;
border - bottom : 1 px solid var ( -- vp - c - divider ) ;
}
. timeline - track {
position : absolute ;
top : 2.5 rem ;
left : 3 rem ;
right : 3 rem ;
height : 2 px ;
background : var ( -- vp - c - divider ) ;
z - index : 0 ;
}
. timeline - node {
position : relative ;
z - index : 1 ;
background : transparent ;
border : none ;
display : flex ;
flex - direction : column ;
align - items : center ;
cursor : pointer ;
padding : 0 ;
width : 25 % ;
transition : all 0.3 s ease ;
opacity : 0.6 ;
}
2026-01-18 12:21:49 +08:00
. timeline - node : hover {
opacity : 0.9 ;
}
. timeline - node . active ,
. timeline - node . passed {
opacity : 1 ;
}
2026-01-18 10:24:35 +08:00
. node - dot {
width : 16 px ;
height : 16 px ;
border - radius : 50 % ;
background : var ( -- vp - c - bg ) ;
border : 2 px solid var ( -- vp - c - text - 3 ) ;
margin - bottom : 0.8 rem ;
display : flex ;
align - items : center ;
justify - content : center ;
transition : all 0.3 s ;
}
. inner - dot {
width : 0 ;
height : 0 ;
border - radius : 50 % ;
background : var ( -- vp - c - brand ) ;
transition : all 0.3 s ;
}
. timeline - node . active . node - dot {
border - color : var ( -- vp - c - brand ) ;
transform : scale ( 1.3 ) ;
box - shadow : 0 0 0 4 px var ( -- vp - c - bg - soft ) ;
}
2026-01-18 12:21:49 +08:00
. timeline - node . active . inner - dot {
width : 8 px ;
height : 8 px ;
}
. timeline - node . passed . node - dot {
border - color : var ( -- vp - c - brand ) ;
background : var ( -- vp - c - brand ) ;
}
2026-01-18 10:24:35 +08:00
. node - content {
text - align : center ;
display : flex ;
flex - direction : column ;
align - items : center ;
gap : 0.2 rem ;
}
. year - badge {
font - size : 0.75 rem ;
font - family : var ( -- vp - font - family - mono ) ;
background : var ( -- vp - c - bg - alt ) ;
padding : 2 px 6 px ;
border - radius : 4 px ;
color : var ( -- vp - c - text - 2 ) ;
}
. node - label {
font - size : 0.85 rem ;
font - weight : 600 ;
color : var ( -- vp - c - text - 1 ) ;
}
/* Content Area */
2026-01-18 12:21:49 +08:00
. content - wrapper {
padding : 2 rem ;
min - height : 400 px ;
}
2026-01-18 10:24:35 +08:00
. header - section {
text - align : center ;
margin - bottom : 2 rem ;
max - width : 600 px ;
margin : 0 auto 2 rem ;
}
. header - section h3 {
font - size : 1.5 rem ;
margin - bottom : 0.5 rem ;
2026-01-19 11:25:10 +08:00
color : var ( -- vp - c - text - 1 ) ;
2026-01-18 10:24:35 +08:00
}
2026-01-18 12:21:49 +08:00
. stage - index {
color : var ( -- vp - c - text - 3 ) ;
- webkit - text - fill - color : var ( -- vp - c - text - 3 ) ;
margin - right : 0.5 rem ;
font - weight : normal ;
}
. header - section p {
font - size : 1 rem ;
color : var ( -- vp - c - text - 2 ) ;
line - height : 1.6 ;
}
2026-01-18 10:24:35 +08:00
/* Visualization */
. visualization - grid {
display : grid ;
grid - template - columns : 1 fr 1 fr ;
gap : 2 rem ;
align - items : stretch ;
}
2026-01-18 12:21:49 +08:00
@ media ( max - width : 768 px ) {
. visualization - grid {
grid - template - columns : 1 fr ;
}
}
2026-01-18 10:24:35 +08:00
. mac - window {
border - radius : 12 px ;
2026-01-19 11:25:10 +08:00
border : 1 px solid var ( -- vp - c - divider ) ;
2026-01-18 10:24:35 +08:00
overflow : hidden ;
display : flex ;
flex - direction : column ;
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - bg ) ;
2026-01-18 12:21:49 +08:00
}
2026-01-18 10:24:35 +08:00
2026-01-18 12:21:49 +08:00
. concept - window {
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - bg ) ;
2026-01-18 12:21:49 +08:00
}
. app - window {
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - bg ) ;
2026-01-18 12:21:49 +08:00
}
2026-01-18 10:24:35 +08:00
. window - bar {
padding : 0.8 rem 1 rem ;
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - bg - soft ) ;
border - bottom : 1 px solid var ( -- vp - c - divider ) ;
2026-01-18 10:24:35 +08:00
display : flex ;
align - items : center ;
position : relative ;
}
2026-01-18 12:21:49 +08:00
. traffic - lights {
display : flex ;
gap : 6 px ;
}
. light {
width : 10 px ;
height : 10 px ;
border - radius : 50 % ;
}
. light . red {
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - red - 1 , # ef4444 ) ;
2026-01-18 12:21:49 +08:00
}
. light . yellow {
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - yellow - 1 , # f59e0b ) ;
2026-01-18 12:21:49 +08:00
}
. light . green {
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - green - 1 , # 22 c55e ) ;
2026-01-18 12:21:49 +08:00
}
2026-01-18 10:24:35 +08:00
. window - title {
position : absolute ;
left : 0 ;
right : 0 ;
text - align : center ;
font - size : 0.8 rem ;
color : var ( -- vp - c - text - 2 ) ;
font - weight : 600 ;
}
2026-01-18 12:21:49 +08:00
. concept - canvas ,
. app - canvas {
2026-01-18 10:24:35 +08:00
padding : 2 rem ;
flex : 1 ;
display : flex ;
align - items : center ;
justify - content : center ;
min - height : 250 px ;
}
/* Visualizations */
/* Symbolism */
. logic - gate {
2026-01-19 11:25:10 +08:00
border : 2 px solid var ( -- vp - c - divider ) ;
2026-01-18 10:24:35 +08:00
padding : 1 rem ;
border - radius : 8 px ;
text - align : center ;
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - bg ) ;
2026-01-18 10:24:35 +08:00
}
2026-01-18 12:21:49 +08:00
. input - group {
display : flex ;
gap : 1 rem ;
justify - content : center ;
margin - bottom : 0.5 rem ;
2026-01-19 11:25:10 +08:00
font - family : var ( -- vp - font - family - mono ) ;
2026-01-18 12:21:49 +08:00
}
. gate - box {
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - brand ) ;
color : var ( -- vp - c - bg ) ;
2026-01-18 12:21:49 +08:00
padding : 4 px 10 px ;
margin : 0.5 rem 0 ;
border - radius : 4 px ;
}
. math - note {
margin - top : 1 rem ;
2026-01-19 11:25:10 +08:00
font - family : var ( -- vp - font - family - mono ) ;
color : var ( -- vp - c - text - 2 ) ;
2026-01-18 12:21:49 +08:00
font - size : 0.8 rem ;
}
2026-01-18 10:24:35 +08:00
/* Expert Systems */
2026-01-18 12:21:49 +08:00
. decision - tree {
display : flex ;
flex - direction : column ;
align - items : center ;
gap : 1 rem ;
}
. tree - node {
2026-01-19 11:25:10 +08:00
border : 1 px solid var ( -- vp - c - divider ) ;
2026-01-18 12:21:49 +08:00
padding : 6 px 12 px ;
border - radius : 20 px ;
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - bg ) ;
2026-01-18 12:21:49 +08:00
font - size : 0.8 rem ;
2026-01-19 11:25:10 +08:00
color : var ( -- vp - c - text - 1 ) ;
2026-01-18 12:21:49 +08:00
}
. tree - node . root {
2026-01-19 11:25:10 +08:00
border - color : var ( -- vp - c - brand ) ;
color : var ( -- vp - c - brand ) ;
2026-01-18 12:21:49 +08:00
font - weight : bold ;
}
. branches {
display : flex ;
gap : 2 rem ;
}
. branch {
display : flex ;
flex - direction : column ;
align - items : center ;
gap : 0.5 rem ;
}
. condition {
font - size : 0.7 rem ;
2026-01-19 11:25:10 +08:00
color : var ( -- vp - c - text - 2 ) ;
background : var ( -- vp - c - bg - alt ) ;
2026-01-18 12:21:49 +08:00
padding : 2 px 6 px ;
border - radius : 4 px ;
}
. kb - note {
margin - top : 1 rem ;
font - size : 0.8 rem ;
2026-01-19 11:25:10 +08:00
color : var ( -- vp - c - text - 2 ) ;
2026-01-18 12:21:49 +08:00
font - style : italic ;
}
2026-01-18 10:24:35 +08:00
/* Deep Learning */
2026-01-18 12:21:49 +08:00
. neural - net {
display : flex ;
gap : 2 rem ;
align - items : center ;
position : relative ;
}
. layer {
display : flex ;
flex - direction : column ;
gap : 0.5 rem ;
}
. neuron {
width : 12 px ;
height : 12 px ;
border - radius : 50 % ;
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - bg - alt ) ;
border : 1 px solid var ( -- vp - c - divider ) ;
2026-01-18 12:21:49 +08:00
}
. layer . input . neuron {
2026-01-19 11:25:10 +08:00
background : rgba ( var ( -- vp - c - brand - rgb ) , 0.25 ) ;
2026-01-18 12:21:49 +08:00
}
. layer . hidden . neuron {
2026-01-19 11:25:10 +08:00
background : rgba ( var ( -- vp - c - brand - rgb ) , 0.18 ) ;
2026-01-18 12:21:49 +08:00
}
. layer . output . neuron {
2026-01-19 11:25:10 +08:00
background : rgba ( var ( -- vp - c - brand - rgb ) , 0.12 ) ;
2026-01-18 12:21:49 +08:00
}
. connections {
position : absolute ;
top : 0 ;
left : 0 ;
width : 100 % ;
height : 100 % ;
pointer - events : none ;
opacity : 0.2 ;
}
. connections line {
2026-01-19 11:25:10 +08:00
stroke : var ( -- vp - c - text - 2 ) ;
2026-01-18 12:21:49 +08:00
stroke - width : 1 ;
}
. dl - note {
margin - top : 2 rem ;
font - size : 0.8 rem ;
2026-01-19 11:25:10 +08:00
color : var ( -- vp - c - text - 2 ) ;
2026-01-18 12:21:49 +08:00
}
2026-01-18 10:24:35 +08:00
/* GenAI */
2026-01-18 12:21:49 +08:00
. vis - genai {
display : flex ;
flex - direction : column ;
gap : 1 rem ;
align - items : center ;
width : 100 % ;
}
. transformer - block {
2026-01-19 11:25:10 +08:00
border : 2 px solid var ( -- vp - c - brand ) ;
2026-01-18 12:21:49 +08:00
border - radius : 8 px ;
padding : 0.5 rem ;
width : 120 px ;
text - align : center ;
2026-01-19 11:25:10 +08:00
background : rgba ( var ( -- vp - c - brand - rgb ) , 0.08 ) ;
2026-01-18 12:21:49 +08:00
}
. block - layer {
2026-01-19 11:25:10 +08:00
border : 1 px solid var ( -- vp - c - divider ) ;
background : var ( -- vp - c - bg ) ;
2026-01-18 12:21:49 +08:00
margin : 4 px 0 ;
padding : 4 px ;
font - size : 0.7 rem ;
border - radius : 4 px ;
}
. chat - sim {
width : 100 % ;
2026-01-19 11:25:10 +08:00
border : 1 px solid var ( -- vp - c - divider ) ;
2026-01-18 12:21:49 +08:00
border - radius : 8 px ;
padding : 1 rem ;
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - bg ) ;
2026-01-18 12:21:49 +08:00
font - size : 0.8 rem ;
}
. msg {
padding : 6 px 10 px ;
border - radius : 12 px ;
margin - bottom : 0.5 rem ;
max - width : 80 % ;
}
. msg . user {
2026-01-19 11:25:10 +08:00
background : rgba ( var ( -- vp - c - brand - rgb ) , 0.1 ) ;
2026-01-18 12:21:49 +08:00
margin - left : auto ;
2026-01-19 11:25:10 +08:00
color : var ( -- vp - c - text - 1 ) ;
2026-01-18 12:21:49 +08:00
}
. msg . ai {
2026-01-19 11:25:10 +08:00
background : var ( -- vp - c - bg - soft ) ;
2026-01-18 12:21:49 +08:00
margin - right : auto ;
2026-01-19 11:25:10 +08:00
color : var ( -- vp - c - text - 1 ) ;
2026-01-18 12:21:49 +08:00
}
2026-01-18 10:24:35 +08:00
/* Impact Card */
2026-01-18 12:21:49 +08:00
. impact - card {
text - align : center ;
}
. impact - icon {
font - size : 4 rem ;
margin - bottom : 1 rem ;
}
. impact - title {
font - size : 1.2 rem ;
font - weight : bold ;
margin - bottom : 0.5 rem ;
color : var ( -- vp - c - text - 1 ) ;
}
. impact - desc {
font - size : 0.9 rem ;
color : var ( -- vp - c - text - 2 ) ;
line - height : 1.5 ;
}
2026-01-18 10:24:35 +08:00
/* Transitions */
2026-01-18 12:21:49 +08:00
. fade - slide - enter - active ,
. fade - slide - leave - active {
transition : all 0.4 s ease ;
}
. fade - slide - enter - from {
opacity : 0 ;
transform : translateY ( 20 px ) ;
}
. fade - slide - leave - to {
opacity : 0 ;
transform : translateY ( - 20 px ) ;
}
< / style >