Files
Stride/design/navigation-mockups.html

23 lines
18 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"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Stride · Navigation concepts</title>
<style>
*{box-sizing:border-box}body{margin:0;background:#101416;color:#eeeae4;font:14px "Segoe UI",sans-serif}button,select{font:inherit;color:inherit;cursor:pointer}button{border:0}a{color:inherit;text-decoration:none}.studio{background:#22282b;padding:18px 5%;border-bottom:1px solid #41484a}.studio-top{display:flex;justify-content:space-between;align-items:center;gap:20px}.studio h1{font-size:18px;margin:0 0 4px}.studio p{margin:0;color:#aeb8bb;font-size:12px}.controls{display:flex;gap:7px;flex-wrap:wrap;margin-top:16px}.controls button,.view button{background:#30383b;padding:9px 13px;border-radius:5px;color:#b7c1c3}.controls button.active,.view button.active{background:#ff956a;color:#171b1d}.view{display:flex;gap:5px}.concept-note{display:flex;gap:16px;align-items:center;padding:18px 5%;background:#181d20;color:#aeb8bb;font-size:13px;line-height:1.6}.concept-note strong{color:#eeeae4;white-space:nowrap}.shell{max-width:1320px;margin:auto;padding:0 40px 40px}.header{height:90px;display:flex;align-items:center;gap:36px;border-bottom:1px solid #303638}.logo{font-size:29px;font-weight:750;letter-spacing:-1.5px;display:flex;align-items:center;gap:9px}.logo b{font-size:27px;background:#ff8659;color:#161a1c;border-radius:5px;width:32px;height:32px;text-align:center;font-style:italic}.logo i{color:#ff8659;font-style:normal}.nav{display:flex;gap:28px;height:100%;align-items:center}.nav button{background:none;color:#aab5b7;height:100%;position:relative;padding:0}.nav button.current{color:#eeeae4}.nav button.current:after{content:"";height:2px;background:#ff956a;position:absolute;bottom:0;left:0;right:0}.header-tools{margin-left:auto;display:flex;align-items:center;gap:12px}.primary{background:#ff8659;color:#161a1c;border-radius:5px;padding:11px 16px;font-weight:600;font-size:12px}.avatar{border:1px solid #4b5154;background:#302924;border-radius:50%;width:35px;height:35px;color:#ffc6ab}.secondary{background:#242b2e;color:#c9d0d1;border:1px solid #3b4549;border-radius:5px;padding:10px 14px}.runner-picker{position:relative}.picker-button{background:#242b2e;border:1px solid #3b4549;border-radius:6px;padding:10px 15px}.popup{position:absolute;top:48px;right:0;width:245px;background:#242b2e;border:1px solid #485154;padding:8px;border-radius:8px;z-index:4;box-shadow:0 10px 40px #0008}.popup button{display:block;width:100%;background:none;text-align:left;padding:11px;border-radius:4px}.popup button:hover{background:#343d40}.popup small{display:block;color:#aab5b7;margin-top:3px}.intro{display:flex;justify-content:space-between;align-items:center;margin:30px 0 22px}.intro h2{font-size:33px;letter-spacing:-1px;margin:0 0 6px}.intro p{color:#a0aaac;margin:0;font-size:13px}.tag{display:inline-flex;align-items:center;gap:6px;color:#b8cbbb;background:#202b25;border:1px solid #3f5145;border-radius:5px;font-size:11px;padding:7px 10px}.back{color:#f3ad8d;font-size:12px;display:inline-block;margin-bottom:12px;background:none;padding:0}.route{height:230px;border:1px solid #30383b;background:#181f22;border-radius:8px;position:relative;overflow:hidden}.route svg{width:100%;height:100%;position:absolute;inset:0}.route-label{position:relative;padding:25px;max-width:45%;z-index:1}.eyebrow{font-size:9px;letter-spacing:1.8px;color:#a0aaac;margin-bottom:12px}.route h3{font-size:28px;margin:0 0 12px;font-weight:600}.route p{color:#aab5b7;font-size:12px}.route a{color:#f3ad8d;font-size:12px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:20px 0}.stat{padding:19px 21px;background:#1a1f22;border:1px solid #303638;border-radius:7px}.stat:first-child{background:#24211f;border-color:#72503e}.stat strong{display:block;font-size:32px;font-weight:500;margin-top:8px;letter-spacing:-1px}.stat:first-child strong{color:#ff9a74}.stat small{font-size:12px;color:#a8b2b4;margin-left:5px;letter-spacing:0}.stat p{font-size:11px;color:#9ea9ac;margin:5px 0 0}.chart-panel{display:grid;grid-template-columns:3fr 1fr;gap:16px}.panel{border:1px solid #303638;border-radius:7px;background:#1a1f22;padding:20px 23px}.panel h3{margin:0;font-size:17px;font-weight:600}.panel-head{display:flex;justify-content:space-between}.panel-head span{font-size:11px;color:#a0aaac}.bars{height:120px;display:flex;align-items:end;gap:7%;padding:12px 15px 0;border-bottom:1px solid #485154;margin-top:10px}.bars i{flex:1;background:#596367}.bars i:last-child{background:#ff956a}.axis{display:flex;justify-content:space-around;font-size:9px;color:#a0aaac;margin:9px 0 0}.ascent strong{font-weight:400;font-size:40px;color:#ff9a74;display:block;margin-top:8px}.ascent svg{width:100%;height:40px;margin-top:15px}.badges{display:flex;flex-wrap:wrap;gap:8px;margin:21px 0}.badge{display:flex;align-items:center;gap:10px;padding:8px 11px;border:1px solid #886b34;border-radius:6px;background:#30291e;font-size:12px}.badge em{color:#f3cb78;font-style:normal;font-size:11px}.badge strong{font-size:15px}.badge small{font-size:10px;font-weight:400}.history{padding:0;overflow:hidden}.history .panel-head{padding:20px 23px}.row{display:grid;grid-template-columns:minmax(160px,3fr) 1fr 1fr 1fr 1fr;gap:12px;padding:17px 23px;border-top:1px solid #303638;align-items:center;font-size:12px}.row small{display:block;color:#9ea9ac;font-size:10px;margin-top:5px}.row.head{font-size:9px;color:#a0aaac;letter-spacing:1px;padding:10px 23px}.visibility{font-size:10px;background:#29342d;color:#bdd0bd;border:1px solid #3a4a40;border-radius:4px;padding:4px 8px;width:max-content}.private{background:#272c30;color:#b2bbbd;border-color:#41494d}.friends-page{display:none;padding:32px 0}.friends-heading{display:flex;justify-content:space-between;align-items:center}.friend-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:15px;margin:25px 0}.friend-card{background:#1a1f22;border:1px solid #3c4548;border-radius:8px;text-align:left;padding:24px;cursor:pointer}.friend-card h3{font-size:19px;margin:14px 0 5px}.friend-card p{color:#a0aaac;font-size:12px;margin:0 0 22px}.friend-card span{color:#f3ad8d;font-size:12px}.account-menu{position:relative}.account-menu .popup{top:45px}.mobile-nav{display:none}.minimal .header{height:75px}.minimal .nav{margin-left:auto}.minimal .header-tools{margin-left:0}.minimal .nav{gap:16px}.minimal .nav button.current:after{display:none}.minimal .nav button{padding:9px 12px;height:auto;border-radius:5px}.minimal .nav button.current{background:#292f32}.runner-mode .nav{display:none}.runner-mode .header-tools{gap:16px}.runner-mode .header{height:80px}[hidden]{display:none!important}button:focus-visible,a:focus-visible{outline:2px solid #ff956a;outline-offset:4px}
@media(max-width:700px){.studio{padding:16px}.studio-top{align-items:start;flex-direction:column;gap:12px}.concept-note{padding:14px 16px;display:block}.concept-note strong{display:block}.shell{padding:0 16px 25px}.header{height:72px;gap:20px}.logo{font-size:23px}.logo b{width:28px;height:28px;font-size:23px}.nav{gap:16px}.header-tools .primary{display:none}.header-tools{gap:7px}.intro h2{font-size:28px}.intro{align-items:start}.tag{font-size:10px}.stats{grid-template-columns:repeat(2,1fr);gap:10px}.stat{padding:15px}.stat strong{font-size:29px}.chart-panel{grid-template-columns:1fr}.ascent{display:none}.route{height:215px}.route-label{max-width:65%;padding:20px}.route h3{font-size:23px}.row{grid-template-columns:minmax(130px,2fr) 1fr 1fr;padding:15px;gap:8px}.row>:nth-child(3),.row>:nth-child(5){display:none}.panel-head{gap:10px}.friend-cards{grid-template-columns:1fr}.header .nav{display:none}.mobile-nav{display:flex;gap:20px;border-bottom:1px solid #303638;padding:14px 0}.mobile-nav button{background:none;color:#b8c3c5;padding:0;font-size:12px}.picker-button{font-size:11px;padding:9px}.runner-mode .mobile-nav{display:none}.minimal .mobile-nav{justify-content:flex-end}.intro p{max-width:260px;line-height:1.6}.concept-note{font-size:12px}}
</style>
<div class="studio"><div class="studio-top"><div><h1>Stride / Navigation concepts</h1><p>Interactive mockups · sample data · app unchanged</p></div><div class="view"><button class="active" data-view="own">My dashboard</button><button data-view="friend">Friend’s dashboard</button></div></div><div class="controls"><button class="active" data-concept="tabs">A · Top navigation</button><button data-concept="runner">B · Runner switcher</button><button data-concept="minimal">C · Minimal header</button></div></div>
<div class="concept-note"><strong id="concept-title">A · Top navigation</strong><span id="concept-description">Dashboard and Friends stay visible. Imports and account settings move into the top bar. Familiar navigation, more room for your runs.</span></div>
<div class="shell" id="shell"><header class="header"><a class="logo" href="#" id="home"><b>s</b>stride<i>.</i></a><nav class="nav"><button class="current" data-page="dashboard">Dashboard</button><button data-page="friends">Friends <small>3</small></button></nav><div class="header-tools"><div class="runner-picker" id="runner-picker" hidden><button class="picker-button" id="picker-toggle">My dashboard ▾</button><div class="popup" id="picker-menu" hidden><button data-person="own">My dashboard<small>All your runs</small></button><button data-person="friend">Alex Morgan<small>Friend · shared runs</small></button><button data-page="friends">Manage friends →</button></div></div><button class="primary" id="import">+ Import run</button><div class="account-menu"><button class="avatar" id="account-toggle" aria-label="Account menu">P</button><div class="popup" id="account-popup" hidden><button>Settings & Garmin sync</button><button>Import runs</button><button>Sign out</button></div></div></div></header><nav class="mobile-nav"><button data-page="dashboard">Dashboard</button><button data-page="friends">Friends · 3</button><button id="mobile-import">+ Import</button></nav>
<div id="dashboard"><div class="intro"><div><button class="back" id="back-friends" hidden>← Friends</button><h2 id="page-title">Your running</h2><p id="page-subtitle">Distance, effort, and your recent sessions.</p></div><span class="tag" id="friend-tag" hidden>✓ Friends · Shared runs</span></div>
<div class="route"><svg viewBox="0 0 1100 230" preserveAspectRatio="xMidYMid slice"><g stroke="#2b3439" stroke-width="1" fill="none"><path d="M420 0V230M520 0V230M650 0V230M800 0V230M920 0V230M350 40H1100M350 100H1100M350 170H1100"/><path d="M400 230L1100 0M480 0L1000 230"/></g><path d="M630 172L627 60L735 48L815 88L898 65L922 135L826 180L744 165L710 104L630 172" fill="none" stroke="#ff956a" stroke-width="3" stroke-linejoin="round"/><circle cx="630" cy="172" r="6" fill="#eeeae4" stroke="#ff956a" stroke-width="3"/></svg><div class="route-label"><div class="eyebrow">LATEST RUN</div><h3>Morning riverside</h3><p>2 Oct 2026 · 8.20 km</p><a href="#">View run →</a></div></div>
<div class="stats"><div class="stat"><div class="eyebrow">DISTANCE LOGGED</div><strong><span id="distance">186.4</span><small>km</small></strong><p class="scope">Across all your activities</p></div><div class="stat"><div class="eyebrow">ACTIVITIES</div><strong id="count">24</strong><p>Recorded sessions</p></div><div class="stat"><div class="eyebrow">TIME ON YOUR FEET</div><strong id="duration">18:42:10</strong><p>Total recorded timer time</p></div><div class="stat"><div class="eyebrow">AVERAGE PACE</div><strong><span id="pace">6:01</span><small>/km</small></strong><p>Weighted by distance</p></div></div>
<div class="chart-panel"><section class="panel"><div class="panel-head"><h3>Training volume</h3><span>Last 8 weeks</span></div><div class="bars"><i style="height:28%"></i><i style="height:50%"></i><i style="height:40%"></i><i style="height:67%"></i><i style="height:48%"></i><i style="height:83%"></i><i style="height:65%"></i><i style="height:53%"></i></div><div class="axis"><span>10 Aug</span><span>17 Aug</span><span>24 Aug</span><span>31 Aug</span><span>7 Sep</span><span>14 Sep</span><span>21 Sep</span><span>28 Sep</span></div></section><section class="panel ascent"><div class="eyebrow">TOTAL ASCENT</div><strong><span id="ascent">1,420</span><small>m</small></strong><svg viewBox="0 0 240 40"><path d="M0 35L25 20L40 28L65 6L85 22L110 3L135 29L160 16L190 32L215 22L240 37" fill="none" stroke="#cc8868"/></svg></section></div>
<div class="badges" aria-label="Personal records"><span class="badge"><em>★</em> 1 km <strong>4:12<small>/km</small></strong></span><span class="badge"><em>★</em> 2 km <strong>4:26<small>/km</small></strong></span><span class="badge"><em>★</em> 5 km <strong>4:48<small>/km</small></strong></span><span class="badge"><em>★</em> 10 km <strong>5:03<small>/km</small></strong></span></div>
<section class="panel history"><div class="panel-head"><h3 id="history-title">Your activities</h3><span id="history-count">24 activities</span></div><div class="row head"><span>ACTIVITY</span><span>DISTANCE</span><span>TIME</span><span>AVG. PACE</span><span>VISIBILITY</span></div><div class="row"><span><b>Morning riverside</b><small>2 Oct 2026 · Running</small></span><b>8.20 km</b><span>46:44</span><span>5:42 /km</span><span class="visibility">Friends</span></div><div class="row" id="private-row"><span><b>Recovery jog</b><small>30 Sep 2026 · Running</small></span><b>3.40 km</b><span>23:14</span><span>6:50 /km</span><span class="visibility private">Private</span></div><div class="row"><span><b>Sunday long run</b><small>27 Sep 2026 · Running</small></span><b>14.60 km</b><span>1:25:10</span><span>5:50 /km</span><span class="visibility">Friends</span></div></section></div>
<div class="friends-page" id="friends-page"><div class="friends-heading"><div><h2 style="font-size:30px;margin:0">Your circle</h2><p style="color:#a0aaac">Open a friend’s dashboard to catch up on their running.</p></div><button class="primary" id="add-friend">+ Add friend</button></div><div class="friend-cards"><button class="friend-card" data-person="friend"><div class="avatar" style="display:grid;place-items:center">A</div><h3>Alex Morgan</h3><p>Latest run · Today</p><span>View dashboard →</span></button><button class="friend-card" data-person="friend"><div class="avatar" style="display:grid;place-items:center">J</div><h3>Jamie Lee</h3><p>Latest run · Yesterday</p><span>View dashboard →</span></button><button class="friend-card" data-person="friend"><div class="avatar" style="display:grid;place-items:center">S</div><h3>Sam Rivera</h3><p>Latest run · Monday</p><span>View dashboard →</span></button></div><p style="color:#a0aaac;font-size:12px">Friend requests and connection management live here.</p></div>
<p id="demo-message" hidden style="color:#f3ad8d;padding:15px 0" role="status"></p></div>
<script>
const $=id=>document.getElementById(id);let view='own',concept='tabs';const notes={tabs:['A · Top navigation','Dashboard and Friends stay visible. Imports and account settings move into the top bar. Familiar navigation, more room for your runs.'],runner:['B · Runner switcher','One dashboard surface: switch between yourself and accepted friends. Switch quickly between runners, with friends management inside the picker.'],minimal:['C · Minimal header','Small, quiet navigation beside the logo. Your runs take the focus; Friends stays one click away and account tools sit under your avatar.']};
function setView(next,name='Alex Morgan'){view=next;const friend=view==='friend';$('page-title').textContent=friend?name+'’s running':'Your running';$('page-subtitle').textContent=friend?'Activities shared with friends.':'Distance, effort, and your recent sessions.';$('friend-tag').hidden=!friend;$('back-friends').hidden=!friend;$('import').hidden=friend;$('mobile-import').hidden=friend;$('private-row').hidden=friend;$('distance').textContent=friend?'148.2':'186.4';$('count').textContent=friend?'18':'24';$('duration').textContent=friend?'14:12:10':'18:42:10';$('pace').textContent=friend?'5:45':'6:01';$('ascent').textContent=friend?'1,120':'1,420';document.querySelector('.scope').textContent=friend?'Across shared activities':'Across all your activities';$('history-title').textContent=friend?'Shared activities':'Your activities';$('history-count').textContent=friend?'18 shared activities':'24 activities';$('picker-toggle').textContent=(friend?name:'My dashboard')+' ▾';document.querySelectorAll('[data-view]').forEach(b=>b.classList.toggle('active',b.dataset.view===view));$('dashboard').hidden=false;$('friends-page').style.display='none';$('picker-menu').hidden=true;document.querySelectorAll('[data-page]').forEach(b=>b.classList.toggle('current',b.dataset.page==='dashboard'));$('demo-message').hidden=true}
function showFriends(){$('dashboard').hidden=true;$('friends-page').style.display='block';$('picker-menu').hidden=true;document.querySelectorAll('[data-page]').forEach(b=>b.classList.toggle('current',b.dataset.page==='friends'))}
document.querySelectorAll('[data-view]').forEach(b=>b.onclick=()=>setView(b.dataset.view));document.querySelectorAll('[data-concept]').forEach(b=>b.onclick=()=>{concept=b.dataset.concept;$('shell').className='shell '+(concept==='runner'?'runner-mode':concept==='minimal'?'minimal':'');$('runner-picker').hidden=concept!=='runner';$('concept-title').textContent=notes[concept][0];$('concept-description').textContent=notes[concept][1];document.querySelectorAll('[data-concept]').forEach(x=>x.classList.toggle('active',x===b))});document.querySelectorAll('[data-page]').forEach(b=>b.onclick=()=>b.dataset.page==='friends'?showFriends():setView('own'));document.querySelectorAll('[data-person]').forEach(b=>b.onclick=()=>setView(b.dataset.person,b.querySelector('h3')?.textContent||'Alex Morgan'));$('back-friends').onclick=showFriends;$('home').onclick=e=>{e.preventDefault();setView('own')};$('picker-toggle').onclick=()=>$('picker-menu').hidden=!$('picker-menu').hidden;$('account-toggle').onclick=()=>$('account-popup').hidden=!$('account-popup').hidden;document.querySelectorAll('#account-popup button,#import,#mobile-import,#add-friend,.route a').forEach(b=>b.onclick=e=>{e.preventDefault();$('demo-message').textContent='Mockup only — '+b.textContent.trim()+' opens the corresponding app screen.';$('demo-message').hidden=false;$('account-popup').hidden=true});
</script></html>