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