Files
job-dashboard/timeline.html

454 lines
22 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Career Arc · Anthony Martin</title>
<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:#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',system-ui,sans-serif;
background:var(--bg);color:var(--ink);
-webkit-font-smoothing:antialiased;line-height:1.6;
overflow-x:hidden;
}
::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{
min-height:100vh;
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 .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-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 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 .stats{
display:flex;flex-wrap:wrap;gap:2.5rem;margin-top:3rem;
opacity:0;animation:rise .8s ease .5s both;
}
.hero .stats .stat .num{
font-family:'Fraunces',serif;font-size:2.2rem;font-weight:600;color:var(--ink);
line-height:1;
}
.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 ═══════════ */
.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;
}
.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%);
}
/* 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;
}
.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}
.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{
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;
}
.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);
}
.item:nth-child(odd) .card::after{right:-32px}
.item:nth-child(even) .card::after{left:-32px}
.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;
}
.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;
}
.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}
/* ═══════════ 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(--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}
.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)}
@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}}
@media(prefers-reduced-motion:reduce){
*,*::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}
.hero .stats{gap:1.6rem}
}
</style>
</head>
<body>
<section class="hero">
<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="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>
<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>
<!-- 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="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>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>Events</span></div>
</div>
</div>
</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="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 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>Campaigns</span><span>$2M+ Budget</span><span>WA EV Network</span><span>Energy Transition</span></div>
</div>
</div>
</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="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 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 Mgmt</span><span>CRO</span></div>
</div>
</div>
</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="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>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 Mgmt</span><span>Billing</span><span>Enterprise Comms</span></div>
</div>
</div>
</div>
<!-- 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>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</span><span>Sellback</span><span>Digital Platform</span><span>Sales</span></div>
</div>
</div>
</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="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, 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>Operations</span><span>Compliance</span></div>
</div>
</div>
</div>
</div>
</div>
<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="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="d">Bachelor of Arts — History &amp; Politics</div>
<div class="y">2005 2010</div>
</div>
</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:.4rem">Built by the Rhino in the Green Jacket · Jul 2026</p>
</div>
<script>
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';
}
// 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>
</html>