-
世界,您好!
欢迎使用 WordPress! …
欢迎使用 WordPress! …
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>GlobalGestures.com</title> <style> :root { --cream: #fff7e6; --cream-dark: #f4dfb5; --brown: #3d2a16; --soft-brown: #725436; --red: #d8342a; --red-dark: #9d1f18; --white: #ffffff; --shadow: 0 18px 40px rgba(61, 42, 22, 0.18); --radius: 24px; } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: Arial, Helvetica, sans-serif; background: var(--cream); color: var(--brown); line-height: 1.6; } header { padding: 24px 7%; display: flex; align-items: center; justify-content: space-between; gap: 20px; position: sticky; top: 0; background: rgba(255, 247, 230, 0.92); backdrop-filter: blur(10px); z-index: 20; border-bottom: 1px solid rgba(61, 42, 22, 0.08); } .logo { font-size: 1.4rem; font-weight: 800; letter-spacing: 0.5px; } .logo span { color: var(--red); } nav { display: flex; gap: 18px; flex-wrap: wrap; } nav a { color: var(--brown); text-decoration: none; font-weight: 600; font-size: 0.95rem; } nav a:hover { color: var(--red); } .hero { min-height: 86vh; padding: 72px 7% 50px; display: grid; grid-template-columns: 1fr 1.15fr; gap: 48px; align-items: center; } .hero-text h1 { font-size: clamp(2.4rem, 6vw, 5.3rem); line-height: 0.95; margin-bottom: 24px; letter-spacing: -2px; } .hero-text h1 span { color: var(--red); } .hero-text p { font-size: 1.1rem; max-width: 560px; color: var(--soft-brown); margin-bottom: 28px; } .hero-actions { display: flex; gap: 14px; flex-wrap: wrap; } .button { border: none; border-radius: 999px; padding: 13px 22px; font-weight: 700; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; justify-content: center; transition: transform 0.2s ease, box-shadow 0.2s ease; } .button:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(61, 42, 22, 0.18); } .primary { background: var(--red); color: white; } .secondary { background: white; color: var(--brown); border: 1px solid rgba(61, 42, 22, 0.12); } .map-card { background: linear-gradient(135deg, #fff9ee, #f5ddaa); border-radius: var(--radius); padding: 28px; box-shadow: var(--shadow); border: 1px solid rgba(61, 42, 22, 0.08); } .map-card h2 { margin-bottom: 6px; font-size: 1.35rem; } .map-card p { color: var(--soft-brown); margin-bottom: 18px; font-size: 0.98rem; } .world-map { position: relative; width: 100%; aspect-ratio: 16 / 9; border-radius: 20px; overflow: hidden; background: radial-gradient(circle at 19% 40%, #c6dca9 0 10%, transparent 11%), radial-gradient(circle at 33% 35%, #c6dca9 0 8%, transparent 9%), radial-gradient(circle at 53% 42%, #c6dca9 0 15%, transparent 16%), radial-gradient(circle at 69% 34%, #c6dca9 0 12%, transparent 13%), radial-gradient(circle at 78% 62%, #c6dca9 0 7%, transparent 8%), linear-gradient(180deg, #bfe5ff, #dff4ff); border: 3px solid white; } .world-map::before { content: ""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.25) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.25) 1px, transparent 1px); background-size: 40px 40px; opacity: 0.7; } .pin { position: absolute; width: 22px; height: 22px; background: var(--red); border: 3px solid white; border-radius: 50% 50% 50% 0; transform: rotate(-45deg); cursor: pointer; z-index: 3; box-shadow: 0 8px 16px rgba(80, 0, 0, 0.25); animation: pulse 2.4s infinite; } .pin span { position: absolute; transform: rotate(45deg) translateY(-34px); background: white; color: var(--brown); padding: 5px 8px; border-radius: 999px; font-size: 0.72rem; font-weight: 700; white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity 0.2s ease; box-shadow: 0 6px 14px rgba(61, 42, 22, 0.15); } .pin:hover span { opacity: 1; } @keyframes pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(216, 52, 42, 0.35); } 50% { box-shadow: 0 0 0 12px rgba(216, 52, 42, 0); } } .section { padding: 82px 7%; } .section-title { max-width: 720px; margin-bottom: 34px; } .section-title h2 { font-size: clamp(2rem, 4vw, 3.5rem); line-height: 1; margin-bottom: 12px; } .section-title p { color: var(--soft-brown); font-size: 1.05rem; } .features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } .feature-card { background: white; border-radius: 22px; padding: 24px; box-shadow: 0 12px 28px rgba(61, 42, 22, 0.08); border: 1px solid rgba(61, 42, 22, 0.08); } .feature-card .icon { font-size: 2rem; margin-bottom: 12px; } .feature-card h3 { margin-bottom: 8px; font-size: 1.15rem; } .feature-card p { color: var(--soft-brown); font-size: 0.95rem; } .culture-area { background: #fff0cf; } .flashcard-preview { display: grid; grid-template-columns: 0.95fr 1.05fr; gap: 28px; align-items: stretch; } .culture-list { display: grid; gap: 12px; } .culture-button { width: 100%; border: 1px solid rgba(61, 42, 22, 0.1); background: white; border-radius: 18px; padding: 18px; text-align: left; cursor: pointer; color: var(--brown); font-weight: 700; display: flex; justify-content: space-between; align-items: center; transition: transform 0.2s ease, background 0.2s ease; } .culture-button:hover, .culture-button.active { background: var(--brown); color: white; transform: translateX(4px); } .flashcard { background: white; border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow); min-height: 520px; border: 1px solid rgba(61, 42, 22, 0.08); } .flashcard-hero { min-height: 210px; padding: 24px; color: white; display: flex; align-items: flex-end; position: relative; overflow: hidden; } .flashcard-hero::before { content: ""; position: absolute; inset: 0; background: var(--pattern); opacity: 0.38; } .flashcard-hero h3 { position: relative; font-size: 2.2rem; line-height: 1; text-shadow: 0 4px 14px rgba(0,0,0,0.3); } .flashcard-content { padding: 26px; } .tag-row { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 18px; } .tag { background: #fff2d2; color: var(--brown); padding: 6px 10px; border-radius: 999px; font-size: 0.78rem; font-weight: 700; } .info-block { margin-bottom: 18px; } .info-block h4 { font-size: 0.98rem; margin-bottom: 6px; color: var(--red-dark); } .info-block p { color: var(--soft-brown); font-size: 0.96rem; } .edit-bar { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding-top: 10px; border-top: 1px solid rgba(61, 42, 22, 0.1); } .small-note { font-size: 0.82rem; color: var(--soft-brown); } .edit-panel { display: none; margin-top: 16px; padding: 16px; background: #fff7e6; border-radius: 16px; border: 1px dashed rgba(61, 42, 22, 0.25); } .edit-panel.show { display: block; } .edit-panel label { display: block; margin-bottom: 6px; font-weight: 700; font-size: 0.88rem; } .edit-panel textarea, .edit-panel input { width: 100%; border: 1px solid rgba(61, 42, 22, 0.18); border-radius: 12px; padding: 10px; margin-bottom: 10px; font-family: inherit; background: white; } .instagram-section { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; align-items: center; } .insta-card { background: white; border-radius: 28px; box-shadow: var(--shadow); overflow: hidden; max-width: 430px; justify-self: center; border: 1px solid rgba(61, 42, 22, 0.08); } .insta-header { padding: 16px; display: flex; align-items: center; gap: 10px; border-bottom: 1px solid rgba(61, 42, 22, 0.08); } .avatar { width: 38px; height: 38px; border-radius: 50%; background: var(--red); color: white; display: grid; place-items: center; font-weight: 800; } .insta-image { aspect-ratio: 1 / 1; background: radial-gradient(circle at 70% 20%, rgba(216, 52, 42, 0.22), transparent 24%), radial-gradient(circle at 22% 72%, rgba(61, 42, 22, 0.18), transparent 25%), linear-gradient(135deg, #fff7e6, #f4dfb5); display: grid; place-items: center; text-align: center; padding: 38px; } .insta-image h3 { font-size: 2.4rem; line-height: 1; margin-bottom: 12px; } .insta-caption { padding: 16px; color: var(--soft-brown); } .footer { padding: 42px 7%; background: var(--brown); color: #fff7e6; display: flex; justify-content: space-between; gap: 18px; flex-wrap: wrap; } .modal { position: fixed; inset: 0; background: rgba(0,0,0,0.48); display: none; place-items: center; padding: 20px; z-index: 50; } .modal.show { display: grid; } .modal-card { background: white; border-radius: 24px; padding: 26px; width: min(520px, 100%); box-shadow: var(--shadow); } .modal-card h3 { margin-bottom: 8px; } .modal-card p { color: var(--soft-brown); margin-bottom: 18px; } .modal-actions { display: flex; justify-content: flex-end; gap: 10px; flex-wrap: wrap; } @media (max-width: 900px) { header { align-items: flex-start; flex-direction: column; } .hero, .flashcard-preview, .instagram-section { grid-template-columns: 1fr; } .features-grid { grid-template-columns: 1fr 1fr; } } @media (max-width: 620px) { .hero { padding-top: 42px; } .features-grid { grid-template-columns: 1fr; } .world-map { aspect-ratio: 1 / 0.82; } nav { gap: 12px; } } </style></head><body> <header> <div class="logo">Global<span>Gestures</span>.com</div> <nav aria-label="Main navigation"> <a href="#map">Map</a> <a href="#features">Features</a> <a href="#cultures">Cultures</a> <a href="#share">Instagram</a> </nav> </header> <main> <section class="hero" id="map"> <div class="hero-text"> <h1>Learn culture through <span>small gestures</span>.</h1> <p> GlobalGestures.com helps people in Australia understand cultural gestures, meanings, and social habits through a simple interactive map and easy flashcards. </p> <div class="hero-actions"> <a class="button primary" href="#cultures">Explore cultures</a> <a class="button secondary" href="#features">See features</a> </div> </div> <div class="map-card"> <h2>Interactive world map</h2> <p>Click a red pin to open a culture flashcard.</p> <div class="world-map" aria-label="Interactive world map with country pins"> <button class="pin" style="left: 72%; top: 42%;" data-country="Japan" aria-label="Open Japan flashcard"><span>Japan</span></button> <button class="pin" style="left: 65%; top: 45%;" data-country="China" aria-label="Open China flashcard"><span>China</span></button> <button class="pin" style="left: 60%; top: 54%;" data-country="India" aria-label="Open India flashcard"><span>India</span></button> <button class="pin" style="left: 50%; top: 38%;" data-country="Italy" aria-label="Open Italy flashcard"><span>Italy</span></button> <button class="pin" style="left: 48%; top: 42%;" data-country="Greece" aria-label="Open Greece flashcard"><span>Greece</span></button> <button class="pin" style="left: 78%; top: 67%;" data-country="Australia" aria-label="Open Australia flashcard"><span>Australia</span></button> </div> </div> </section> <section class="section" id="features"> <div class="section-title"> <h2>Key website features</h2> <p>The site is designed to be simple, visual, interactive, and easy for different users to understand.</p> </div> <div class="features-grid"> <article class="feature-card"> <div class="icon">🗺️</div> <h3>Clickable world map</h3> <p>Users select a country by clicking a red map pin, making the site feel visual and easy to use.</p> </article> <article class="feature-card"> <div class="icon">🎴</div> <h3>Culture flashcards</h3> <p>Each country has a flashcard showing gestures, meaning, cultural tips, and related news.</p> </article> <article class="feature-card"> <div class="icon">🎨</div> <h3>Culture-based aesthetics</h3> <p>Each flashcard uses colours, patterns, and images that match the culture it introduces.</p> </article> <article class="feature-card"> <div class="icon">✍️</div> <h3>Verified edit system</h3> <p>A mock edit button allows approved users to suggest updates, keeping the information fresh.</p> </article> <article class="feature-card"> <div class="icon">📱</div> <h3>Instagram promotion</h3> <p>The visual style can continue on Instagram so users recognise the brand across platforms.</p> </article> <article class="feature-card"> <div class="icon">🧠</div> <h3>Low cognitive load</h3> <p>The layout avoids too much text at once, so users only see the information they choose.</p> </article> </div> </section> <section class="section culture-area" id="cultures"> <div class="section-title"> <h2>Culture flashcards</h2> <p>Choose a culture below. The flashcard changes based on the country selected.</p> </div> <div class="flashcard-preview"> <div class="culture-list" id="cultureList"></div> <article class="flashcard" aria-live="polite"> <div class="flashcard-hero" id="cardHero"> <h3 id="cardTitle">Japan</h3> </div> <div class="flashcard-content"> <div class="tag-row" id="tagRow"></div> <div class="info-block"> <h4>Common gesture</h4> <p id="gestureText"></p> </div> <div class="info-block"> <h4>What it can mean</h4> <p id="meaningText"></p> </div> <div class="info-block"> <h4>Social tip</h4> <p id="tipText"></p> </div> <div class="edit-bar"> <span class="small-note">Verified contributors can suggest new information.</span> <button class="button primary" id="editButton">Edit</button> </div> <div class="edit-panel" id="editPanel"> <label for="editName">Contributor name</label> <input id="editName" type="text" placeholder="Enter your name" /> <label for="editSuggestion">Suggested update</label> <textarea id="editSuggestion" rows="4" placeholder="Add a new gesture, cultural tip, or news update..."></textarea> <button class="button secondary" id="submitSuggestion">Submit suggestion</button> </div> </div> </article> </div> </section> <section class="section" id="share"> <div class="instagram-section"> <div class="section-title"> <h2>Cross-platform promotion</h2> <p> The same warm background, flashcard layout, and cultural theme can be used on Instagram posts. This makes the website and social media page feel connected. </p> <a class="button primary" href="#map">Back to map</a> </div> <div class="insta-card" aria-label="Instagram post example"> <div class="insta-header"> <div class="avatar">G</div> <strong>@globalgestures</strong> </div> <div class="insta-image"> <div> <h3>Do gestures mean the same thing everywhere?</h3> <p>Tap the map. Learn the culture. Avoid awkward mistakes.</p> </div> </div> <div class="insta-caption"> <strong>GlobalGestures</strong> A quick guide to cultural gestures in Australia’s multicultural community. </div> </div> </div> </section> </main> <footer class="footer"> <p><strong>GlobalGestures.com</strong> — promoting inclusion through cultural understanding.</p> <p>Designed for people living, studying, and working in Australia.</p> </footer> <div class="modal" id="modal"> <div class="modal-card"> <h3 id="modalTitle">Suggestion submitted</h3> <p id="modalText">Thank you. Your update would be reviewed by a verified moderator before being published.</p> <div class="modal-actions"> <button class="button primary" id="closeModal">Close</button> </div> </div> </div> <script> const cultures = { Japan: { tags: ["Respect", "Bowing", "East Asia"], gesture: "Bowing is often used when greeting, thanking, apologising, or showing respect.", meaning: "The depth and length of the bow can show different levels of politeness and formality.", tip: "A small bow or polite nod can be a respectful response, especially in formal situations.", background: "linear-gradient(135deg, rgba(160, 0, 20, 0.9), rgba(239, 147, 147, 0.8)), radial-gradient(circle at 22% 42%, white 0 13%, transparent 14%)", pattern: "repeating-linear-gradient(45deg, rgba(255,255,255,0.35) 0 8px, transparent 8px 18px)" }, China: { tags: ["Greeting", "Respect", "Family"], gesture: "A light handshake or nod is common in many modern social and professional settings.", meaning: "Respect can be shown through polite distance, careful wording, and attention to seniority.", tip: "Avoid being too loud or too physically familiar when meeting someone for the first time.", background: "linear-gradient(135deg, rgba(171, 22, 22, 0.95), rgba(245, 184, 65, 0.86))", pattern: "radial-gradient(circle, rgba(255,255,255,0.35) 0 2px, transparent 3px) 0 0 / 24px 24px" }, India: { tags: ["Namaste", "Respect", "South Asia"], gesture: "The namaste gesture is made by placing both palms together near the chest.", meaning: "It can mean hello, goodbye, thank you, or respect, depending on the situation.", tip: "This gesture is useful because it is polite and does not require physical contact.", background: "linear-gradient(135deg, rgba(255, 135, 35, 0.95), rgba(31, 122, 70, 0.82))", pattern: "repeating-radial-gradient(circle at center, rgba(255,255,255,0.38) 0 3px, transparent 4px 18px)" }, Italy: { tags: ["Expression", "Conversation", "Europe"], gesture: "Hand gestures are often used while speaking to add emotion, emphasis, or humour.", meaning: "The same gesture can change meaning depending on facial expression and tone.", tip: "Watch the full context instead of copying a gesture without understanding it first.", background: "linear-gradient(135deg, rgba(33, 135, 84, 0.92), rgba(220, 50, 47, 0.86))", pattern: "linear-gradient(90deg, rgba(255,255,255,0.35) 0 33%, transparent 33% 66%, rgba(255,255,255,0.22) 66%)" }, Greece: { tags: ["Body language", "History", "Europe"], gesture: "Open-palm gestures can be sensitive in some contexts and should be used carefully.", meaning: "Some gestures that seem normal in one culture may feel rude in another.", tip: "When unsure, choose simple spoken language and friendly facial expression instead.", background: "linear-gradient(135deg, rgba(33, 105, 176, 0.95), rgba(130, 190, 235, 0.86))", pattern: "repeating-linear-gradient(0deg, rgba(255,255,255,0.36) 0 8px, transparent 8px 18px)" }, Australia: { tags: ["Multicultural", "Community", "Inclusion"], gesture: "A friendly wave, smile, or casual greeting is common in many everyday spaces.", meaning: "Australia includes many cultures, so meanings can change depending on background and context.", tip: "Ask politely if you are not sure. Curiosity with respect is better than guessing.", background: "linear-gradient(135deg, rgba(46, 111, 164, 0.92), rgba(238, 184, 92, 0.86))", pattern: "radial-gradient(circle at 30% 30%, rgba(255,255,255,0.35) 0 4px, transparent 5px), radial-gradient(circle at 70% 70%, rgba(255,255,255,0.28) 0 5px, transparent 6px)" } }; const cultureList = document.getElementById("cultureList"); const cardTitle = document.getElementById("cardTitle"); const cardHero = document.getElementById("cardHero"); const tagRow = document.getElementById("tagRow"); const gestureText = document.getElementById("gestureText"); const meaningText = document.getElementById("meaningText"); const tipText = document.getElementById("tipText"); const editButton = document.getElementById("editButton"); const editPanel = document.getElementById("editPanel"); const submitSuggestion = document.getElementById("submitSuggestion"); const modal = document.getElementById("modal"); const closeModal = document.getElementById("closeModal"); function renderCulture(country) { const data = cultures[country]; cardTitle.textContent = country; cardHero.style.background = data.background; cardHero.style.setProperty("--pattern", data.pattern); gestureText.textContent = data.gesture; meaningText.textContent = data.meaning; tipText.textContent = data.tip; tagRow.innerHTML = data.tags.map(tag => `<span class="tag">${tag}</span>`).join(""); editPanel.classList.remove("show"); document.querySelectorAll(".culture-button").forEach(button => { button.classList.toggle("active", button.dataset.country === country); }); document.getElementById("cultures").scrollIntoView({ behavior: "smooth", block: "start" }); } Object.keys(cultures).forEach(country => { const button = document.createElement("button"); button.className = "culture-button"; button.dataset.country = country; button.innerHTML = `<span>${country}</span><span>→</span>`; button.addEventListener("click", () => renderCulture(country)); cultureList.appendChild(button); }); document.querySelectorAll(".pin").forEach(pin => { pin.addEventListener("click", () => renderCulture(pin.dataset.country)); }); editButton.addEventListener("click", () => { editPanel.classList.toggle("show"); }); submitSuggestion.addEventListener("click", () => { modal.classList.add("show"); document.getElementById("editName").value = ""; document.getElementById("editSuggestion").value = ""; editPanel.classList.remove("show"); }); closeModal.addEventListener("click", () => modal.classList.remove("show")); modal.addEventListener("click", event => { if (event.target === modal) modal.classList.remove("show"); }); renderCulture("Japan"); </script></body></html>