| | <!DOCTYPE html> |
| | <html lang="ko"> |
| | <head> |
| | <meta charset="UTF-8"> |
| | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | <title>PinkFriend - μ±ν
</title> |
| | <link rel="icon" type="image/x-icon" href="/static/favicon.ico"> |
| | <script src="https://cdn.tailwindcss.com"></script> |
| | <link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet"> |
| | <script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script> |
| | <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> |
| | <script src="https://unpkg.com/feather-icons"></script> |
| | <style> |
| | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap'); |
| | |
| | body { |
| | font-family: 'Noto Sans KR', sans-serif; |
| | background: linear-gradient(135deg, #FFB6C1 0%, #FFC0CB 50%, #FF69B4 100%); |
| | min-height: 100vh; |
| | } |
| | |
| | .shimmer-btn { |
| | background: linear-gradient(45deg, #FF69B4, #FFB6C1, #FF69B4); |
| | background-size: 200% 200%; |
| | animation: shimmer 2s ease infinite; |
| | box-shadow: 0 4px 15px rgba(255, 105, 180, 0.3); |
| | transition: all 0.3s ease; |
| | } |
| | |
| | .shimmer-btn:hover { |
| | transform: translateY(-2px); |
| | box-shadow: 0 6px 20px rgba(255, 105, 180, 0.4); |
| | } |
| | |
| | @keyframes shimmer { |
| | 0% { background-position: 0% 50%; } |
| | 50% { background-position: 100% 50%; } |
| | 100% { background-position: 0% 50%; } |
| | } |
| | |
| | .glow-effect { |
| | box-shadow: 0 0 10px rgba(255, 182, 193, 0.5), |
| | 0 0 20px rgba(255, 192, 203, 0.3), |
| | 0 0 30px rgba(255, 105, 180, 0.2); |
| | } |
| | |
| | .chat-card { |
| | transition: all 0.3s ease; |
| | border-radius: 16px; |
| | overflow: hidden; |
| | } |
| | |
| | .chat-card:hover { |
| | transform: translateY(-2px); |
| | box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1); |
| | } |
| | |
| | .message-bubble { |
| | max-width: 70%; |
| | border-radius: 18px; |
| | padding: 12px 16px; |
| | margin: 4px 0; |
| | position: relative; |
| | word-wrap: break-word; |
| | } |
| | |
| | .message-bubble.sent { |
| | background: linear-gradient(45deg, #FF69B4, #FFB6C1); |
| | color: white; |
| | margin-left: auto; |
| | border-bottom-right-radius: 4px; |
| | } |
| | |
| | .message-bubble.received { |
| | background: white; |
| | color: #333; |
| | margin-right: auto; |
| | border-bottom-left-radius: 4px; |
| | } |
| | |
| | .chat-container { |
| | height: calc(100vh - 200px); |
| | overflow-y: auto; |
| | padding-bottom: 80px; |
| | } |
| | |
| | |
| | ::-webkit-scrollbar { |
| | width: 6px; |
| | } |
| | |
| | ::-webkit-scrollbar-track { |
| | background: rgba(255, 255, 255, 0.2); |
| | border-radius: 10px; |
| | } |
| | |
| | ::-webkit-scrollbar-thumb { |
| | background: rgba(255, 105, 180, 0.5); |
| | border-radius: 10px; |
| | } |
| | |
| | ::-webkit-scrollbar-thumb:hover { |
| | background: rgba(255, 105, 180, 0.7); |
| | } |
| | |
| | .typing-indicator { |
| | display: inline-flex; |
| | align-items: center; |
| | justify-content: center; |
| | } |
| | |
| | .typing-indicator span { |
| | height: 8px; |
| | width: 8px; |
| | background: #FF69B4; |
| | border-radius: 50%; |
| | display: inline-block; |
| | margin: 0 2px; |
| | animation: typing 1.5s infinite; |
| | } |
| | |
| | .typing-indicator span:nth-child(2) { |
| | animation-delay: 0.2s; |
| | } |
| | |
| | .typing-indicator span:nth-child(3) { |
| | animation-delay: 0.4s; |
| | } |
| | |
| | @keyframes typing { |
| | 0%, 100% { transform: translateY(0); } |
| | 50% { transform: translateY(-5px); } |
| | } |
| | </style> |
| | </head> |
| | <body class="min-h-screen flex flex-col"> |
| | |
| | <nav class="bg-white bg-opacity-90 backdrop-blur-md py-4 px-6 flex justify-between items-center sticky top-0 z-50 glow-effect"> |
| | <div class="flex items-center"> |
| | <a href="friends.html" class="mr-3 text-pink-500"> |
| | <i data-feather="arrow-left" class="w-5 h-5"></i> |
| | </a> |
| | <div class="w-10 h-10 rounded-full bg-pink-200 flex items-center justify-center mr-3"> |
| | <span class="text-xl">π©</span> |
| | </div> |
| | <div> |
| | <h1 class="text-lg font-bold text-pink-600">μ§ν</h1> |
| | <p class="text-xs text-gray-500 typing-indicator"> |
| | <span></span><span></span><span></span> |
| | </p> |
| | </div> |
| | </div> |
| | <div class="flex space-x-4"> |
| | <button class="p-2 rounded-full bg-pink-100 text-pink-600 hover:bg-pink-200 transition-colors"> |
| | <i data-feather="phone"></i> |
| | </button> |
| | <button class="p-2 rounded-full bg-pink-100 text-pink-600 hover:bg-pink-200 transition-colors"> |
| | <i data-feather="video"></i> |
| | </button> |
| | </div> |
| | </nav> |
| |
|
| | |
| | <main class="flex-1 container mx-auto px-4 py-4"> |
| | <div class="chat-container space-y-3" id="chatMessages"> |
| | |
| | <div class="message-bubble received" data-aos="fade-right"> |
| | μλ
νμΈμ! κ°μ΄ μ»€νΌ λ§μ€λμ? β |
| | </div> |
| | |
| | |
| | <div class="message-bubble sent" data-aos="fade-left" data-aos-delay="100"> |
| | λ€, μ’μμ! μ΄λμ λ§λ κΉμ? π |
| | </div> |
| | |
| | |
| | <div class="message-bubble received" data-aos="fade-right" data-aos-delay="200"> |
| | μ€νλ²
μ€ κ°λ¨μ μΌλ‘ μ€μλ©΄ λ κ² κ°μμ! π― |
| | </div> |
| | |
| | |
| | <div class="message-bubble sent" data-aos="fade-left" data-aos-delay="300"> |
| | μκ² μ΅λλ€! 30λΆ νμ λ§λμ~ β° |
| | </div> |
| | |
| | |
| | <div class="message-bubble received" data-aos="fade-right" data-aos-delay="400"> |
| | λ€! κΈ°λν κ²μ π |
| | </div> |
| | </div> |
| | </main> |
| |
|
| | |
| | <div class="bg-white bg-opacity-90 backdrop-blur-md py-3 px-4 sticky bottom-0 z-50 glow-effect"> |
| | <div class="flex items-center space-x-2"> |
| | <button class="p-2 rounded-full bg-pink-100 text-pink-600 hover:bg-pink-200 transition-colors" onclick="toggleEmojiPicker()"> |
| | <i data-feather="smile" class="w-5 h-5"></i> |
| | </button> |
| | <input type="text" placeholder="λ©μμ§λ₯Ό μ
λ ₯νμΈμ..." |
| | class="flex-1 bg-gray-100 rounded-full px-4 py-2 focus:outline-none focus:ring-2 focus:ring-pink-300" id="messageInput"> |
| | <button class="shimmer-btn p-3 rounded-full text-white" onclick="sendMessage()"> |
| | <i data-feather="send" class="w-5 h-5"></i> |
| | </button> |
| | </div> |
| | |
| | |
| | <div id="emojiPicker" class="hidden bg-white rounded-xl p-3 mt-2 shadow-lg"> |
| | <div class="grid grid-cols-8 gap-2 text-xl"> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('β€οΈ')">β€οΈ</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π’')">π’</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π‘')">π‘</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π€')">π€</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π΄')">π΄</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π₯°')">π₯°</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π€©')">π€©</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π₯Ί')">π₯Ί</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('β¨')">β¨</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π₯')">π₯</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('πΆ')">πΆ</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | <span class="cursor-pointer hover:bg-pink-100 rounded p-1 text-center" onclick="addEmoji('π')">π</span> |
| | </div> |
| | </div> |
| | </div> |
| |
|
| | |
| | <div class="bg-white bg-opacity-90 backdrop-blur-md py-3 px-8 flex justify-around items-center sticky bottom-16 z-40 glow-effect"> |
| | <a href="index.html" class="flex flex-col items-center text-gray-400"> |
| | <i data-feather="map-pin" class="w-6 h-6"></i> |
| | <span class="text-xs mt-1">μ§λ</span> |
| | </a> |
| | <a href="friends.html" class="flex flex-col items-center text-gray-400"> |
| | <i data-feather="users" class="w-6 h-6"></i> |
| | <span class="text-xs mt-1">μΉκ΅¬</span> |
| | </a> |
| | <a href="chat.html" class="flex flex-col items-center text-pink-500"> |
| | <i data-feather="message-circle" class="w-6 h-6"></i> |
| | <span class="text-xs mt-1">μ±ν
</span> |
| | </a> |
| | <a href="profile.html" class="flex flex-col items-center text-gray-400"> |
| | <i data-feather="user" class="w-6 h-6"></i> |
| | <span class="text-xs mt-1">νλ‘ν</span> |
| | </a> |
| | </div> |
| |
|
| | <script> |
| | |
| | AOS.init({ |
| | duration: 800, |
| | once: true, |
| | offset: 50 |
| | }); |
| | |
| | |
| | feather.replace(); |
| | |
| | |
| | function scrollToBottom() { |
| | const chatContainer = document.getElementById('chatMessages'); |
| | chatContainer.scrollTop = chatContainer.scrollHeight; |
| | } |
| | |
| | |
| | window.addEventListener('load', scrollToBottom); |
| | |
| | |
| | const messageInput = document.getElementById('messageInput'); |
| | |
| | messageInput.addEventListener('keypress', function(e) { |
| | if (e.key === 'Enter') { |
| | sendMessage(); |
| | } |
| | }); |
| | |
| | function sendMessage() { |
| | const message = messageInput.value.trim(); |
| | if (message) { |
| | const messageElement = document.createElement('div'); |
| | messageElement.className = 'message-bubble sent'; |
| | messageElement.innerHTML = message.replace(/\n/g, '<br>'); |
| | messageElement.setAttribute('data-aos', 'fade-left'); |
| | |
| | document.getElementById('chatMessages').appendChild(messageElement); |
| | messageInput.value = ''; |
| | |
| | |
| | document.getElementById('emojiPicker').classList.add('hidden'); |
| | |
| | |
| | setTimeout(scrollToBottom, 100); |
| | |
| | |
| | setTimeout(simulateReply, 1500); |
| | } |
| | } |
| | |
| | |
| | function toggleEmojiPicker() { |
| | const emojiPicker = document.getElementById('emojiPicker'); |
| | emojiPicker.classList.toggle('hidden'); |
| | } |
| | |
| | function addEmoji(emoji) { |
| | const input = document.getElementById('messageInput'); |
| | input.value += emoji; |
| | input.focus(); |
| | } |
| | |
| | function simulateReply() { |
| | const replies = [ |
| | "λ€, μκ² μ΅λλ€! π", |
| | "μ¬λ―Έμκ² λ€μ! π", |
| | "μ’μμ! κ·Έλ κ² ν κ²μ π", |
| | "κ³ λ§μμ! κΈ°λλ κ² κ°μμ β¨", |
| | "μκ² μ΅λλ€! λ§λμ λ°κ°μμ π" |
| | ]; |
| | |
| | const randomReply = replies[Math.floor(Math.random() * replies.length)]; |
| | |
| | const replyElement = document.createElement('div'); |
| | replyElement.className = 'message-bubble received'; |
| | replyElement.textContent = randomReply; |
| | replyElement.setAttribute('data-aos', 'fade-right'); |
| | |
| | document.getElementById('chatMessages').appendChild(replyElement); |
| | scrollToBottom(); |
| | } |
| | </script> |
| | </body> |
| | </html> |