<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>麺マッチ</title>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700;900&display=swap" rel="stylesheet">
<style>
:root {
  --bg: #1a0e00; --surface: #2a1800; --surface2: #3a2200;
  --accent: #ff6b00; --accent2: #ffbe00; --text: #fff8f0;
  --muted: #a07050; --border: #5a3a10; --red: #e03000;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
/* WordPress余白対策 */
html, body { margin: 0 !important; padding: 0 !important; }
.entry-content, .wp-block-group, .wp-block-cover, article, main, .site-main { padding: 0 !important; margin: 0 !important; }
@media (max-width: 768px) {
  html, body { margin: 0 !important; padding: 0 !important; }
  .entry-content > *, .wp-block-group__inner-container > * { padding: 0 !important; margin: 0 !important; }
}
body { background: var(--bg); color: var(--text); font-family: 'Noto Sans JP', sans-serif; min-height: 100vh; margin: 0; padding: 0; }
#site-header { text-align: center; padding: 0; margin: 0; line-height: 0; }
h1 { font-size: clamp(1.4rem,4vw,2.2rem); font-weight: 900; background: linear-gradient(135deg,#ffbe00,#ff6b00,#e03000); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
.tagline { color: #c8905a; font-size: 0.78rem; margin: 0.4rem 0 0; text-align: center; padding: 0 1rem; line-height: 1.4; }
.container { max-width: 660px; margin: 0 auto; padding: 0.5rem 1rem 4rem; }
.card { background: var(--surface); border: 1px solid var(--border); border-radius: 20px; padding: 1.5rem; margin-bottom: 1.2rem; position: relative; overflow: hidden; }
.card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg,var(--accent),var(--accent2)); }
.label { font-size: 0.78rem; color: var(--muted); margin-bottom: 0.7rem; }
.section-title { font-size: 0.85rem; font-weight: 700; color: var(--accent2); margin-bottom: 1rem; }

/* アンケート */
.q-block { margin-bottom: 1.2rem; }
.q-label { font-size: 0.82rem; color: var(--text); font-weight: 700; margin-bottom: 0.5rem; display: block; }
.q-options { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.q-btn { background: transparent; border: 1px solid var(--border); border-radius: 20px; padding: 0.3rem 0.8rem; font-family: inherit; font-size: 0.78rem; color: var(--muted); cursor: pointer; transition: all 0.15s; }
.q-btn:hover { border-color: var(--accent); color: var(--accent); }
.q-btn.selected { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 700; }

/* 食材入力 */
.input-row { display: flex; gap: 0.6rem; margin-bottom: 0.8rem; }
input[type=text] { flex: 1; background: var(--bg); border: 1.5px solid var(--border); border-radius: 12px; padding: 0.7rem 1rem; color: var(--text); font-family: inherit; font-size: 0.92rem; outline: none; }
input[type=text]:focus { border-color: var(--accent); }
input::placeholder { color: var(--muted); }
.btn-add { background: var(--accent); color: #fff; border: none; border-radius: 12px; padding: 0.7rem 1.2rem; font-family: inherit; font-weight: 700; font-size: 0.92rem; cursor: pointer; }
.tags { display: flex; flex-wrap: wrap; gap: 0.45rem; min-height: 2rem; margin-bottom: 0.9rem; }
.tag { display: flex; align-items: center; gap: 0.3rem; background: var(--surface2); border: 1px solid var(--border); border-radius: 20px; padding: 0.25rem 0.75rem; font-size: 0.84rem; }
.tag-x { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 1rem; line-height: 1; padding: 0; }
.quick-label { font-size: 0.75rem; color: var(--muted); margin-bottom: 0.45rem; }
.quick-tags { display: flex; flex-wrap: wrap; gap: 0.35rem; }
.quick-tag { background: transparent; border: 1px solid var(--border); border-radius: 20px; padding: 0.22rem 0.65rem; font-family: inherit; font-size: 0.75rem; color: var(--muted); cursor: pointer; transition: all 0.15s; }
.quick-tag:hover { border-color: var(--accent); color: var(--accent); }

/* 生成ボタン */
.btn-gen { width: 100%; background: linear-gradient(135deg,var(--accent),var(--red)); color: #fff; border: none; border-radius: 16px; padding: 1rem 2rem; font-family: inherit; font-size: 1rem; font-weight: 900; cursor: pointer; margin-bottom: 1.2rem; letter-spacing: 0.05em; box-shadow: 0 0 20px rgba(255,107,0,0.35); transition: all 0.2s; }
.btn-gen:hover { transform: translateY(-2px); box-shadow: 0 8px 30px rgba(255,107,0,0.5); }
.btn-gen:disabled { background: var(--surface2); color: var(--border); box-shadow: none; cursor: not-allowed; transform: none; }
.btn-gen.loading { background: linear-gradient(270deg,#ff6b00,#ffbe00,#e03000,#ff6b00) !important; background-size: 300% 300% !important; animation: btn-wave 1.5s ease infinite !important; cursor: not-allowed; color: #fff !important; opacity: 1 !important; }
@keyframes btn-wave { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} }
@keyframes loading-bar { 0%{width:0%} 50%{width:70%} 100%{width:100%} }

.loading { text-align: center; padding: 1.5rem; color: var(--muted); display: none; }
.loading.show { display: block; }

/* 結果 */
.result-card { display: none; }
.result-card.show { display: block; }

/* シェア */
.share-bar { display: flex; gap: 0.6rem; margin-top: 1.2rem; }
.btn-share { flex: 1; border: none; border-radius: 12px; padding: 0.65rem 1rem; font-family: inherit; font-size: 0.85rem; font-weight: 700; cursor: pointer; }
.btn-share-x { background: #000; color: #fff; }
.btn-share-ig { background: linear-gradient(135deg,#f09433,#e6683c,#dc2743,#cc2366,#bc1888); color: #fff; }

/* 壁打ちチャット */
.chat-section { margin-top: 1.5rem; }
.chat-title { font-size: 0.8rem; color: var(--accent2); font-weight: 700; letter-spacing: 0.1em; margin-bottom: 0.8rem; }
.chat-log { display: flex; flex-direction: column; gap: 0.7rem; margin-bottom: 0.8rem; max-height: 400px; overflow-y: auto; }
.chat-msg { padding: 0.7rem 1rem; border-radius: 14px; font-size: 0.87rem; line-height: 1.7; max-width: 90%; }
.chat-msg.ai { background: var(--surface2); color: var(--text); align-self: flex-start; border-bottom-left-radius: 4px; }
.chat-msg.user { background: var(--accent); color: #fff; align-self: flex-end; border-bottom-right-radius: 4px; }
.chat-input-row { display: flex; gap: 0.5rem; }
.chat-input { flex: 1; background: var(--bg); border: 1.5px solid var(--border); border-radius: 12px; padding: 0.6rem 0.9rem; color: var(--text); font-family: inherit; font-size: 0.87rem; outline: none; }
.chat-input:focus { border-color: var(--accent); }
.chat-send { background: var(--accent); color: #fff; border: none; border-radius: 12px; padding: 0.6rem 1rem; font-family: inherit; font-weight: 700; font-size: 0.87rem; cursor: pointer; white-space: nowrap; }
.chat-send:disabled { background: var(--surface2); color: var(--border); cursor: not-allowed; }

.error-box { color: #ff6060; font-size: 0.85rem; padding: 0.8rem; background: rgba(255,0,0,0.08); border-radius: 10px; margin-bottom: 1rem; display: none; }
.error-box.show { display: block; }
.hint { text-align: center; color: var(--border); font-size: 0.85rem; padding: 2rem; }
footer { text-align: center; color: var(--border); font-size: 0.72rem; padding: 2rem; }


</style>
</head>
<body>

<div id="site-header">
  <div style="overflow:hidden;line-height:0;"><img src="menmatchi.jpg" alt="麺マッチ" style="width:100%;max-width:600px;display:block;margin:-8% auto -5%;height:auto;"></div>
</div>

<div class="container">

  <!-- アンケートカード -->
  <div class="card" id="survey-card">
    <p class="section-title">あなたのラーメンを見つけるために教えてください</p>

    <div class="q-block">
      <span class="q-label">健康状態・制限はありますか?</span>
      <div class="q-options" id="q-health">
        <button class="q-btn" data-val="特になし">特になし</button>
        <button class="q-btn" data-val="塩分制限あり">塩分制限あり</button>
        <button class="q-btn" data-val="脂質制限あり">脂質制限あり</button>
        <button class="q-btn" data-val="アレルギーあり">アレルギーあり</button>
      </div>
    </div>

    <div class="q-block">
      <span class="q-label">味の濃さはどのくらいが好きですか?</span>
      <div class="q-options" id="q-taste">
        <button class="q-btn" data-val="薄味・あっさり">薄味・あっさり</button>
        <button class="q-btn" data-val="中間">中間</button>
        <button class="q-btn" data-val="濃いめ・こってり">濃いめ・こってり</button>
        <button class="q-btn" data-val="辛め">辛め</button>
      </div>
    </div>

    <div class="q-block">
      <span class="q-label">好きなスープのベースは?</span>
      <div class="q-options" id="q-soup">
        <button class="q-btn" data-val="醤油">醤油</button>
        <button class="q-btn" data-val="塩">塩</button>
        <button class="q-btn" data-val="味噌">味噌</button>
        <button class="q-btn" data-val="豚骨">豚骨</button>
        <button class="q-btn" data-val="鶏白湯">鶏白湯</button>
        <button class="q-btn" data-val="魚介">魚介</button>
        <button class="q-btn" data-val="なんでも">なんでも</button>
      </div>
    </div>

    <div class="q-block">
      <span class="q-label">今日の気分は?</span>
      <div class="q-options" id="q-mood">
        <button class="q-btn" data-val="元気を出したい">元気を出したい</button>
        <button class="q-btn" data-val="体を温めたい">体を温めたい</button>
        <button class="q-btn" data-val="さっぱりしたい">さっぱりしたい</button>
        <button class="q-btn" data-val="がっつり食べたい">がっつり食べたい</button>
        <button class="q-btn" data-val="癒されたい">癒されたい</button>
      </div>
    </div>

    <div class="q-block">
      <span class="q-label">カップ麺のアレンジレシピも提案してほしい?</span>
      <div class="q-options" id="q-cup">
        <button class="q-btn" data-val="はい、提案してほしい">はい、ぜひ</button>
        <button class="q-btn" data-val="いいえ">いいえ、普通のラーメンだけでOK</button>
      </div>
    </div>
  </div>

  <!-- 食材入力カード -->
  <div class="card">
    <p class="label">今ある食材を教えてください(任意)</p>
    <div class="input-row">
      <input type="text" id="ing-input" placeholder="例:卵、キャベツ、醤油...">
      <button class="btn-add" id="btn-add">追加</button>
    </div>
    <div class="tags" id="tags"></div>
    <p class="quick-label">よく使われる食材:</p>
    <div class="quick-tags" id="quick-tags"></div>
  </div>

  <button class="btn-gen" id="gen-btn">ラーメンを提案してもらう</button>

  <div id="loading-bar-wrap" style="display:none;height:6px;background:var(--surface2);border-radius:3px;margin-bottom:1.2rem;overflow:hidden;">
    <div style="height:100%;background:linear-gradient(90deg,#ff6b00,#ffbe00);border-radius:3px;animation:loading-bar 2s ease-in-out infinite;"></div>
  </div>
  <div class="loading" id="loading">
    <p style="font-size:0.9rem">あなたにぴったりのラーメンを考えています...</p>
  </div>

  <div class="error-box" id="error-box"></div>

  <div class="result-card" id="result-card"></div>

  <!-- 壁打ちチャット -->
  <div class="card chat-section" id="chat-section" style="display:none">
    <p class="chat-title">AIラーメンシェフに相談する</p>
    <p style="font-size:0.78rem;color:var(--muted);margin-bottom:0.8rem">「もっと辛くしたい」「スープの作り方を教えて」など自由に聞いてください</p>
    <div class="chat-log" id="chat-log"></div>
    <div class="chat-input-row">
      <input type="text" class="chat-input" id="chat-input" placeholder="質問や相談を入力...">
      <button class="chat-send" id="chat-send">送信</button>
    </div>
  </div>

  <div id="share-bar" class="share-bar" style="display:none">
    <button class="btn-share btn-share-x" id="btn-share-x">X でシェア</button>
    <button class="btn-share btn-share-ig" id="btn-share-ig">Instagramでシェア</button>
  </div>

  <div class="hint" id="hint">アンケートに答えてラーメンを提案してもらいましょう</div>
</div>

<footer>Powered by Claude AI x 自家製麺キリンジ</footer>

<script>
(function() {
  var PROXY_URL = './api-proxy.php';
  var QUICK_ITEMS = ['キャベツ','卵','もやし','玉ねぎ','ちくわ','カニカマ','えのき','豆腐','ツナ缶','ごま油','牛乳','キムチ','バター','チーズ','長ねぎ','にんにく','生姜','コーン','海苔','メンマ'];
  var ingredients = [];
  var survey = { health: '', taste: '', soup: '', mood: '', cup: '' };
  var chatHistory = [];
  var lastResult = '';

  // アンケート選択
  var qMap = { 'q-health': 'health', 'q-taste': 'taste', 'q-soup': 'soup', 'q-mood': 'mood', 'q-cup': 'cup' };
  Object.keys(qMap).forEach(function(groupId) {
    var key = qMap[groupId];
    document.getElementById(groupId).querySelectorAll('.q-btn').forEach(function(btn) {
      btn.addEventListener('click', function() {
        document.getElementById(groupId).querySelectorAll('.q-btn').forEach(function(b) { b.classList.remove('selected'); });
        btn.classList.add('selected');
        survey[key] = btn.dataset.val;
      });
    });
  });

  // クイックタグ
  var quickTagsEl = document.getElementById('quick-tags');
  QUICK_ITEMS.forEach(function(item) {
    var btn = document.createElement('button');
    btn.className = 'quick-tag';
    btn.textContent = item;
    btn.addEventListener('click', function() {
      var inputEl = document.getElementById('ing-input');
      var cur = inputEl.value.trim();
      inputEl.value = cur ? cur + '、' + item : item;
      inputEl.focus();
    });
    quickTagsEl.appendChild(btn);
  });

  document.getElementById('btn-add').addEventListener('click', addFromInput);
  document.getElementById('ing-input').addEventListener('keydown', function(e) { if (e.key === 'Enter') addFromInput(); });
  document.getElementById('gen-btn').addEventListener('click', generate);

  function addFromInput() {
    var val = document.getElementById('ing-input').value.trim();
    if (!val) return;
    val.split('、').concat(val.split(',')).filter(Boolean).forEach(function(v) { addByName(v.trim()); });
    document.getElementById('ing-input').value = '';
    document.getElementById('ing-input').focus();
  }

  function addByName(name) {
    if (!name || ingredients.includes(name)) return;
    ingredients.push(name);
    renderTags();
  }

  function removeIng(name) {
    ingredients = ingredients.filter(function(i) { return i !== name; });
    renderTags();
  }

  function renderTags() {
    var el = document.getElementById('tags');
    el.innerHTML = '';
    ingredients.forEach(function(name) {
      var div = document.createElement('div');
      div.className = 'tag';
      var span = document.createElement('span');
      span.textContent = name;
      var btn = document.createElement('button');
      btn.className = 'tag-x';
      btn.textContent = 'x';
      (function(n) { btn.addEventListener('click', function() { removeIng(n); }); })(name);
      div.appendChild(span);
      div.appendChild(btn);
      el.appendChild(div);
    });
  }

  // ===== ラーメン生成 =====
  async function generate() {
    var genBtn = document.getElementById('gen-btn');
    genBtn.disabled = true;
    genBtn.classList.add('loading');
    genBtn.textContent = '考えています...';
    document.getElementById('loading-bar-wrap').style.display = 'block';
    document.getElementById('loading').classList.add('show');
    document.getElementById('result-card').classList.remove('show');
    document.getElementById('result-card').innerHTML = '';
    document.getElementById('error-box').classList.remove('show');
    document.getElementById('share-bar').style.display = 'none';
    document.getElementById('chat-section').style.display = 'none';
    document.getElementById('hint').style.display = 'none';

    var surveyInfo = [
      survey.health ? '健康状態: ' + survey.health : '',
      survey.taste  ? '味の好み: ' + survey.taste  : '',
      survey.soup   ? 'スープの好み: ' + survey.soup : '',
      survey.mood   ? '今日の気分: ' + survey.mood  : '',
    ].filter(Boolean).join('、');

    var ingInfo = ingredients.length > 0 ? '\n使える食材: ' + ingredients.join('、') : '';

    var cupSection = survey.cup === 'はい、提案してほしい' ? '\n\nさらに、同じ条件に合ったカップ麺アレンジレシピを1〜2個、cup_arrangeキーに追加してください。例: "cup_arrange":[{"name":"アレンジ名","base":"ベースにするカップ麺","arrange":"アレンジ方法"}]' : '';
    var prompt = 'あなたはラーメンシェフです。以下の条件に合ったオリジナルラーメンを3種類提案してください。\n\n条件: ' + (surveyInfo || 'とくになし') + ingInfo + '\n\n以下のJSON形式だけで返答してください。コードブロックや前置きは不要でJSONのみ返してください。\n\n[{"name":"ラーメン名","soup":"スープの説明(1〜2文)","toppings":"トッピングの説明","point":"このラーメンの魅力を一言で","health_note":"健康・栄養面のアドバイスを一言で","upgrades":[{"item":"食材名","reason":"理由1文"},{"item":"食材名","reason":"理由1文"}],"side_dish":{"name":"副菜名","recipe":"調理時間3分以内の簡単レシピ(2〜3文)"}}]' + cupSection + '\n\nラーメン店主らしい熱量のある日本語でお願いします。';

    try {
      var res = await fetch(PROXY_URL, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ messages: [{ role: 'user', content: prompt }], max_tokens: 4000 })
      });
      var data = await res.json();
      if (!res.ok) throw new Error('APIエラー ' + res.status);
      var raw = (data.content || []).map(function(c) { return c.text || ''; }).join('');
      var jsonMatch = raw.match(/\[[\s\S]*\]/);
      if (!jsonMatch) throw new Error('JSONパース失敗: ' + raw.slice(0, 200));
      var list = JSON.parse(jsonMatch[0]);
      lastResult = raw;

      var resultCard = document.getElementById('result-card');
      resultCard.innerHTML = '';

      list.forEach(function(r, idx) {
        var card = document.createElement('div');
        card.className = 'card';
        card.style.marginBottom = '1.2rem';
        card.innerHTML =
          '<div style="position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,#ff6b00,#ffbe00)"></div>'
          + '<div style="font-size:0.72rem;color:#ffbe00;font-weight:700;letter-spacing:0.15em;margin-bottom:0.4rem">候補 ' + (idx+1) + '</div>'
          + '<div style="font-size:clamp(1.1rem,3vw,1.5rem);font-weight:900;color:#ffbe00;margin-bottom:0.5rem;line-height:1.2">' + (r.name||'') + '</div>'
          + '<span style="color:#ff6b00;font-weight:700;display:block;margin-top:0.6rem;margin-bottom:0.15rem;font-size:0.85rem">スープ</span>'
          + '<span style="font-size:0.88rem;line-height:1.8">' + (r.soup||'') + '</span>'
          + '<span style="color:#ff6b00;font-weight:700;display:block;margin-top:0.6rem;margin-bottom:0.15rem;font-size:0.85rem">トッピング</span>'
          + '<span style="font-size:0.88rem;line-height:1.8">' + (r.toppings||'') + '</span>'
          + '<span style="color:#ff6b00;font-weight:700;display:block;margin-top:0.6rem;margin-bottom:0.15rem;font-size:0.85rem">ポイント</span>'
          + '<span style="font-size:0.88rem;line-height:1.8">' + (r.point||'') + '</span>'
          + (r.health_note ? '<div style="background:rgba(255,190,0,0.07);border:1px solid rgba(255,190,0,0.2);border-radius:10px;padding:0.6rem 0.8rem;margin-top:0.8rem;font-size:0.82rem;color:#c8c060;line-height:1.6">健康メモ: ' + r.health_note + '</div>' : '')
          + (r.side_dish ? '<div style="background:rgba(100,200,100,0.07);border:1px solid rgba(100,200,100,0.25);border-radius:10px;padding:0.8rem;margin-top:0.8rem;"><div style="font-size:0.72rem;color:#90c060;font-weight:700;margin-bottom:0.3rem">余った食材でもう一品!</div><div style="font-size:0.88rem;font-weight:700;color:#b0e080;margin-bottom:0.3rem">' + r.side_dish.name + '</div><div style="font-size:0.82rem;line-height:1.7;color:var(--text)">' + r.side_dish.recipe + '</div></div>' : '');

        if (r.upgrades && r.upgrades.length) {
          var advDiv = document.createElement('div');
          advDiv.style.cssText = 'background:linear-gradient(135deg,rgba(255,190,0,0.05),rgba(255,107,0,0.05));border:1px solid rgba(255,190,0,0.2);border-radius:14px;padding:1rem;margin-top:0.8rem;';
          advDiv.innerHTML = '<p style="font-size:0.72rem;color:#ffbe00;font-weight:700;margin-bottom:0.6rem">もっと美味しくするヒント</p>';
          r.upgrades.forEach(function(u, i) {
            var item = document.createElement('div');
            item.style.cssText = 'font-size:0.85rem;line-height:1.6;' + (i > 0 ? 'margin-top:0.4rem;padding-top:0.4rem;border-top:1px solid rgba(255,190,0,0.1)' : '');
            item.innerHTML = '<strong style="color:#ffbe00">' + u.item + '</strong>: ' + u.reason;
            advDiv.appendChild(item);
          });
          card.appendChild(advDiv);
        }
        resultCard.appendChild(card);
      });

      // カップ麺アレンジ表示
      if (survey.cup === 'はい、提案してほしい') {
        var cupData = null;
        try {
          var cupMatch = raw.match(/"cup_arrange"\s*:\s*(\[[\s\S]*?\])/);
          if (cupMatch) cupData = JSON.parse(cupMatch[1]);
        } catch(e) {}
        if (cupData && cupData.length) {
          var cupCard = document.createElement('div');
          cupCard.className = 'card';
          cupCard.style.marginBottom = '1.2rem';
          cupCard.innerHTML = '<div style="position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,#ff6b00,#ffbe00)"></div>'
            + '<div style="font-size:0.72rem;color:#ffbe00;font-weight:700;letter-spacing:0.1em;margin-bottom:0.8rem">カップ麺アレンジレシピ</div>';
          cupData.forEach(function(c, i) {
            var div = document.createElement('div');
            div.style.cssText = i > 0 ? 'margin-top:1rem;padding-top:1rem;border-top:1px solid rgba(255,190,0,0.1)' : '';
            div.innerHTML = '<div style="font-size:1rem;font-weight:900;color:#ffbe00;margin-bottom:0.4rem">' + c.name + '</div>'
              + '<div style="font-size:0.82rem;color:var(--muted);margin-bottom:0.3rem">ベース: ' + c.base + '</div>'
              + '<div style="font-size:0.87rem;line-height:1.7">' + c.arrange + '</div>';
            cupCard.appendChild(div);
          });
          resultCard.appendChild(cupCard);
        }
      }

      resultCard.classList.add('show');
      document.getElementById('share-bar').style.display = 'flex';
      document.getElementById('chat-section').style.display = 'block';

      // 壁打ちチャットの初期メッセージ
      chatHistory = [{ role: 'assistant', content: 'ラーメンの提案はいかがでしたか?スープの作り方、アレンジ方法、栄養バランスなど、なんでも聞いてください!' }];
      renderChat();

    } catch(e) {
      var eb = document.getElementById('error-box');
      eb.textContent = 'エラー: ' + (e.message || String(e));
      eb.classList.add('show');
    } finally {
      document.getElementById('loading').classList.remove('show');
      document.getElementById('loading-bar-wrap').style.display = 'none';
      genBtn.disabled = false;
      genBtn.classList.remove('loading');
      genBtn.textContent = 'ラーメンを提案してもらう';
    }
  }

  // ===== 壁打ちチャット =====
  function renderChat() {
    var log = document.getElementById('chat-log');
    log.innerHTML = '';
    chatHistory.forEach(function(msg) {
      var div = document.createElement('div');
      div.className = 'chat-msg ' + (msg.role === 'user' ? 'user' : 'ai');
      div.textContent = msg.content;
      log.appendChild(div);
    });
    log.scrollTop = log.scrollHeight;
  }

  document.getElementById('chat-input').addEventListener('keydown', function(e) { if (e.key === 'Enter') sendChat(); });
  document.getElementById('chat-send').addEventListener('click', sendChat);

  async function sendChat() {
    var input = document.getElementById('chat-input');
    var msg = input.value.trim();
    if (!msg) return;

    input.value = '';
    var sendBtn = document.getElementById('chat-send');
    sendBtn.disabled = true;
    sendBtn.textContent = '...';

    chatHistory.push({ role: 'user', content: msg });
    renderChat();

    var systemPrompt = 'あなたはラーメン店主のAIアシスタントです。以下のラーメン提案結果をベースに、ユーザーの質問や相談に答えてください。\n\n提案結果:\n' + lastResult + '\n\n親しみやすく、熱量のある日本語で答えてください。200文字以内で簡潔に。';
    var messages = [{ role: 'user', content: systemPrompt }];
    chatHistory.forEach(function(m) { messages.push(m); });

    try {
      var res = await fetch(PROXY_URL, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ messages: messages, max_tokens: 400 })
      });
      var data = await res.json();
      var reply = (data.content || []).map(function(c) { return c.text || ''; }).join('');
      chatHistory.push({ role: 'assistant', content: reply });
      renderChat();
    } catch(e) {
      chatHistory.push({ role: 'assistant', content: '申し訳ありません、エラーが発生しました。' });
      renderChat();
    } finally {
      sendBtn.disabled = false;
      sendBtn.textContent = '送信';
    }
  }

  // ===== SNSシェア =====
  document.getElementById('btn-share-x').addEventListener('click', function() {
    var text = '麺マッチで自分にぴったりのラーメンを見つけた! #麺マッチ #自家製麺キリンジ';
    var url = 'https://jikaseimenkirinji.com/menmatchi.html';
    window.open('https://twitter.com/intent/tweet?text=' + encodeURIComponent(text) + '&url=' + encodeURIComponent(url), '_blank');
  });

  document.getElementById('btn-share-ig').addEventListener('click', function() {
    var url = 'https://jikaseimenkirinji.com/menmatchi.html';
    if (navigator.clipboard) {
      navigator.clipboard.writeText(url).then(function() { alert('URLをコピーしました!Instagramに貼り付けてください。'); });
    } else {
      alert('URL: ' + url);
    }
  });

})();
</script>
</body>
</html>

コメント