Timeline v4: warm editorial palette (terracotta+ochre on cream), Fraunces display serif, scroll-progress line, hero with stat counters, through-line narrative — genuinely inspiring not corporate

This commit is contained in:
Tony0410
2026-07-20 22:06:12 +08:00
parent 3a7f8edc98
commit ee6cc26aff

View File

@@ -4,480 +4,384 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Career Arc · Anthony Martin</title> <title>Career Arc · Anthony Martin</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<style> <style>
*{margin:0;padding:0;box-sizing:border-box} *{margin:0;padding:0;box-sizing:border-box}
:root{ :root{
--bg:#f8f9fa; --bg:#f4f1ea;
--surface:#fff; --bg-2:#ece7dc;
--text:#1a1a1a; --ink:#1c1b19;
--text-m:#6b7280; --ink-soft:#56524b;
--text-dim:#9ca3af; --ink-faint:#9a948a;
--border:rgba(0,0,0,0.06); --line:#d8d1c4;
--border-h:rgba(0,0,0,0.1); --accent:#b5462e; /* terracotta — the spark */
--gold:#d4a843; --accent-deep:#8f3320;
--gold-l:#f5e8c8; --gold:#c89b3c; /* ochre — the through-line */
--green:#2d7a47; --card:#fbf9f4;
--green-l:#e8f5ee; --shadow:0 1px 2px rgba(28,27,25,0.04),0 8px 24px rgba(28,27,25,0.05);
--cream:#fdf8f0; --shadow-h:0 2px 4px rgba(28,27,25,0.06),0 16px 40px rgba(28,27,25,0.09);
--shadow:0 1px 3px rgba(0,0,0,0.04),0 1px 2px rgba(0,0,0,0.03); --radius:14px;
--radius:12px;
} }
html{scroll-behavior:smooth}
body{ body{
font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; font-family:'Inter',system-ui,sans-serif;
background:var(--bg); background:var(--bg);color:var(--ink);
color:var(--text); -webkit-font-smoothing:antialiased;line-height:1.6;
overflow-x:hidden; overflow-x:hidden;
-webkit-font-smoothing:antialiased;
line-height:1.6;
} }
::selection{background:rgba(212,168,67,0.2);color:var(--text)} ::selection{background:rgba(181,70,46,0.18);color:var(--ink)}
a{color:var(--green);text-decoration:none;transition:color 0.2s} a{color:var(--accent-deep);text-decoration:none;transition:color .2s}
a:hover{color:var(--gold)} a:hover{color:var(--accent)}
/* Hero */ /* ═══════════ HERO ═══════════ */
.hero{ .hero{
min-height:100vh; min-height:100vh;
display:flex;flex-direction:column;justify-content:center;align-items:center; display:flex;flex-direction:column;justify-content:center;
text-align:center;padding:2rem;position:relative; padding:2rem clamp(1.5rem,6vw,8rem);
background:linear-gradient(180deg,var(--cream) 0%,var(--bg) 100%); position:relative;
background:
radial-gradient(ellipse 80% 60% at 85% 15%,rgba(200,155,60,0.10),transparent 60%),
radial-gradient(ellipse 70% 50% at 10% 90%,rgba(181,70,46,0.08),transparent 55%),
linear-gradient(160deg,var(--bg) 0%,var(--bg-2) 100%);
} }
.hero::after{ .hero .eyebrow{
content:'';position:absolute;bottom:0;left:10%;right:10%;height:1px; font-family:'Inter';font-size:.7rem;font-weight:600;
background:linear-gradient(90deg,transparent,var(--border-h),transparent); letter-spacing:.22em;text-transform:uppercase;color:var(--accent);
margin-bottom:1.4rem;display:flex;align-items:center;gap:.7rem;
opacity:0;animation:rise .7s ease .1s both;
} }
.hero .eyebrow::before{content:'';width:28px;height:2px;background:var(--accent);border-radius:1px}
.hero h1{ .hero h1{
font-size:clamp(2.8rem,6vw,5rem);font-weight:800; font-family:'Fraunces',Georgia,serif;
letter-spacing:-0.03em;line-height:1.05;color:var(--text); font-weight:500;font-size:clamp(2.8rem,8vw,6.5rem);
margin-bottom:0.6rem; line-height:.98;letter-spacing:-.02em;color:var(--ink);
max-width:13ch;margin-bottom:1.6rem;
opacity:0;animation:rise .8s ease .2s both;
} }
.hero h1 span{color:var(--gold)} .hero h1 em{font-style:italic;color:var(--accent);font-weight:600}
.hero .sub{ .hero .lede{
font-size:clamp(0.95rem,1.8vw,1.15rem);font-weight:400; font-size:clamp(1rem,2vw,1.25rem);font-weight:400;
color:var(--text-m);max-width:480px;line-height:1.5;margin-bottom:1.5rem; color:var(--ink-soft);max-width:46ch;line-height:1.55;
opacity:0;animation:rise .8s ease .35s both;
} }
.hero .tag{ .hero .stats{
display:inline-flex;align-items:center;gap:0.4rem; display:flex;flex-wrap:wrap;gap:2.5rem;margin-top:3rem;
background:var(--green-l);color:var(--green); opacity:0;animation:rise .8s ease .5s both;
padding:0.35rem 1rem;border-radius:100px;
font-size:0.78rem;font-weight:500;
} }
.hero .scroll-hint{ .hero .stats .stat .num{
position:absolute;bottom:2.5rem; font-family:'Fraunces',serif;font-size:2.2rem;font-weight:600;color:var(--ink);
color:var(--text-dim);font-size:0.7rem; line-height:1;
display:flex;flex-direction:column;align-items:center;gap:0.35rem;
letter-spacing:0.04em;text-transform:uppercase;
cursor:pointer;transition:color 0.2s;
} }
.hero .scroll-hint:hover{color:var(--text-m)} .hero .stats .stat .num span{color:var(--accent)}
.hero .scroll-hint .chev{width:16px;height:16px;animation:bounce 2s ease-in-out infinite} .hero .stats .stat .lbl{
font-size:.72rem;color:var(--ink-faint);letter-spacing:.04em;margin-top:.35rem;font-weight:500;
}
.hero .scroll-cue{
position:absolute;bottom:2.2rem;left:clamp(1.5rem,6vw,8rem);
font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);
display:flex;align-items:center;gap:.5rem;cursor:pointer;transition:color .2s;
}
.hero .scroll-cue:hover{color:var(--accent)}
.hero .scroll-cue .dash{width:30px;height:1px;background:currentColor;display:inline-block;animation:slide 2s ease-in-out infinite}
/* Timeline wrapper */ /* ═══════════ TIMELINE ═══════════ */
.timeline-wrapper{max-width:880px;margin:0 auto;padding:0 1.5rem 4rem} .wrap{max-width:960px;margin:0 auto;padding:5rem 1.5rem 6rem}
.section-label{
font-size:.7rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
color:var(--ink-faint);text-align:center;margin-bottom:.5rem;
}
.section-sub{
font-family:'Fraunces',serif;font-style:italic;font-size:1.3rem;color:var(--ink-soft);
text-align:center;margin-bottom:3.5rem;max-width:30ch;margin-left:auto;margin-right:auto;line-height:1.4;
}
/* Present banner */ .timeline{position:relative}
.present-banner{ .timeline::before{
background:var(--cream); content:'';position:absolute;left:50%;top:8px;bottom:8px;width:2px;
border:1px solid var(--border); background:linear-gradient(to bottom,transparent,var(--line) 6%,var(--line) 94%,transparent);
border-radius:var(--radius);
padding:1.5rem 2rem;margin:3rem auto;
max-width:680px;text-align:center;position:relative;
box-shadow:var(--shadow);
}
.present-banner::before{
content:'';position:absolute;top:0;left:2rem;right:2rem;height:2px;
background:linear-gradient(90deg,transparent,var(--gold),transparent);
border-radius:1px;
}
.present-banner .label{
font-size:0.65rem;text-transform:uppercase;letter-spacing:0.12em;
color:var(--gold);font-weight:600;margin-bottom:0.25rem;
}
.present-banner .label .dot{
display:inline-block;width:6px;height:6px;background:var(--gold);
border-radius:50%;margin-right:0.3rem;vertical-align:middle;
animation:pulse 2s ease-in-out infinite;
}
.present-banner h2{font-size:1.2rem;font-weight:600;color:var(--text);margin-bottom:0.2rem}
.present-banner p{font-size:0.82rem;color:var(--text-m);line-height:1.55;max-width:560px;margin:0 auto}
/* Timeline */
.timeline{position:relative;padding-top:1rem}
/* The vertical line */
.timeline-line{
position:absolute;left:50%;top:0;bottom:0;
width:2px;
background:linear-gradient(to bottom,var(--gold-l),var(--gold),var(--gold-l));
transform:translateX(-50%); transform:translateX(-50%);
} }
/* progress fill that grows on scroll */
/* Items */ .timeline .progress{
.timeline-item{ content:'';position:absolute;left:50%;top:8px;width:2px;height:0;
position:relative; background:linear-gradient(to bottom,var(--accent),var(--gold));
margin-bottom:2.5rem; transform:translateX(-50%);z-index:1;border-radius:2px;
opacity:0; transition:height .15s linear;
transform:translateY(30px);
transition:opacity 0.7s ease,transform 0.7s cubic-bezier(0.22,1,0.36,1);
}
.timeline-item.visible{opacity:1;transform:translateY(0)}
.timeline-item:nth-child(odd) .timeline-card{margin-left:auto}
/* Dot */
.timeline-dot{
position:absolute;left:50%;top:1.8rem;
width:14px;height:14px;
background:var(--gold);
border:2px solid var(--bg);
border-radius:50%;
transform:translateX(-50%);
z-index:2;
transition:transform 0.3s ease,box-shadow 0.3s ease;
box-shadow:0 0 0 0 var(--gold-l);
}
.timeline-item.visible .timeline-dot{
transform:translateX(-50%) scale(1.15);
box-shadow:0 0 0 6px rgba(212,168,67,0.15);
} }
/* Card */ .item{position:relative;margin-bottom:2.2rem;display:flex;width:100%}
.timeline-card{ .item:nth-child(odd){justify-content:flex-start}
width:calc(50% - 36px); .item:nth-child(even){justify-content:flex-end}
background:var(--surface);
border:1px solid var(--border);
border-radius:var(--radius);
padding:1.3rem 1.5rem;
cursor:pointer;
transition:border-color 0.25s ease,box-shadow 0.25s ease,transform 0.25s ease;
position:relative;
box-shadow:var(--shadow);
}
.timeline-card:hover{
border-color:var(--border-h);
box-shadow:0 4px 12px rgba(0,0,0,0.06),0 1px 3px rgba(0,0,0,0.04);
transform:translateY(-1px);
}
.timeline-card:active{transform:translateY(0)}
/* Connector arrows */ .node{
.timeline-item:nth-child(odd) .timeline-card::after{ position:absolute;left:50%;top:2.1rem;width:16px;height:16px;
content:'';position:absolute;top:1.6rem;left:-7px; transform:translateX(-50%);border-radius:50%;
border:7px solid transparent;border-right-color:var(--border); background:var(--card);border:2px solid var(--line);z-index:3;
z-index:1; transition:all .4s cubic-bezier(.22,1,.36,1);
}
.timeline-item:nth-child(even) .timeline-card::after{
content:'';position:absolute;top:1.6rem;right:-7px;
border:7px solid transparent;border-left-color:var(--border);
z-index:1;
} }
.item.in .node{border-color:var(--accent);background:var(--accent);
box-shadow:0 0 0 5px rgba(181,70,46,.14),0 0 14px rgba(181,70,46,.25)}
/* Card content */ .card{
.timeline-card .date{ width:calc(50% - 44px);background:var(--card);border:1px solid var(--line);
font-size:0.68rem;font-weight:600;color:var(--gold); border-radius:var(--radius);padding:1.5rem 1.6rem;cursor:pointer;
text-transform:uppercase;letter-spacing:0.06em;margin-bottom:0.2rem; box-shadow:var(--shadow);position:relative;
opacity:0;transform:translateY(28px);
transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1),
box-shadow .3s ease,border-color .3s ease;
} }
.timeline-card .role{ .item.in .card{opacity:1;transform:translateY(0)}
font-size:1.05rem;font-weight:600;color:var(--text); .card:hover{box-shadow:var(--shadow-h);border-color:#c9c0b0}
margin-bottom:0.05rem;letter-spacing:-0.01em; /* connector */
.item:nth-child(odd) .card::after,.item:nth-child(even) .card::after{
content:'';position:absolute;top:2rem;width:32px;height:2px;background:var(--line);
} }
.timeline-card .company{ .item:nth-child(odd) .card::after{right:-32px}
font-size:0.85rem;font-weight:500;color:var(--green);margin-bottom:0.1rem; .item:nth-child(even) .card::after{left:-32px}
}
.timeline-card .location{
font-size:0.7rem;color:var(--text-dim);margin-bottom:0.5rem;
}
.timeline-card .summary{
font-size:0.8rem;color:var(--text-m);line-height:1.55;margin-bottom:0.4rem;
}
.timeline-card .expand-btn{
font-size:0.72rem;font-weight:500;color:var(--green);
cursor:pointer;display:inline-flex;align-items:center;gap:0.3rem;
border:none;background:none;padding:0;
transition:color 0.2s;
}
.timeline-card .expand-btn:hover{color:var(--gold)}
.timeline-card .expand-btn .arrow{
display:inline-block;font-size:0.55rem;
transition:transform 0.25s ease;
}
.timeline-card .expand-btn.open .arrow{transform:rotate(180deg)}
.timeline-card .details{ .card .yr{
max-height:0;overflow:hidden; font-size:.68rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
transition:max-height 0.4s ease,opacity 0.3s ease; color:var(--accent);margin-bottom:.35rem;display:flex;align-items:center;gap:.5rem;
opacity:0;
} }
.timeline-card .details.open{max-height:2000px;opacity:1} .card .yr .seg{width:18px;height:2px;background:var(--gold);border-radius:1px}
.timeline-card .details ul{ .card .role{font-family:'Fraunces',serif;font-size:1.2rem;font-weight:600;color:var(--ink);line-height:1.2;margin-bottom:.1rem}
list-style:none;padding:0.6rem 0 0;margin-top:0.5rem; .card .co{font-size:.85rem;font-weight:600;color:var(--ink-soft);margin-bottom:.1rem}
border-top:1px solid var(--border); .card .loc{font-size:.72rem;color:var(--ink-faint);margin-bottom:.6rem}
.card .sum{font-size:.82rem;color:var(--ink-soft);line-height:1.55;margin-bottom:.5rem}
.card .btn{
font-size:.72rem;font-weight:600;color:var(--accent);background:none;border:none;
padding:0;display:inline-flex;align-items:center;gap:.35rem;cursor:pointer;transition:color .2s;
} }
.timeline-card .details ul li{ .card .btn:hover{color:var(--accent-deep)}
padding:0.25rem 0;font-size:0.78rem;color:var(--text-m); .card .btn .ar{transition:transform .25s ease;font-size:.6rem}
line-height:1.5;padding-left:1rem;position:relative; .card .btn.open .ar{transform:rotate(180deg)}
} .card .details{max-height:0;overflow:hidden;transition:max-height .45s ease,opacity .3s ease;opacity:0}
.timeline-card .details ul li::before{ .card .details.open{max-height:1600px;opacity:1}
content:'→';position:absolute;left:0;color:var(--gold);font-size:0.65rem; .card .details ul{list-style:none;padding:1rem 0 0;margin-top:.5rem;border-top:1px solid var(--line)}
} .card .details li{font-size:.78rem;color:var(--ink-soft);line-height:1.5;padding:.28rem 0 .28rem 1.1rem;position:relative}
.timeline-card .details .tags{ .card .details li::before{content:'';position:absolute;left:0;top:.72rem;width:5px;height:5px;border-radius:50%;background:var(--accent)}
display:flex;flex-wrap:wrap;gap:0.3rem;padding-top:0.6rem;margin-top:0.5rem; .card .tags{display:flex;flex-wrap:wrap;gap:.3rem;padding-top:.7rem;margin-top:.5rem;border-top:1px solid var(--line)}
border-top:1px solid var(--border); .card .tags span{background:rgba(200,155,60,.12);color:var(--accent-deep);font-size:.62rem;font-weight:600;padding:.18rem .55rem;border-radius:100px;letter-spacing:.02em}
}
.timeline-card .details .tags span{
background:var(--green-l);color:var(--green);
font-size:0.64rem;padding:0.15rem 0.5rem;border-radius:100px;
font-weight:500;
}
.timeline-item:last-child{margin-bottom:0}
/* Education */ /* ═══════════ PRESENT BANNER ═══════════ */
.edu-section{max-width:680px;margin:4rem auto;padding:0 1.5rem} .present{
.edu-section h2{ max-width:680px;margin:0 auto 4rem;text-align:center;
font-size:0.7rem;font-weight:600;color:var(--text-dim); background:linear-gradient(135deg,var(--card),#fff);
text-align:center;margin-bottom:1.25rem; border:1px solid var(--line);border-radius:18px;padding:2rem 2rem 1.8rem;
text-transform:uppercase;letter-spacing:0.1em; box-shadow:var(--shadow);position:relative;overflow:hidden;
} }
.present::before{content:'';position:absolute;top:0;left:18%;right:18%;height:2px;
background:linear-gradient(90deg,transparent,var(--accent),transparent);border-radius:1px}
.present .tag{font-size:.65rem;letter-spacing:.14em;text-transform:uppercase;font-weight:600;color:var(--accent);margin-bottom:.5rem;display:flex;align-items:center;justify-content:center;gap:.4rem}
.present .tag .d{width:7px;height:7px;border-radius:50%;background:var(--accent);animation:pulse 2.2s ease-in-out infinite}
.present h2{font-family:'Fraunces',serif;font-size:1.5rem;font-weight:600;color:var(--ink);margin-bottom:.4rem}
.present p{font-size:.9rem;color:var(--ink-soft);line-height:1.6;max-width:48ch;margin:0 auto}
/* ═══════════ CAPABILITIES ═══════════ */
.caps{max-width:760px;margin:5rem auto 0;padding:0 1.5rem}
.caps h2{font-family:'Fraunces',serif;font-style:italic;font-size:1.5rem;color:var(--ink);text-align:center;margin-bottom:1.8rem}
.caps-grid{display:flex;flex-wrap:wrap;gap:.55rem;justify-content:center}
.cap{
background:var(--card);border:1px solid var(--line);border-radius:100px;
padding:.5rem 1.1rem;font-size:.78rem;font-weight:500;color:var(--ink-soft);
box-shadow:var(--shadow);opacity:0;transform:translateY(12px) scale(.96);
transition:opacity .4s ease,transform .4s ease,border-color .2s,color .2s;
}
.cap.in{opacity:1;transform:none}
.cap:hover{border-color:var(--accent);color:var(--accent-deep)}
.edu{max-width:760px;margin:4rem auto 0;padding:0 1.5rem}
.edu h2{font-family:'Fraunces',serif;font-style:italic;font-size:1.5rem;color:var(--ink);text-align:center;margin-bottom:1.8rem}
.edu-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem} .edu-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.edu-card{ .edu-card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:1.3rem 1.4rem;box-shadow:var(--shadow);opacity:0;transform:translateY(16px);transition:opacity .6s ease,transform .6s ease}
background:var(--surface);border:1px solid var(--border);border-radius:10px; .edu-card.in{opacity:1;transform:none}
padding:1.1rem 1.2rem; .edu-card h3{font-family:'Fraunces',serif;font-size:1rem;font-weight:600;color:var(--ink);margin-bottom:.3rem}
opacity:0;transform:translateY(15px); .edu-card .d{font-size:.8rem;color:var(--ink-soft);margin-bottom:.2rem}
transition:opacity 0.5s ease,transform 0.5s ease; .edu-card .y{font-size:.7rem;font-weight:600;color:var(--gold);letter-spacing:.03em}
box-shadow:var(--shadow);
}
.edu-card.visible{opacity:1;transform:translateY(0)}
.edu-card h3{font-size:0.85rem;font-weight:600;color:var(--text);margin-bottom:0.1rem}
.edu-card .detail{font-size:0.75rem;color:var(--text-m);margin-bottom:0.1rem}
.edu-card .year{font-size:0.65rem;color:var(--green);font-weight:500}
/* Skills sections */ .footer{text-align:center;padding:3rem 1.5rem 2rem;color:var(--ink-faint);font-size:.72rem;border-top:1px solid var(--line);max-width:760px;margin:4rem auto 0}
.skills-section{max-width:680px;margin:0 auto 4rem;padding:0 1.5rem} .footer a{color:var(--accent-deep)}
.skills-section h2{
font-size:0.7rem;font-weight:600;color:var(--text-dim);
text-align:center;margin-bottom:1.25rem;
text-transform:uppercase;letter-spacing:0.1em;
}
.skills-grid{display:flex;flex-wrap:wrap;gap:0.4rem;justify-content:center}
.skill-tag{
background:var(--surface);border:1px solid var(--border);
border-radius:100px;padding:0.3rem 0.9rem;
font-size:0.72rem;font-weight:400;color:var(--text-m);
opacity:0;transform:scale(0.92);
transition:opacity 0.35s ease,transform 0.35s ease,border-color 0.2s,color 0.2s;
box-shadow:var(--shadow);
}
.skill-tag.visible{opacity:1;transform:scale(1)}
.skill-tag:hover{border-color:var(--green);color:var(--green)}
.skill-tag:nth-child(1){transition-delay:0s}
.skill-tag:nth-child(2){transition-delay:0.03s}
.skill-tag:nth-child(3){transition-delay:0.06s}
.skill-tag:nth-child(4){transition-delay:0.09s}
.skill-tag:nth-child(5){transition-delay:0.12s}
.skill-tag:nth-child(6){transition-delay:0.15s}
.skill-tag:nth-child(7){transition-delay:0.18s}
.skill-tag:nth-child(8){transition-delay:0.21s}
.skill-tag:nth-child(9){transition-delay:0.24s}
.skill-tag:nth-child(10){transition-delay:0.27s}
/* Footer */ @keyframes rise{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}
.footer{ @keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}
text-align:center;padding:2rem;color:var(--text-dim); @keyframes slide{0%,100%{transform:translateX(0);opacity:.4}50%{transform:translateX(6px);opacity:1}}
font-size:0.7rem;border-top:1px solid var(--border);
max-width:680px;margin:0 auto;
}
/* Animations */
@keyframes bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.35}}
/* Reduced motion */
@media(prefers-reduced-motion:reduce){ @media(prefers-reduced-motion:reduce){
*,*::before,*::after{animation-duration:0.01ms!important;transition-duration:0.01ms!important} *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
.timeline-item{opacity:1!important;transform:none!important} .card,.cap,.edu-card{opacity:1!important;transform:none!important}
.skill-tag,.edu-card{opacity:1!important;transform:none!important}
} }
@media(max-width:720px){
/* Mobile */ .timeline::before,.timeline .progress{left:15px}
@media(max-width:700px){ .node{left:15px}
.timeline-line{left:18px} .item,.item:nth-child(even){justify-content:flex-end}
.timeline-dot{left:18px;width:12px;height:12px} .card{width:calc(100% - 42px);margin-left:auto}
.timeline-card{width:calc(100% - 48px);margin-left:44px!important} .item:nth-child(odd) .card::after,.item:nth-child(even) .card::after{left:auto;right:calc(100% - 42px);width:27px}
.timeline-item:nth-child(odd) .timeline-card::after,
.timeline-item:nth-child(even) .timeline-card::after{
left:-7px;border:7px solid transparent;border-right-color:var(--border);right:auto;
}
.edu-grid{grid-template-columns:1fr} .edu-grid{grid-template-columns:1fr}
.present-banner{padding:1.2rem 1.3rem} .hero .stats{gap:1.6rem}
.timeline-card{padding:1.1rem 1.2rem}
} }
</style> </style>
</head> </head>
<body> <body>
<!-- Hero -->
<section class="hero"> <section class="hero">
<h1>Career <span>Arc</span></h1> <div class="eyebrow">Marketing &amp; Communications · Perth</div>
<p class="sub">Marketing &amp; communications · Energy transition · Perth, WA</p> <h1>Fifteen years of making energy <em>make sense</em>.</h1>
<div class="tag">15+ years · 3 companies · 6 roles</div> <p class="lede">From billing enquiries to national EV rollouts — a career spent turning complex infrastructure into stories people actually understand.</p>
<div class="scroll-hint" onclick="document.querySelector('.present-banner')?.scrollIntoView({behavior:'smooth'})"> <div class="stats">
<svg class="chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M7 13l5 5 5-5M7 6l5 5 5-5"/></svg> <div class="stat"><div class="num">15<span>+</span></div><div class="lbl">Years in market</div></div>
<span>Explore</span> <div class="stat"><div class="num">3</div><div class="lbl">Energy companies</div></div>
<div class="stat"><div class="num">$2M<span>+</span></div><div class="lbl">Annual budgets led</div></div>
<div class="stat"><div class="num">6</div><div class="lbl">Distinct roles</div></div>
</div>
<div class="scroll-cue" onclick="document.getElementById('arc').scrollIntoView()">
<span class="dash"></span> The arc
</div> </div>
</section> </section>
<div class="timeline-wrapper"> <div class="wrap">
<div id="arc">
<div class="section-label">The Career Arc</div>
<div class="section-sub">One through-line: customer → product → brand → transition</div>
</div>
<!-- Present --> <div class="present">
<div class="present-banner" style="opacity:0;animation:fadeUp 0.8s ease 0.4s both"> <div class="tag"><span class="d"></span> Now</div>
<div class="label"><span class="dot"></span>Present</div> <h2>Open to what's next</h2>
<h2>Open to Opportunities</h2> <p>Just wrapped a Marketing Advisor role at Pacific Energy. Looking for corporate marketing, communications and digital strategy roles across Perth and WA.</p>
<p>Recently finished a Marketing Advisor role at Pacific Energy. Actively exploring corporate marketing, communications and digital strategy roles in Perth and across WA.</p>
</div> </div>
<div class="timeline" id="timeline"> <div class="timeline" id="timeline">
<div class="progress" id="progress"></div>
<div class="timeline-line"></div> <!-- 1 -->
<div class="item">
<!-- 1. Pacific Energy --> <div class="node"></div>
<div class="timeline-item" data-idx="1"> <div class="card" onclick="toggle(this)">
<div class="timeline-dot"></div> <div class="yr"><span class="seg"></span> Jun 2025 Jul 2026</div>
<div class="timeline-card" onclick="toggleDetails(this)">
<div class="date">Jun 2025 Jul 2026</div>
<div class="role">Marketing Advisor</div> <div class="role">Marketing Advisor</div>
<div class="company">Pacific Energy</div> <div class="co">Pacific Energy</div>
<div class="location">Kewdale, Perth WA</div> <div class="loc">Kewdale, Perth WA</div>
<div class="summary">Corporate marketing, digital content, technical communications, major events and marketing AI strategy for a leading energy infrastructure company.</div> <div class="sum">Corporate marketing, digital content, technical communications, major events and the company's marketing AI strategy.</div>
<button class="expand-btn"><span class="arrow"></span> <span class="lb">Show achievements</span></button> <button class="btn"><span class="ar"></span> <span class="lb">What I delivered</span></button>
<div class="details"> <div class="details">
<ul> <ul>
<li>Developed and rolled out a social media strategy and capability content series across LinkedIn and corporate channels</li> <li>Built and rolled out a social strategy + capability content series across LinkedIn and corporate channels</li>
<li>Defined Pacific Energy's marketing AI strategy and identified practical applications across content, digital workflows and operations</li> <li>Defined Pacific Energy's marketing AI strategy, mapping practical use across content, digital and operations</li>
<li>Led marketing collaboration on the corporate website, named Science and Sustainability Website of the Year at the 2026 Australian Web Awards</li> <li>Led marketing on the corporate website named Science &amp; Sustainability Website of the Year, 2026 Australian Web Awards</li>
<li>End-to-end marketing delivery for Australian Clean Energy Summit and Pilbara Summit — sponsorship activation, creative, content, logistics</li> <li>End-to-end delivery for the Australian Clean Energy Summit &amp; Pilbara Summit — activation, creative, content, logistics</li>
<li>Translated complex project information into executive comms covering battery storage, remote power, hybrid systems</li> <li>Translated complex projects (battery storage, remote power, hybrids) into clear executive comms</li>
<li>Maintained brand voice and visual standards across digital, print, signage, social and event channels</li>
</ul> </ul>
<div class="tags"> <div class="tags"><span>B2B Marketing</span><span>AI Strategy</span><span>Web Awards</span><span>Events</span></div>
<span>B2B Marketing</span><span>AI Strategy</span><span>Web Awards</span><span>Event Management</span><span>Corporate Comms</span>
</div>
</div> </div>
</div> </div>
</div> </div>
<!-- 2. Horizon Power --> <!-- 2 -->
<div class="timeline-item" data-idx="2"> <div class="item">
<div class="timeline-dot"></div> <div class="node"></div>
<div class="timeline-card" onclick="toggleDetails(this)"> <div class="card" onclick="toggle(this)">
<div class="date">2019 Sep 2024</div> <div class="yr"><span class="seg"></span> 2019 Sep 2024</div>
<div class="role">Marketing Specialist</div> <div class="role">Marketing Specialist</div>
<div class="company">Horizon Power</div> <div class="co">Horizon Power</div>
<div class="location">Perth, WA</div> <div class="loc">Perth, WA</div>
<div class="summary">Integrated marketing, regulated communications, customer engagement and energy transition programs across WA's regional energy provider.</div> <div class="sum">Integrated marketing, regulated communications and customer engagement across WA's regional energy provider.</div>
<button class="expand-btn"><span class="arrow"></span> <span class="lb">Show achievements</span></button> <button class="btn"><span class="ar"></span> <span class="lb">What I delivered</span></button>
<div class="details"> <div class="details">
<ul> <ul>
<li>Led integrated marketing and customer communication campaigns across digital, social, email, direct mail, television, print and community channels</li> <li>Led integrated campaigns across digital, social, email, mail, TV, print and community</li>
<li>Managed annual marketing budgets exceeding $2 million, using research and audience segmentation to prioritise investment</li> <li>Managed $2M+ annual budgets, using research and segmentation to prioritise spend</li>
<li>Led marketing for the WA EV Network — the state's electric vehicle charging infrastructure rollout</li> <li>Marketing lead on the WA EV Network — the state's charging infrastructure rollout</li>
<li>Supported launch of Smart Connect Solar and other distributed energy initiatives</li> <li>Supported Smart Connect Solar and other distributed-energy launches</li>
<li>Directed compliance-critical communications for government price changes, energy concessions and cost-of-living initiatives</li> <li>Directed compliance-critical comms for price changes, concessions and cost-of-living</li>
<li>Created the Bright Horizons STEM program, providing solar-powered education kits to remote schools</li> <li>Created Bright Horizons STEM — solar education kits for remote schools</li>
</ul> </ul>
<div class="tags"> <div class="tags"><span>Campaigns</span><span>$2M+ Budget</span><span>WA EV Network</span><span>Energy Transition</span></div>
<span>Integrated Campaigns</span><span>$2M+ Budget</span><span>WA EV Network</span><span>Energy Transition</span><span>Regulatory Comms</span>
</div>
</div> </div>
</div> </div>
</div> </div>
<!-- 3. Synergy: Energy Solutions Marketing Specialist --> <!-- 3 -->
<div class="timeline-item" data-idx="3"> <div class="item">
<div class="timeline-dot"></div> <div class="node"></div>
<div class="timeline-card" onclick="toggleDetails(this)"> <div class="card" onclick="toggle(this)">
<div class="date">2015 2018</div> <div class="yr"><span class="seg"></span> 2015 2018</div>
<div class="role">Energy Solutions Marketing Specialist</div> <div class="role">Energy Solutions Marketing Specialist</div>
<div class="company">Synergy</div> <div class="co">Synergy</div>
<div class="location">Perth, WA</div> <div class="loc">Perth, WA</div>
<div class="summary">Commercial growth and customer experience across renewable energy products, digital channels and agency management.</div> <div class="sum">Commercial growth and customer experience across renewable products, digital channels and agency management.</div>
<button class="expand-btn"><span class="arrow"></span> <span class="lb">Show achievements</span></button> <button class="btn"><span class="ar"></span> <span class="lb">What I delivered</span></button>
<div class="details"> <div class="details">
<ul> <ul>
<li>Led development of the SolarReturn proposition from research through launch, contributing to a 40% sales increase in year one</li> <li>Led SolarReturn from research to launch 40% sales lift in year one</li>
<li>Managed three-plus creative, digital and media agencies, improving conversion rates by 35% through iterative optimisation</li> <li>Managed 3+ agencies; lifted conversion 35% through iterative optimisation</li>
<li>Mapped the end-to-end solar customer journey, reducing inquiry-to-sale timeframes by 20%</li> <li>Mapped the solar customer journey, cutting inquiry-to-sale time by 20%</li>
<li>Converted renewable energy policy, rebates and feed-in tariffs into accessible customer communications across TV, radio, outdoor, social, email and SMS</li> <li>Turned policy, rebates and feed-in tariffs into accessible comms (TV, radio, OOH, social, email, SMS)</li>
</ul> </ul>
<div class="tags"> <div class="tags"><span>Product Launch</span><span>SolarReturn</span><span>Agency Mgmt</span><span>CRO</span></div>
<span>Product Launch</span><span>SolarReturn</span><span>Agency Management</span><span>Conversion Optimisation</span>
</div>
</div> </div>
</div> </div>
</div> </div>
<!-- 4. Synergy: Business Segment Coordinator --> <!-- 4 -->
<div class="timeline-item" data-idx="4"> <div class="item">
<div class="timeline-dot"></div> <div class="node"></div>
<div class="timeline-card" onclick="toggleDetails(this)"> <div class="card" onclick="toggle(this)">
<div class="date">2014 2015</div> <div class="yr"><span class="seg"></span> 2014 2015</div>
<div class="role">Business Segment Coordinator</div> <div class="role">Business Segment Coordinator</div>
<div class="company">Synergy</div> <div class="co">Synergy</div>
<div class="location">Perth, WA</div> <div class="loc">Perth, WA</div>
<div class="summary">Financial and portfolio management, enterprise communications and cross-functional coordination.</div> <div class="sum">Financial and portfolio management, enterprise comms and cross-functional coordination.</div>
<button class="expand-btn"><span class="arrow"></span> <span class="lb">Show achievements</span></button> <button class="btn"><span class="ar"></span> <span class="lb">What I delivered</span></button>
<div class="details"> <div class="details">
<ul> <ul>
<li>Managed Synergy's streetlighting portfolio and resolved $1.3 million in billing discrepancies through detailed contract and process reviews</li> <li>Ran the streetlighting portfolio; resolved $1.3M in billing discrepancies</li>
<li>Introduced stronger reconciliation controls and led cross-functional input into the Annual Review of Products and Pricing</li> <li>Introduced stronger reconciliation controls; fed the Annual Review of Products &amp; Pricing</li>
<li>Developed a company-wide communications framework across email, SMS and print for 1M+ customers</li> <li>Built a company-wide comms framework (email, SMS, print) for 1M+ customers</li>
</ul> </ul>
<div class="tags"> <div class="tags"><span>Financial Mgmt</span><span>Billing</span><span>Enterprise Comms</span></div>
<span>Financial Management</span><span>Billing Resolution</span><span>Enterprise Comms</span>
</div>
</div> </div>
</div> </div>
</div> </div>
<!-- 5. Synergy: Assistant Product Manager --> <!-- 5 -->
<div class="timeline-item" data-idx="5"> <div class="item">
<div class="timeline-dot"></div> <div class="node"></div>
<div class="timeline-card" onclick="toggleDetails(this)"> <div class="card" onclick="toggle(this)">
<div class="date">2012 2014</div> <div class="yr"><span class="seg"></span> 2012 2014</div>
<div class="role">Assistant Product Manager, Industrial &amp; Commercial</div> <div class="role">Assistant Product Manager</div>
<div class="company">Synergy</div> <div class="co">Synergy · Industrial &amp; Commercial</div>
<div class="location">Perth, WA</div> <div class="loc">Perth, WA</div>
<div class="summary">Product and sales development for commercial renewable energy products, digital sales platforms and training.</div> <div class="sum">Product and sales development for commercial renewable energy products and digital sales platforms.</div>
<button class="expand-btn"><span class="arrow"></span> <span class="lb">Show achievements</span></button> <button class="btn"><span class="ar"></span> <span class="lb">What I delivered</span></button>
<div class="details"> <div class="details">
<ul> <ul>
<li>Developed and launched the Synergy Sellback Program, enabling commercial customers to receive value from exported renewable energy</li> <li>Launched the Synergy Sellback Program value for exported commercial renewables</li>
<li>Created an online sales platform with pricing calculators and training material</li> <li>Built an online sales platform with calculators and training</li>
<li>Supported sales performance 150% above target through platform and training initiatives</li> <li>Drove sales performance 150% above target</li>
</ul> </ul>
<div class="tags"> <div class="tags"><span>Product</span><span>Sellback</span><span>Digital Platform</span><span>Sales</span></div>
<span>Product Development</span><span>Sellback Program</span><span>Digital Platform</span><span>Sales Enablement</span>
</div>
</div> </div>
</div> </div>
</div> </div>
<!-- 6. Synergy: Billing Officer --> <!-- 6 -->
<div class="timeline-item" data-idx="6"> <div class="item">
<div class="timeline-dot"></div> <div class="node"></div>
<div class="timeline-card" onclick="toggleDetails(this)"> <div class="card" onclick="toggle(this)">
<div class="date">2010 2012</div> <div class="yr"><span class="seg"></span> 2010 2012</div>
<div class="role">Billing Officer</div> <div class="role">Billing Officer</div>
<div class="company">Synergy</div> <div class="co">Synergy</div>
<div class="location">Perth, WA</div> <div class="loc">Perth, WA</div>
<div class="summary">Customer billing, enquiry management, dispute resolution and data accuracy in a regulated energy retail environment.</div> <div class="sum">Customer billing, enquiry management and dispute resolution in a regulated retail environment.</div>
<button class="expand-btn"><span class="arrow"></span> <span class="lb">Show achievements</span></button> <button class="btn"><span class="ar"></span> <span class="lb">What I delivered</span></button>
<div class="details"> <div class="details">
<ul> <ul>
<li>Managed billing enquiries, account corrections and dispute resolution for residential and small business customers</li> <li>Managed billing enquiries, corrections and disputes for residential &amp; SME customers</li>
<li>Ensured data accuracy and compliance in a regulated energy retail environment</li> <li>Held data accuracy and compliance in a regulated setting</li>
</ul> </ul>
<div class="tags"> <div class="tags"><span>Customer Service</span><span>Operations</span><span>Compliance</span></div>
<span>Customer Service</span><span>Billing Operations</span><span>Dispute Resolution</span>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -485,98 +389,64 @@ a:hover{color:var(--gold)}
</div> </div>
</div> </div>
<!-- Education --> <section class="caps">
<section class="edu-section"> <h2>What I bring</h2>
<div class="caps-grid">
<span class="cap">Marketing Strategy</span>
<span class="cap">Integrated Campaigns</span>
<span class="cap">Corporate Comms</span>
<span class="cap">Digital &amp; AI Marketing</span>
<span class="cap">Brand &amp; Product</span>
<span class="cap">Stakeholder Engagement</span>
<span class="cap">Event Management</span>
<span class="cap">Budget Management</span>
<span class="cap">Social Strategy</span>
<span class="cap">Energy Transition</span>
</div>
</section>
<section class="edu">
<h2>Education</h2> <h2>Education</h2>
<div class="edu-grid"> <div class="edu-grid">
<div class="edu-card"> <div class="edu-card">
<h3>University of Western Australia</h3> <h3>University of Western Australia</h3>
<div class="detail">Bachelor of Commerce — Marketing &amp; Management</div> <div class="d">Bachelor of Commerce — Marketing &amp; Management</div>
<div class="year">2005 2010</div> <div class="y">2005 2010</div>
</div> </div>
<div class="edu-card"> <div class="edu-card">
<h3>University of Western Australia</h3> <h3>University of Western Australia</h3>
<div class="detail">Bachelor of Arts — History &amp; Politics</div> <div class="d">Bachelor of Arts — History &amp; Politics</div>
<div class="year">2005 2010</div> <div class="y">2005 2010</div>
</div> </div>
</div> </div>
</section> </section>
<!-- Professional Development -->
<section class="skills-section">
<h2>Professional Development</h2>
<div class="skills-grid">
<span class="skill-tag">IAP2 Essentials of Engagement (2023)</span>
<span class="skill-tag">AIM Time Management (2024)</span>
<span class="skill-tag">AI in Marketing — RMIT (2019)</span>
<span class="skill-tag">ADMA WFH Marketing Masterclass (2020)</span>
</div>
</section>
<!-- Core Capabilities -->
<section class="skills-section">
<h2>Core Capabilities</h2>
<div class="skills-grid">
<span class="skill-tag">Marketing Strategy</span>
<span class="skill-tag">Integrated Campaigns</span>
<span class="skill-tag">Corporate Communications</span>
<span class="skill-tag">Digital &amp; AI Marketing</span>
<span class="skill-tag">Brand Management</span>
<span class="skill-tag">Stakeholder Engagement</span>
<span class="skill-tag">Event Management</span>
<span class="skill-tag">Budget Management</span>
<span class="skill-tag">Social Media Strategy</span>
<span class="skill-tag">Energy Transition</span>
</div>
</section>
<div class="footer"> <div class="footer">
<p>Anthony Martin · <a href="https://anthony.martinwa.org" target="_blank">anthony.martinwa.org</a></p> <p>Anthony Martin · <a href="https://anthony.martinwa.org" target="_blank">anthony.martinwa.org</a></p>
<p style="margin-top:0.3rem;color:var(--text-dim)">Built by the Rhino in the Green Jacket · Jul 2026</p> <p style="margin-top:.4rem">Built by the Rhino in the Green Jacket · Jul 2026</p>
</div> </div>
<script> <script>
function toggleDetails(card){ function toggle(card){
const details=card.querySelector('.details'); const d=card.querySelector('.details'),b=card.querySelector('.btn'),l=b?.querySelector('.lb');
const btn=card.querySelector('.expand-btn'); const open=d.classList.contains('open');
const lbl=btn?.querySelector('.lb'); d.classList.toggle('open');b?.classList.toggle('open');
const isOpen=details.classList.contains('open'); if(l) l.textContent=open?'What I delivered':'Hide';
details.classList.toggle('open');
btn?.classList.toggle('open');
if(lbl) lbl.textContent=isOpen?'Show achievements':'Hide achievements';
} }
// reveal on scroll
// Scroll-triggered visibility const io=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting)e.target.classList.add('in')}),{threshold:.15});
const observer=new IntersectionObserver(entries=>{ document.querySelectorAll('.item,.cap,.edu-card').forEach(el=>io.observe(el));
entries.forEach(entry=>{ // progress line
if(entry.isIntersecting) entry.target.classList.add('visible'); const tl=document.getElementById('timeline'),prog=document.getElementById('progress');
}); addEventListener('scroll',()=>{
},{threshold:0.12,rootMargin:'0px 0px -50px 0px'}); const r=tl.getBoundingClientRect(),vh=innerHeight;
document.querySelectorAll('.timeline-item, .edu-card, .skill-tag').forEach(el=>observer.observe(el)); const total=r.height,seen=Math.min(Math.max(vh*0.5-r.top,0),total);
prog.style.height=seen+'px';
// Dot highlight on scroll },{passive:true});
const dotObserver=new IntersectionObserver(entries=>{ // keyboard
entries.forEach(entry=>{ document.querySelectorAll('.card').forEach(c=>{
const dot=entry.target.querySelector('.timeline-dot'); c.setAttribute('tabindex','0');c.setAttribute('role','button');
if(!dot) return; c.addEventListener('keydown',e=>{if(e.key==='Enter'||e.key===' '){e.preventDefault();toggle(c)}});
if(entry.isIntersecting){
dot.style.transform='translateX(-50%) scale(1.25)';
dot.style.boxShadow='0 0 0 8px rgba(212,168,67,0.15)';
} else {
dot.style.transform='';
dot.style.boxShadow='';
}
});
},{threshold:0.35});
document.querySelectorAll('.timeline-item').forEach(el=>dotObserver.observe(el));
// Keyboard support
document.querySelectorAll('.timeline-card').forEach(card=>{
card.setAttribute('tabindex','0');
card.setAttribute('role','button');
card.addEventListener('keydown',e=>{
if(e.key==='Enter'||e.key===' '){e.preventDefault();toggleDetails(card);}
});
}); });
</script> </script>
</body> </body>