Full vanilla HTML/CSS/JS consumer app with mobile-first responsive design. Pages: feed (index), post meal, trades, messages inbox, chat, landing page, and admin login skeleton. Uses Ava's design tokens throughout. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
185 lines
8.4 KiB
HTML
185 lines
8.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>GrubFlip — Messages</title>
|
|
<meta name="theme-color" content="#FF6B35">
|
|
<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=Plus+Jakarta+Sans:wght@600;700;800&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="css/styles.css">
|
|
<link rel="stylesheet" href="css/chat.css">
|
|
</head>
|
|
<body>
|
|
|
|
<!-- Header -->
|
|
<header class="gf-header">
|
|
<div class="gf-header__logo">Grub<span>Flip</span></div>
|
|
<div class="gf-header__actions">
|
|
<button class="btn-icon" aria-label="New message">
|
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 013 3L7 19l-4 1 1-4L16.5 3.5z"/></svg>
|
|
</button>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- Messages Inbox -->
|
|
<main class="messages-inbox">
|
|
<div class="container">
|
|
|
|
<!-- Search Bar -->
|
|
<div class="chat-search">
|
|
<svg class="chat-search__icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
|
|
<input type="text" class="chat-search__input" placeholder="Search conversations..." aria-label="Search conversations">
|
|
</div>
|
|
|
|
<!-- Active Trade Context Banner -->
|
|
<div class="trade-context-banner">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M7 16l-4-4m0 0l4-4m-4 4h18M17 8l4 4m0 0l-4 4m4-4H3"/></svg>
|
|
<span>3 active trade chats</span>
|
|
</div>
|
|
|
|
<!-- Conversation List -->
|
|
<ul class="conversation-list" role="list" aria-label="Conversations">
|
|
|
|
<!-- Unread conversation -->
|
|
<li class="conversation-item conversation-item--unread" role="listitem">
|
|
<a href="chat.html" class="conversation-item__link">
|
|
<div class="conversation-item__avatar">
|
|
<img src="img/avatar-placeholder.svg" alt="" width="48" height="48">
|
|
<span class="conversation-item__online" aria-label="Online"></span>
|
|
</div>
|
|
<div class="conversation-item__content">
|
|
<div class="conversation-item__header">
|
|
<h3 class="conversation-item__name">Marcus J.</h3>
|
|
<time class="conversation-item__time">2m</time>
|
|
</div>
|
|
<p class="conversation-item__preview">Sounds good! I can meet at the corner of 5th and Main around 6pm 👍</p>
|
|
<div class="conversation-item__meta">
|
|
<span class="conversation-item__trade-tag">
|
|
🍕 Margherita → 🍜 Pad Thai
|
|
</span>
|
|
<span class="conversation-item__badge" aria-label="2 unread messages">2</span>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</li>
|
|
|
|
<!-- Unread conversation -->
|
|
<li class="conversation-item conversation-item--unread" role="listitem">
|
|
<a href="chat.html" class="conversation-item__link">
|
|
<div class="conversation-item__avatar">
|
|
<img src="img/avatar-placeholder.svg" alt="" width="48" height="48">
|
|
</div>
|
|
<div class="conversation-item__content">
|
|
<div class="conversation-item__header">
|
|
<h3 class="conversation-item__name">Priya K.</h3>
|
|
<time class="conversation-item__time">15m</time>
|
|
</div>
|
|
<p class="conversation-item__preview">Hey! Is your butter chicken still available? I've got fresh naan and tikka that I made tonight</p>
|
|
<div class="conversation-item__meta">
|
|
<span class="conversation-item__trade-tag">
|
|
🍗 Butter Chicken → 🫓 Naan & Tikka
|
|
</span>
|
|
<span class="conversation-item__badge" aria-label="1 unread message">1</span>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</li>
|
|
|
|
<!-- Read conversation -->
|
|
<li class="conversation-item" role="listitem">
|
|
<a href="chat.html" class="conversation-item__link">
|
|
<div class="conversation-item__avatar">
|
|
<img src="img/avatar-placeholder.svg" alt="" width="48" height="48">
|
|
<span class="conversation-item__online" aria-label="Online"></span>
|
|
</div>
|
|
<div class="conversation-item__content">
|
|
<div class="conversation-item__header">
|
|
<h3 class="conversation-item__name">Alex R.</h3>
|
|
<time class="conversation-item__time">1h</time>
|
|
</div>
|
|
<p class="conversation-item__preview">Trade completed! Thanks for the amazing tacos 🌮🔥</p>
|
|
<div class="conversation-item__meta">
|
|
<span class="conversation-item__trade-tag conversation-item__trade-tag--complete">
|
|
✅ Trade completed
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</li>
|
|
|
|
<!-- Read conversation -->
|
|
<li class="conversation-item" role="listitem">
|
|
<a href="chat.html" class="conversation-item__link">
|
|
<div class="conversation-item__avatar">
|
|
<img src="img/avatar-placeholder.svg" alt="" width="48" height="48">
|
|
</div>
|
|
<div class="conversation-item__content">
|
|
<div class="conversation-item__header">
|
|
<h3 class="conversation-item__name">Sofia M.</h3>
|
|
<time class="conversation-item__time">3h</time>
|
|
</div>
|
|
<p class="conversation-item__preview">I'll check if I still have some left after my shift ends at 10</p>
|
|
<div class="conversation-item__meta">
|
|
<span class="conversation-item__trade-tag">
|
|
🥘 Ramen → 🌯 Burrito Bowl
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</li>
|
|
|
|
<!-- Read conversation -->
|
|
<li class="conversation-item" role="listitem">
|
|
<a href="chat.html" class="conversation-item__link">
|
|
<div class="conversation-item__avatar">
|
|
<img src="img/avatar-placeholder.svg" alt="" width="48" height="48">
|
|
</div>
|
|
<div class="conversation-item__content">
|
|
<div class="conversation-item__header">
|
|
<h3 class="conversation-item__name">Chris T.</h3>
|
|
<time class="conversation-item__time">Yesterday</time>
|
|
</div>
|
|
<p class="conversation-item__preview">No worries, maybe next time!</p>
|
|
<div class="conversation-item__meta">
|
|
<span class="conversation-item__trade-tag conversation-item__trade-tag--expired">
|
|
⏰ Trade expired
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</main>
|
|
|
|
<!-- Bottom Nav -->
|
|
<nav class="gf-bottom-nav" aria-label="Main navigation">
|
|
<a href="index.html" class="gf-bottom-nav__item">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
|
|
Feed
|
|
</a>
|
|
<a href="post.html" class="gf-bottom-nav__item">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="16"/><line x1="8" y1="12" x2="16" y2="12"/></svg>
|
|
Post
|
|
</a>
|
|
<a href="messages.html" class="gf-bottom-nav__item active" aria-current="page">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>
|
|
Chat
|
|
<span class="gf-bottom-nav__badge">3</span>
|
|
</a>
|
|
<a href="trades.html" class="gf-bottom-nav__item">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M7 16l-4-4m0 0l4-4m-4 4h18M17 8l4 4m0 0l-4 4m4-4H3"/></svg>
|
|
Trades
|
|
</a>
|
|
<button class="gf-bottom-nav__item" aria-label="Profile">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
|
|
Profile
|
|
</button>
|
|
</nav>
|
|
|
|
</body>
|
|
</html>
|