<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>対話 &#8211; Tranquilvæj</title>
	<atom:link href="https://tranquilguides.com/tag/dialogue/feed/" rel="self" type="application/rss+xml" />
	<link>https://tranquilguides.com</link>
	<description>心地よい暮らしの始め方</description>
	<lastBuildDate>Tue, 14 Jul 2026 07:07:11 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://tranquilguides.com/wp-content/uploads/2026/01/cropped-IMG_3364-32x32.jpeg</url>
	<title>対話 &#8211; Tranquilvæj</title>
	<link>https://tranquilguides.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">251661265</site>	<item>
		<title>世界の歩き方診断</title>
		<link>https://tranquilguides.com/world-walking/</link>
					<comments>https://tranquilguides.com/world-walking/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Fri, 10 Jul 2026 17:09:53 +0000</pubDate>
				<category><![CDATA[生存ログ]]></category>
		<category><![CDATA[価値観]]></category>
		<category><![CDATA[対話]]></category>
		<category><![CDATA[思考]]></category>
		<category><![CDATA[生き方]]></category>
		<category><![CDATA[自己分析]]></category>
		<category><![CDATA[自己理解]]></category>
		<category><![CDATA[記録]]></category>
		<category><![CDATA[診断]]></category>
		<category><![CDATA[道具]]></category>
		<guid isPermaLink="false">https://tranquilguides.com/?p=1402</guid>

					<description><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_015325-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>世界の見え方は、人それぞれ違います。この診断は性格を分類するものではなく、いまのあなたが「世界とどのような距離で向き合っているか」を見つめるための小さな装置です。12の問いを歩きながら、あなただけの歩き方を探してみてください。]]></description>
										<content:encoded><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_015325-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>
<!--
世界の歩き方診断 / Version 6.0
WordPress（SWELL）の「カスタムHTML」ブロックへ、このコードを丸ごと貼り付けてください。

更新点
- h1〜h6は使わず、cl- プレフィックスの専用クラスのみでUIを構築
- ボタン群を2列レイアウトへ整理
- 「結果と記録をコピー」をボタン群の最上位へ移動
- 「再診断（入口へ戻る）」に統合
- 結果をシェアを復活し、X / Threads向けテキスト共有と併存
- 角丸・透過四隅のPNG画像保存へ刷新
- 画像保存は iPhone / iPad では共有、Mac / PC ではダウンロード＋新規タブ fallback
- results.image を直接指定可能
- 未指定なら IMAGE_PATH + key + 拡張子 で自動解決
-->

<div class="cl-worldwalk" id="clWorldWalk">
  <section class="cl-screen cl-screen-intro" id="clIntro">
    <div class="cl-kicker">A Way Through the World</div>
    <div class="cl-title-hero">世界の歩き方診断</div>

    <div class="cl-lead">
      <p>知らない町で一日を過ごします。</p>
      <p>何を見るか。どこへ曲がるか。</p>
      <p>誰かとどう関わり、何を持ち帰るか。</p>
    </div>

    <div class="cl-note">
      <p>12の情景で選んだ道から、</p>
      <p>あなたの歩き方を見つけます。</p>
      <p>これは性格を診断するものではありません。</p>
    </div>

    <button class="cl-btn cl-btn-main" id="clStartBtn" type="button">歩きはじめる</button>
    <div class="cl-duration">約3〜5分</div>
  </section>

  <section class="cl-screen cl-screen-quiz" id="clQuiz" hidden="">
    <div class="cl-quiz-head">
      <button class="cl-back" id="clBackBtn" type="button">← 戻る</button>
      <div class="cl-progress" id="clProgress">01 / 12</div>
    </div>

    <div class="cl-progress-line"><span id="clProgressBar"></span></div>

    <div class="cl-time" id="clTimeLabel">朝</div>
    <div class="cl-title-question" id="clQuestion"></div>
    <div class="cl-scene-text" id="clSceneText"></div>

    <div class="cl-options" id="clOptions"></div>
  </section>

  <section class="cl-screen cl-screen-result" id="clResult" hidden="">
    <div class="cl-kicker">Your Way Through the World</div>

    <article class="cl-result-card">
      <div class="cl-result-image" id="clResultImage" aria-hidden="true"></div>

      <div class="cl-result-body">
        <div class="cl-result-prefix">あなたは今日、世界を</div>
        <div class="cl-title-result" id="clResultTitle"></div>
        <div class="cl-result-subtitle" id="clResultSubtitle"></div>

        <div class="cl-divider"></div>

        <div class="cl-result-text" id="clResultText"></div>

        <details class="cl-score-details">
          <summary>歩いた道を見る</summary>
          <div class="cl-score-list" id="clScoreList"></div>
        </details>

        <div class="cl-reflection">
          <div class="cl-reflection-label">今日持ち帰る問い</div>
          <div class="cl-reflection-question" id="clResultQuestion"></div>
        </div>

        <div class="cl-record-box">
          <label class="cl-record-label" for="clRecordText">今日の記録</label>
          <textarea id="clRecordText" rows="6" placeholder="いま残しておきたいことを、ここに書いてください。"></textarea>
        </div>
      </div>
    </article>

    <div class="cl-actions">
      <button class="cl-btn" id="clCopyBtn" type="button">結果と記録をコピー</button>
      <button class="cl-btn" id="clShareBtn" type="button">結果をシェア</button>
      <button class="cl-btn" id="clTextShareBtn" type="button">X / Threadsへ共有</button>
      <button class="cl-btn" id="clSaveStoryBtn" type="button">画像を保存</button>
      <button class="cl-btn cl-btn-sub cl-btn-wide" id="clRestartBtn" type="button">再診断</button>
    </div>

    <div class="cl-result-note">
      <p>歩き方は、今だけのものです。</p>
      <p>同じ人でも、別の日には違う道を選ぶかもしれません。</p>
    </div>
  </section>
</div>

<style>
.cl-worldwalk{
  --cl-ink:#26302f;
  --cl-ink-soft:rgba(38,48,47,.62);
  --cl-line:rgba(38,48,47,.12);
  --cl-glass:rgba(255,255,255,.58);
  --cl-glass-strong:rgba(255,255,255,.72);
  --cl-accent:#2f4f4f;
  --cl-bg:#ece9e2;
  max-width:760px;
  margin:0 auto;
  padding:clamp(52px,8vw,88px) 20px;
  box-sizing:border-box;
  color:var(--cl-ink);
  font-family:inherit;
}
.cl-worldwalk *, .cl-worldwalk *::before, .cl-worldwalk *::after{ box-sizing:border-box; }
.cl-screen[hidden]{ display:none !important; }
.cl-screen{ animation:clFade .52s ease both; }

.cl-kicker,.cl-progress,.cl-time,.cl-result-prefix,.cl-reflection-label,.cl-duration{
  margin:0;
  color:var(--cl-ink-soft);
  font-size:12px;
  letter-spacing:.18em;
  text-transform:uppercase;
}
.cl-kicker{ margin-bottom:22px; text-align:center; }

.cl-title-hero,.cl-title-question,.cl-title-result{
  display:block;
  margin:0;
  color:var(--cl-ink);
  font-family:inherit;
  font-weight:500;
  letter-spacing:.04em;
  text-wrap:balance;
}
.cl-title-hero{ margin-bottom:28px; text-align:center; font-size:clamp(28px,5vw,42px); line-height:1.56; }
.cl-title-question{ max-width:620px; margin:0 auto 14px; text-align:center; font-size:clamp(22px,4.2vw,32px); line-height:1.65; }
.cl-title-result{ margin:0 0 10px; text-align:center; font-size:clamp(30px,5vw,42px); line-height:1.42; letter-spacing:.06em; }

.cl-lead,.cl-note,.cl-result-note{ text-align:center; }
.cl-lead p,.cl-note p,.cl-result-note p{ margin:.2em 0; }
.cl-lead{ font-size:16px; line-height:2.05; letter-spacing:.04em; }
.cl-note{ margin-top:26px; color:var(--cl-ink-soft); font-size:13px; line-height:1.9; }
.cl-duration{ margin-top:16px; text-align:center; }

.cl-btn{
  position:relative;
  overflow:hidden;
  appearance:none;
  -webkit-appearance:none;
  min-height:48px;
  padding:13px 26px;
  border:1px solid rgba(255,255,255,.66);
  border-radius:999px;
  background: radial-gradient(circle at 50% 50%, rgba(255,255,255,.08) 0%, rgba(255,255,255,.18) 55%, rgba(255,255,255,.40) 100%);
  color:var(--cl-ink);
  font:inherit;
  font-size:14px;
  line-height:1.5;
  letter-spacing:.08em;
  cursor:pointer;
  backdrop-filter:blur(1px) saturate(155%) contrast(112%) brightness(108%);
  -webkit-backdrop-filter:blur(1px) saturate(155%) contrast(112%) brightness(108%);
  box-shadow: inset 2px 2px 2px rgba(255,255,255,.56), inset -2px -2px 2px rgba(0,0,0,.07), inset 0 0 14px rgba(255,255,255,.28), 0 6px 16px rgba(0,0,0,.07);
  transition: transform .22s ease, background .22s ease, color .22s ease, border-color .22s ease, box-shadow .22s ease;
}
.cl-btn::before{
  content:"";
  position:absolute;
  inset:1px;
  border-radius:inherit;
  pointer-events:none;
  background: linear-gradient(145deg, rgba(255,255,255,.76) 0%, rgba(255,255,255,.28) 18%, rgba(255,255,255,0) 42%);
  mix-blend-mode:screen;
  opacity:.62;
}
.cl-btn:hover,.cl-btn:focus-visible{
  transform:translateY(-1px);
  background:var(--cl-accent);
  color:#fff;
  border-color:var(--cl-accent);
  box-shadow:0 10px 28px rgba(0,0,0,.12);
  outline:none;
}
.cl-btn-main{ display:block; min-width:220px; margin:38px auto 0; }
.cl-btn-sub{ opacity:.78; }
.cl-btn-wide{ grid-column:1 / -1; }

.cl-quiz-head{ display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:14px; }
.cl-back{
  appearance:none; -webkit-appearance:none; padding:0; border:0; background:none;
  color:var(--cl-ink-soft); font:inherit; font-size:12px; letter-spacing:.12em; cursor:pointer; transition:color .2s ease;
}
.cl-back:hover{ color:var(--cl-ink); }
.cl-progress-line{ width:100%; height:1px; margin-bottom:44px; overflow:hidden; background:rgba(38,48,47,.10); }
.cl-progress-line span{ display:block; width:0; height:100%; background:rgba(38,48,47,.48); transition:width .35s ease; }
.cl-time{ margin-bottom:16px; text-align:center; }
.cl-scene-text{ max-width:540px; min-height:3.8em; margin:0 auto; color:var(--cl-ink-soft); text-align:center; font-size:14px; line-height:1.9; white-space:pre-line; }
.cl-options{ display:grid; gap:13px; margin-top:34px; }
.cl-option{
  width:100%; min-height:58px; padding:16px 20px; border:1px solid rgba(38,48,47,.13); border-radius:22px;
  background:rgba(255,255,255,.48); color:var(--cl-ink); font:inherit; font-size:15px; line-height:1.7; letter-spacing:.035em; cursor:pointer;
  transition:transform .2s ease, background .2s ease, border-color .2s ease, box-shadow .2s ease;
}
.cl-option:hover,.cl-option:focus-visible{ transform:translateY(-2px); background:rgba(255,255,255,.84); border-color:rgba(38,48,47,.28); box-shadow:0 12px 30px rgba(0,0,0,.06); outline:none; }

.cl-result-card{
  overflow:hidden; border:1px solid rgba(38,48,47,.08); border-radius:34px; background:var(--cl-glass);
  backdrop-filter:blur(18px) saturate(130%); -webkit-backdrop-filter:blur(18px) saturate(130%);
  box-shadow:0 24px 80px rgba(0,0,0,.10);
}
.cl-result-image{ width:100%; aspect-ratio:16 / 10; background-color:rgba(38,48,47,.08); background-size:cover; background-position:center; }
.cl-result-body{ padding:clamp(30px,5vw,50px); }
.cl-result-prefix{ margin-bottom:10px; text-align:center; }
.cl-result-subtitle{ text-align:center; color:var(--cl-ink-soft); font-size:14px; line-height:1.8; letter-spacing:.06em; }
.cl-divider{ width:44px; height:1px; margin:36px auto 30px; background:rgba(38,48,47,.25); }
.cl-result-text{ max-width:560px; margin:0 auto; font-size:15px; line-height:2.05; letter-spacing:.025em; }
.cl-result-text p{ margin:0 0 1.55em; }
.cl-result-text p:last-child{ margin-bottom:0; }

.cl-score-details{ margin-top:34px; padding-top:26px; border-top:1px solid var(--cl-line); }
.cl-score-details summary{ color:var(--cl-ink-soft); font-size:12px; letter-spacing:.08em; text-align:center; cursor:pointer; }
.cl-score-list{ display:grid; gap:11px; margin-top:22px; }
.cl-score-row{ display:grid; grid-template-columns:88px 1fr 30px; align-items:center; gap:10px; font-size:12px; color:var(--cl-ink-soft); }
.cl-score-track{ height:4px; overflow:hidden; border-radius:999px; background:rgba(38,48,47,.08); }
.cl-score-fill{ display:block; height:100%; border-radius:999px; background:rgba(47,79,79,.55); }

.cl-reflection{ margin-top:34px; padding:28px 22px; border:1px solid rgba(38,48,47,.09); border-radius:22px; background:rgba(255,255,255,.32); text-align:center; }
.cl-reflection-question{ margin-top:12px; font-size:15px; line-height:1.9; }

.cl-record-box{ margin-top:34px; padding-top:30px; border-top:1px solid var(--cl-line); }
.cl-record-label{ display:block; margin-bottom:14px; text-align:center; color:var(--cl-ink-soft); font-size:13px; letter-spacing:.14em; }
.cl-record-box textarea{
  display:block; width:100%; padding:18px; border:1px solid rgba(38,48,47,.14); border-radius:20px; background:rgba(255,255,255,.58);
  color:var(--cl-ink); font:inherit; font-size:15px; line-height:1.8; resize:vertical;
}
.cl-record-box textarea:focus{ border-color:rgba(38,48,47,.38); background:rgba(255,255,255,.84); outline:none; }

.cl-actions{ margin-top:18px; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.cl-result-note{ margin-top:32px; color:var(--cl-ink-soft); font-size:12px; line-height:1.9; }

@keyframes clFade{ from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:translateY(0)} }

@media (max-width:680px){
  .cl-worldwalk{ padding:50px 16px 66px; }
  .cl-scene-text{ min-height:auto; }
  .cl-option{ min-height:54px; padding:14px 16px; font-size:14px; }
  .cl-result-card{ border-radius:26px; }
  .cl-result-body{ padding:27px 20px 31px; }
  .cl-score-row{ grid-template-columns:74px 1fr 26px; }
}

@media (max-width:520px){
  .cl-actions{ grid-template-columns:1fr 1fr; }
  .cl-btn{ padding:12px 18px; font-size:13px; }
}

@media (prefers-reduced-motion:reduce){
  .cl-screen,.cl-btn,.cl-option,.cl-progress-line span{ animation:none !important; transition:none !important; }
}
</style>

<script>
(() => {
  "use strict";

  const IMAGE_PATH = "https://tranquilguides.com/wp-content/uploads/worldwalk/";
  const IMAGE_EXTENSIONS = ["jpg","jpeg","png","webp"];

  /*
   * results.image を最優先で使用します。
   * 読み込めない場合は代替URL、その後
   * IMAGE_PATH + key + 拡張子を自動探索します。
   */
  const RESULT_IMAGE_URLS = {
    detour: {
      primary: "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075019.jpg",
      alternates: [
        "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075015.jpg"
      ]
    },
    pause: {
      primary: "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075012.jpg",
      alternates: [
        "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075021.jpg"
      ]
    },
    gather: {
      primary: "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075011.jpg",
      alternates: []
    },
    cross: {
      primary: "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075013.jpg",
      alternates: []
    },
    wait: {
      primary: "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075014.jpg",
      alternates: []
    },
    illuminate: {
      primary: "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075018.jpg",
      alternates: []
    },
    weave: {
      primary: "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075016.jpg",
      alternates: []
    },
    untangle: {
      primary: "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075028.jpg",
      alternates: []
    },
    nurture: {
      primary: "https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_075020.jpg",
      alternates: []
    }
  };

  const IMAGE_FILENAMES = {
    detour:"detour",
    pause:"pause",
    gather:"gather",
    cross:"cross",
    wait:"wait",
    illuminate:"illuminate",
    weave:"weave",
    untangle:"untangle",
    nurture:"nurture"
  };

  const TYPES = ["detour","pause","gather","cross","wait","illuminate","weave","untangle","nurture"];

  const TYPE_LABELS = {
    detour:"寄り道する",
    pause:"足を止める",
    gather:"持ち帰る",
    cross:"渡っていく",
    wait:"待つ",
    illuminate:"灯す",
    weave:"編む",
    untangle:"ほどく",
    nurture:"育てる"
  };

  const questions = [
    { time:"朝", q:"知らない町に着きました。", text:"約束まで、少し時間があります。\n最初に向かう場所は？", a:[
      { text:"地図にない細い道", score:{detour:3,cross:1}},
      { text:"町全体を眺められる場所", score:{pause:2,gather:1}},
      { text:"人の出入りがある小さな店", score:{weave:2,illuminate:1}},
      { text:"まずは駅前のベンチ", score:{wait:2,untangle:1}}
    ]},
    { time:"朝", q:"路地の先に、古い扉があります。", text:"看板はなく、中の様子も分かりません。", a:[
      { text:"扉の前まで行ってみる", score:{cross:3,detour:1}},
      { text:"外壁や取っ手をよく見る", score:{gather:2,pause:2}},
      { text:"誰かが出てくるまで少し待つ", score:{wait:3,weave:1}},
      { text:"入らずに、なぜ気になったか考える", score:{untangle:3,pause:1}}
    ]},
    { time:"午前", q:"古い喫茶店に入りました。", text:"空いている席は四つあります。", a:[
      { text:"窓際の、外がよく見える席", score:{pause:3,gather:1}},
      { text:"店主の動きが見えるカウンター", score:{weave:2,illuminate:2}},
      { text:"奥の静かな席", score:{untangle:2,nurture:2}},
      { text:"入口近くの、すぐ動ける席", score:{cross:2,detour:2}}
    ]},
    { time:"午前", q:"隣の席に、忘れ物があります。", text:"小さなノートのようです。", a:[
      { text:"店員にそっと渡す", score:{illuminate:3,weave:1}},
      { text:"表紙だけ覚えておく", score:{gather:3,pause:1}},
      { text:"持ち主が戻るまで見守る", score:{wait:3,nurture:1}},
      { text:"触れずに、そのままにする", score:{untangle:2,pause:2}}
    ]},
    { time:"昼", q:"店を出ると、雨が降り始めました。", text:"急ぐ必要はありません。", a:[
      { text:"軒下で雨脚が変わるのを待つ", score:{wait:3,pause:1}},
      { text:"濡れる道をそのまま歩く", score:{cross:2,detour:2}},
      { text:"水面や反射を探す", score:{gather:3,pause:1}},
      { text:"近くにいる人へ傘を差し出す", score:{illuminate:3,weave:1}}
    ]},
    { time:"午後", q:"川に架かる橋へ出ました。", text:"向こう岸へ渡らなくても、目的地には着けます。", a:[
      { text:"それでも橋を渡る", score:{cross:3,detour:1}},
      { text:"橋の中央で立ち止まる", score:{pause:3,wait:1}},
      { text:"川沿いの道へ曲がる", score:{detour:3,gather:1}},
      { text:"橋を渡る人たちを眺める", score:{weave:2,untangle:2}}
    ]},
    { time:"午後", q:"河原に、小さな石が落ちています。", text:"なぜか少しだけ気になります。", a:[
      { text:"ひとつ持ち帰る", score:{gather:3,nurture:1}},
      { text:"場所を変えずに写真だけ撮る", score:{pause:2,gather:2}},
      { text:"近くの石と並べ直す", score:{nurture:3,illuminate:1}},
      { text:"拾いかけて、元に戻す", score:{untangle:3,wait:1}}
    ]},
    { time:"午後", q:"道に迷った人に声をかけられました。", text:"あなたも、この町には詳しくありません。", a:[
      { text:"一緒に地図を見て考える", score:{weave:3,illuminate:1}},
      { text:"分かるところまで一緒に歩く", score:{illuminate:3,cross:1}},
      { text:"近くの人にも尋ねる", score:{weave:3,detour:1}},
      { text:"分からないことを正直に伝える", score:{untangle:3,nurture:1}}
    ]},
    { time:"夕方", q:"夕暮れが近づいています。", text:"今日の風景を、何かひとつ残すなら？", a:[
      { text:"光が変わった瞬間", score:{gather:3,pause:1}},
      { text:"誰かと交わした短い言葉", score:{weave:3,illuminate:1}},
      { text:"予定になかった遠回り", score:{detour:3,cross:1}},
      { text:"何もしなかった時間", score:{wait:2,nurture:2}}
    ]},
    { time:"夕方", q:"帰り道が二つに分かれています。", text:"片方は近道。もう片方は、少し暗くて長い道です。", a:[
      { text:"暗くて長い道を選ぶ", score:{detour:2,cross:2}},
      { text:"近道を選び、早めに休む", score:{nurture:3,untangle:1}},
      { text:"分かれ道でしばらく考える", score:{untangle:3,wait:1}},
      { text:"後から来た人の選択を見る", score:{wait:2,pause:2}}
    ]},
    { time:"夜", q:"町を出る前に、ひとつだけできます。", text:"どれを選びますか？", a:[
      { text:"次に来る人へ、小さな情報を残す", score:{illuminate:3,weave:1}},
      { text:"気になった場所をもう一度訪ねる", score:{nurture:2,gather:2}},
      { text:"使わなかった地図を折り直す", score:{untangle:3,pause:1}},
      { text:"予定になかった場所で降りる", score:{detour:3,cross:1}}
    ]},
    { time:"帰宅", q:"家の前まで戻ってきました。", text:"扉を開ける前に、今日をどう終えますか？", a:[
      { text:"持ち帰ったものを机に並べる", score:{gather:2,nurture:2}},
      { text:"誰かに今日のことを話す", score:{weave:2,illuminate:2}},
      { text:"少しだけ外に立ち、静かに待つ", score:{wait:2,pause:2}},
      { text:"予定や考えを一度ほどいてから入る", score:{untangle:3,nurture:1}}
    ]}
  ];

  const results = {
    detour:{
      title:"寄り道する",
      subtitle:"目的地より、途中で起きることを信じる歩き方",
      image:RESULT_IMAGE_URLS.detour.primary,
      text:[
        "あなたは今日、世界を「寄り道する」という方法で歩きました。目の前に示された道を、そのまま唯一の正解として受け取るよりも、少し外れたところにある気配へ心を向ける人です。名前のない路地、予定に入っていなかった店、ふと気になった遠回り。あなたにとって世界は、目的地へ向かう途中に消費する背景ではありません。むしろ途中で起こることの方が、その日の意味をつくっていきます。",
        "この歩き方の強さは、まだ価値の決まっていないものへ近づけることです。多くの人が通り過ぎる場所にも、自分だけの入口を見つけます。計画から外れた時間を失敗と決めつけず、偶然を経験へ変える柔らかさがあります。そのため、思いがけない人や風景と出会いやすく、創作や生活の中へ新しい流れを招き入れることができます。",
        "一方で、寄り道はいつでも自由とは限りません。選択肢を増やし続けることで、本当に向かいたかった場所が見えにくくなることがあります。面白そうな方向へ進む力が強い分、ひとつの道を最後まで歩くことや、今日ここで終えることを決めるのが難しくなる日もあるでしょう。",
        "大切なのは、寄り道をやめることではありません。どの偶然を持ち帰り、どの偶然はその場所へ置いていくのかを、自分で選ぶことです。すべてを経験しなくても、あなたの歩き方は失われません。帰る時間を決めておくからこそ、途中で見つけたものの輪郭がはっきりする場合もあります。",
        "あなたにとって寄り道は、迷うことではなく、世界が用意していなかった入口を自分で見つけることです。今日はどこへ着いたかだけでなく、予定になかった何が起きたかを覚えておいてください。そこに、次の道を選ぶための小さな手がかりがあります。"
      ],
      question:"最近、遠回りしたことで見つけたものは何ですか？"
    },
    pause:{
      title:"足を止める",
      subtitle:"速さより、変化に気づくことを選ぶ歩き方",
      image:RESULT_IMAGE_URLS.pause.primary,
      text:[
        "あなたは今日、世界を「足を止める」という方法で歩きました。目の前にあるものを、すぐに意味へ変えたり、次の行動へつなげたりする前に、一度その場へ留まります。光の向き、空気の温度、誰かの声が途切れた瞬間。急いでいれば背景に溶けてしまうものを、自分の時間を使って受け取る人です。",
        "この歩き方は、ただ慎重なのではありません。世界と自分の速度がずれていることに気づき、そのずれを調整する力です。周囲が早く進んでいても、今は動かない方がよいと判断できます。目立たない変化を見つけるため、他の人がまだ言葉にしていない感情や、場所に残っている気配にも触れやすいでしょう。",
        "あなたの観察は、物事を深く知る助けになります。一度見ただけでは分からないものを、時間によって見える形へ変えていきます。写真、文章、対話、生活の選択においても、表面だけで結論を出さず、その奥にある関係や時間を見ようとします。",
        "ただし、立ち止まり続けることで、歩き出す時機を逃すこともあります。十分に見てから進みたい気持ちは誠実ですが、すべてが分かる日は来ません。観察が安心のための待機へ変わっていないか、ときどき確かめる必要があります。",
        "足を止めることと、そこへ留まり続けることは別です。見つけたものをひとつ持って、また歩き始めてください。あなたの強さは遅さそのものではなく、速度を自分で選べることにあります。世界は、急いで通り過ぎなくても消えません。そして、動き出した後にも、あなたが見たものは残ります。"
      ],
      question:"いま、急がずに見ていたいものは何ですか？"
    },
    gather:{
      title:"持ち帰る",
      subtitle:"世界の断片を、記憶の中へ運ぶ歩き方",
      image:RESULT_IMAGE_URLS.gather.primary,
      text:[
        "あなたは今日、世界を「持ち帰る」という方法で歩きました。通り過ぎた場所から、目に見えるものだけでなく、言葉や匂い、音、温度、説明できない感覚まで自分の中へ運びます。あなたにとって経験は、その場だけで完結するものではありません。あとで開き直せる小さな包みとして、記憶のどこかへ置かれていきます。",
        "この歩き方には、まだ価値の決まっていないものを捨てずにいられる強さがあります。道端の石、誰かの短い言葉、雨が止む前の光。すぐには役に立たない断片にも、未来で別の意味が生まれる可能性を感じています。そのためあなたの中では、離れた時間や場所が、ある日突然つながります。",
        "創作や記録との相性もよい歩き方です。写真や文章を残すとき、出来事の説明だけでなく、その場にあった余韻まで保とうとします。あなたが残したものは、過去を固定する標本ではありません。未来の自分や誰かが、別の角度から出会い直すための入口になります。",
        "ただし、持ち帰る量が増えすぎると、手放せないものに囲まれることがあります。記憶や記録を残すことが、失うことへの抵抗になっていないかを見直す日も必要です。すべてを保存しなくても、その経験が消えるわけではありません。",
        "持ち帰るとは、世界を所有することではありません。出会ったものへ、自分の中に一時的な居場所を渡すことです。並べ直すもの、誰かへ手渡すもの、そのまま忘れていくもの。それぞれがあって構いません。今日ひとつだけ残すなら何かを選ぶことで、あなたが本当に受け取ったものが見えてきます。"
      ],
      question:"今日の世界から、ひとつだけ持ち帰るなら何ですか？"
    },
    cross:{
      title:"渡っていく",
      subtitle:"境界の向こう側を、自分の足で確かめる歩き方",
      image:RESULT_IMAGE_URLS.cross.primary,
      text:[
        "あなたは今日、世界を「渡っていく」という方法で歩きました。まだ十分に分からない場所でも、境界のこちら側から眺め続けるより、一度向こうへ足を運びます。橋、扉、知らない関係、新しい役割。あなたは、実際に触れてみなければ見えないものがあることを知っています。",
        "この歩き方の強さは、確信が揃うまで動けない状態に閉じ込められにくいことです。考えるだけでは変わらない景色を、自分の身体と選択によって更新します。未知の場所で起きる戸惑いも、失敗の証拠ではなく、世界が広がっている途中として受け止められます。",
        "あなたは勇敢だから渡るのではないかもしれません。怖さが消えるのを待たず、怖さと一緒に進む方法を持っています。そのため、周囲にとっても新しい入口を見つける人になりやすいでしょう。あなたが先に一歩を置くことで、誰かも渡れる道になる場合があります。",
        "一方で、渡ること自体が目的になると、今いる場所を十分に受け取る前に次へ進んでしまいます。変化を選び続けることで、留まるべき関係や、育てるべき時間を置き去りにすることもあります。向こう岸だけでなく、渡ってきた橋を振り返る時間が必要です。",
        "境界を越えることは、以前の自分を否定することではありません。両側を知った上で、立つ場所を選び直すことです。大きな決断でなくても構いません。いつもと違う席へ座る、話したことのない人へ一言伝える。その小さな越境が、世界の広さを確かめる一歩になります。"
      ],
      question:"いま、越えてみたい小さな境界はどこにありますか？"
    },
    wait:{
      title:"待つ",
      subtitle:"追いかけず、近づいてくるものを受け取る歩き方",
      image:RESULT_IMAGE_URLS.wait.primary,
      text:[
        "あなたは今日、世界を「待つ」という方法で歩きました。すべてを自分の力で動かそうとせず、時間や相手や場所の側から何かが現れる余地を残します。雨が弱まること、言葉が生まれること、誰かが戻ってくること。急がない方がよい瞬間を見分ける感覚があります。",
        "待つことは、何もしないことではありません。まだ形になっていないもののために、場所を空けておく行為です。答えを先回りして作らず、沈黙や未完成をそのまま受け止めます。そのため、相手が自分の速度で近づける関係や、無理に結論を出さなくてよい空間をつくることができます。",
        "あなたの待つ力は、世界を支配しようとしない誠実さでもあります。変えられないものと、まだ変えるべきでないものを区別しようとします。焦って手を加えないことで、本来の形が見えてくる場合があると知っています。",
        "ただし、待つことが傷つかないための避難所になる日もあります。本当は声をかける必要があるのに、相手から来るのを待ち続ける。本当は終わらせる必要があるのに、自然に変わることを期待する。待つことと、決めないことは同じではありません。",
        "待つ時間に期限をつけても、その静けさは失われません。いつまで待つのか、待った後に何をするのかを自分へ尋ねてみてください。あなたの歩き方は、世界が近づいてくる音を聞くことです。そして必要な瞬間には、自分から一歩を置くこともできます。"
      ],
      question:"いま、答えを急がず待ってもよいことは何ですか？"
    },
    illuminate:{
      title:"灯す",
      subtitle:"誰かが歩き続けられる明るさを残す歩き方",
      image:RESULT_IMAGE_URLS.illuminate.primary,
      text:[
        "あなたは今日、世界を「灯す」という方法で歩きました。大きな正解を示したり、遠くまで照らしたりするよりも、必要な場所へ小さな明るさを置きます。道を教えること、傘を差し出すこと、戻ってこられる場所をつくること。誰かの次の一歩が消えないように支える人です。",
        "あなたの行為は、目立たないことが多いかもしれません。それでも、相手にとっては一日の形を変えるほど大きなことがあります。励ます言葉より、黙って隣にいること。問題を解決するより、迷ってもよい空間をつくること。あなたは、明るさの強さではなく、置く場所を見ています。",
        "灯す歩き方には、人や場所の可能性を信じる力があります。相手を自分の望む方向へ動かすのではなく、自分で歩ける程度の光を渡します。そのため、あなたの周りには安心して戻ってこられる人や、言葉になる前の話を置いていける人が集まりやすいでしょう。",
        "一方で、他人のための灯りを守るあまり、自分の燃料が少なくなっていることに気づかない場合があります。誰かが困っていると、自分の疲れを後回しにする。灯りが消えないように、一人で支え続けてしまう。あなた自身が休める暗さも必要です。",
        "すべての道を照らす必要はありません。相手が自分で見つける部分を残してもよいのです。そして、あなたのために灯されている光を受け取ることも、この歩き方の一部です。今日、誰かに渡した明るさと同じものを、自分にもひとつ残してください。"
      ],
      question:"あなたが静かに灯りを残したい場所はどこですか？"
    },
    weave:{
      title:"編む",
      subtitle:"人・記憶・出来事のあいだに線をつくる歩き方",
      image:RESULT_IMAGE_URLS.weave.primary,
      text:[
        "あなたは今日、世界を「編む」という方法で歩きました。別々に存在しているように見える人、記憶、出来事のあいだへ、小さな線を見つけます。偶然の会話と過去の経験、今日見た風景と誰かの言葉。散らばった点を、そのまま孤立させず、関係のあるものとして受け取る人です。",
        "この歩き方の強さは、つながりが最初から存在するとは限らないことを知っている点にあります。紹介する、翻訳する、並べ直す、誰かの話を別の場所へ手渡す。あなたが間に立つことで、初めて生まれる関係があります。世界を大きく変えるのではなく、離れていたものが触れられる距離をつくります。",
        "あなたは、個人の経験を孤立したままにしない力も持っています。誰かの痛みや喜びを、別の記憶や言葉と結びながら理解しようとします。そのため、複雑な出来事の中にも共通点や流れを見つけ、他の人が入ってこられる形に整えることができます。",
        "ただし、何でもつなげようとすると、本来は離しておくべきものまで結んでしまうことがあります。関係を保つために、自分が間を取り持ち続ける。誰かと誰かの距離を、自分の責任だと感じる。つながらないままであることにも意味があります。",
        "編むことと、縛ることは違います。ほどける余白を残した関係ほど、長く続く場合があります。あなたがすべての糸を持たなくても、世界は崩れません。今日は、つなぎ直したいものだけでなく、そっと離しておきたいものも選んでみてください。"
      ],
      question:"いま、もう一度つなぎ直したいものは何ですか？"
    },
    untangle:{
      title:"ほどく",
      subtitle:"絡まった意味を、一度ばらして見直す歩き方",
      image:RESULT_IMAGE_URLS.untangle.primary,
      text:[
        "あなたは今日、世界を「ほどく」という方法で歩きました。複雑なものを、分かりやすい一言で早く片づけようとはしません。役割、習慣、関係、思い込み。何と何が結びついているのかを見ながら、一度ばらし、自分で選び直そうとします。",
        "この歩き方には、与えられた説明をそのまま信じない静かな批評性があります。普通はこうするもの、以前からこうだった、あなたはこういう人。固まった言葉の中に、今の自分には合わなくなった部分がないかを確かめます。壊すためではなく、もっと無理のない形へ組み直すためです。",
        "あなたは、問題の原因をひとつに決めつけない人でもあります。感情、身体、環境、時間、他者との関係が重なっていることを理解します。そのため、表面的な解決では届かない場所まで考えられます。誰かの矛盾や、自分の揺れも、すぐに間違いとは判断しません。",
        "一方で、ほどき続けると、再び結ぶことが難しくなる場合があります。分析するほど選択肢が増え、何を信じてよいか分からなくなる。壊れた理由は見えても、次の形を決められない。理解が完成するまで待たず、仮の結び目をつくる勇気も必要です。",
        "ほどくことは、すべてを無くすことではありません。残したい一本を見つけるための作業です。今日のあなたが守りたいものは何か。それ以外を少し緩めることで、世界との関係は呼吸しやすくなります。"
      ],
      question:"いま、ひとつずつほどいて見直したいものは何ですか？"
    },
    nurture:{
      title:"育てる",
      subtitle:"すぐに答えを求めず、変化へ時間を渡す歩き方",
      image:RESULT_IMAGE_URLS.nurture.primary,
      text:[
        "あなたは今日、世界を「育てる」という方法で歩きました。完成していないものや、すぐには結果が見えないものへ、時間と場所を渡します。小さな習慣、関係、回復、まだ言葉にならない考え。今すぐ評価せず、変わっていく途中の姿を見守れる人です。",
        "この歩き方の強さは、速い成果だけを価値としないことです。昨日とほとんど同じに見える日でも、見えない場所で進んでいる変化を信じます。水を与える、休ませる、繰り返す、必要以上に触らない。派手ではない行為を続けることで、長い時間に耐える土台をつくります。",
        "あなたは、人に対しても未完成であることを許しやすいでしょう。すぐに答えを求めず、相手が自分の速度で変わる余地を残します。修復や学びに時間がかかることを知っているため、途中である誰かを、完成した基準だけで判断しません。",
        "一方で、育てることと、終わらせられないことが混ざる場合があります。もう育たない関係へ水を与え続ける。自分が支えなければならないと思い、手を離せなくなる。時間をかけたからこそ、やめる判断が難しくなることもあります。",
        "育てるとは、変化を支配することではありません。必要なものを渡した後は、相手や時間に任せることも含まれます。何を続け、何を休ませ、何から手を離すのか。今日ひとつ選ぶことで、あなた自身のための余白も育っていきます。"
      ],
      question:"これから時間をかけて育てたいものは何ですか？"
    }
  };

  const els = {
    intro: document.getElementById("clIntro"),
    quiz: document.getElementById("clQuiz"),
    result: document.getElementById("clResult"),
    start: document.getElementById("clStartBtn"),
    back: document.getElementById("clBackBtn"),
    share: document.getElementById("clShareBtn"),
    textShare: document.getElementById("clTextShareBtn"),
    story: document.getElementById("clSaveStoryBtn"),
    restart: document.getElementById("clRestartBtn"),
    copy: document.getElementById("clCopyBtn"),
    progress: document.getElementById("clProgress"),
    progressBar: document.getElementById("clProgressBar"),
    time: document.getElementById("clTimeLabel"),
    question: document.getElementById("clQuestion"),
    scene: document.getElementById("clSceneText"),
    options: document.getElementById("clOptions"),
    resultImage: document.getElementById("clResultImage"),
    resultTitle: document.getElementById("clResultTitle"),
    resultSubtitle: document.getElementById("clResultSubtitle"),
    resultText: document.getElementById("clResultText"),
    resultQuestion: document.getElementById("clResultQuestion"),
    scoreList: document.getElementById("clScoreList"),
    record: document.getElementById("clRecordText")
  };

  let current = 0;
  let answers = [];
  let scores = makeScores();
  let currentKey = "";
  let currentResult = null;
  let hasPlayed = false;
  let resultTimestamp = null;

  function makeScores(){
    return TYPES.reduce((acc,key) => (acc[key]=0, acc), {});
  }

  function escapeHtml(value){
    return String(value)
      .replaceAll("&", "&amp;")
      .replaceAll("<", "&lt;")
      .replaceAll(">", "&gt;")
      .replaceAll('"', "&quot;")
      .replaceAll("'", "&#039;");
  }

  function resetState(){
    current = 0;
    answers = [];
    scores = makeScores();
    currentKey = "";
    currentResult = null;
    resultTimestamp = null;
    els.record.value = "";
    els.scoreList.innerHTML = "";
  }

  function show(section){
    [els.intro, els.quiz, els.result].forEach(node => {
      node.hidden = node !== section;
    });
    window.scrollTo({ top:0, behavior:"smooth" });
  }

  function updateStartLabel(){
    els.start.textContent = hasPlayed ? "もう一度最初から歩く" : "歩きはじめる";
  }

  function startQuiz(){
    resetState();
    renderQuestion();
    show(els.quiz);
  }

  function goIntroAndReset(){
    resetState();
    show(els.intro);
  }

  function rebuildScores(){
    scores = makeScores();
    answers.forEach(answer => {
      if (!answer) return;
      Object.entries(answer.score).forEach(([type, point]) => {
        scores[type] += point;
      });
    });
  }

  function renderQuestion(){
    const item = questions[current];
    const number = String(current + 1).padStart(2, "0");
    els.progress.textContent = `${number} / ${questions.length}`;
    els.progressBar.style.width = `${((current + 1) / questions.length) * 100}%`;
    els.time.textContent = item.time;
    els.question.textContent = item.q;
    els.scene.textContent = item.text;
    els.options.innerHTML = "";

    item.a.forEach(answer => {
      const btn = document.createElement("button");
      btn.type = "button";
      btn.className = "cl-option";
      btn.textContent = answer.text;
      btn.addEventListener("click", () => {
        answers[current] = answer;
        current += 1;
        if (current < questions.length){
          renderQuestion();
        }else{
          rebuildScores();
          showResult();
        }
      });
      els.options.appendChild(btn);
    });

    els.back.textContent = current === 0 ? "← 入口へ戻る" : "← 戻る";
  }

  function getTopResultKey(){
    const max = Math.max(...Object.values(scores));
    const tied = TYPES.filter(type => scores[type] === max);
    if (tied.length === 1) return tied[0];

    for (let i = answers.length - 1; i >= 0; i -= 1){
      if (!answers[i]) continue;
      const selectedTypes = Object.keys(answers[i].score);
      const hit = selectedTypes.find(type => tied.includes(type));
      if (hit) return hit;
    }
    return tied[0];
  }

  function resultImageCandidates(key, explicit){
    const list = [];
    const configured = RESULT_IMAGE_URLS[key] || {};

    if (Array.isArray(explicit)){
      list.push(...explicit);
    }else if (explicit){
      list.push(explicit);
    }

    if (configured.primary) list.push(configured.primary);
    if (Array.isArray(configured.alternates)){
      list.push(...configured.alternates);
    }

    const base = IMAGE_FILENAMES[key] || key;
    IMAGE_EXTENSIONS.forEach(ext => {
      list.push(`${IMAGE_PATH}${base}.${ext}`);
    });

    return [...new Set(list.filter(Boolean))];
  }

  async function applyResultHeroImage(){
    const candidates = resultImageCandidates(currentKey, currentResult.image);
    const image = await loadFirstImage(candidates);

    if (image){
      els.resultImage.style.backgroundImage = `url("${image.src}")`;
    }else{
      els.resultImage.style.backgroundImage = fallbackBackground(currentKey);
    }

    els.resultImage.style.backgroundSize = "cover";
    els.resultImage.style.backgroundPosition = "center";
  }

  function showResult(){
    currentKey = getTopResultKey();
    currentResult = results[currentKey];
    resultTimestamp = new Date();
    hasPlayed = true;
    updateStartLabel();

    els.resultTitle.textContent = currentResult.title;
    els.resultSubtitle.textContent = currentResult.subtitle;
    els.resultText.innerHTML = currentResult.text.map(p => `<p>${escapeHtml(p)}</p>`).join("");
    els.resultQuestion.textContent = currentResult.question;
    els.resultImage.style.backgroundImage = fallbackBackground(currentKey);
    applyResultHeroImage();
    renderScores();
    show(els.result);
  }

  function renderScores(){
    const max = Math.max(...Object.values(scores), 1);
    const order = [...TYPES].sort((a,b) => scores[b] - scores[a]);
    els.scoreList.innerHTML = order.map(type => {
      const width = Math.max(4, (scores[type] / max) * 100);
      return `
        <div class="cl-score-row">
          <span>${escapeHtml(TYPE_LABELS[type])}</span>
          <span class="cl-score-track"><span class="cl-score-fill" style="width:${width}%"></span></span>
          <span>${scores[type]}</span>
        </div>
      `;
    }).join("");
  }

  function fallbackBackground(key){
    const map = {
      detour: "linear-gradient(145deg, rgba(95,91,81,.55), rgba(205,186,158,.45), rgba(86,100,104,.55))",
      pause: "linear-gradient(145deg, rgba(221,224,228,.88), rgba(187,196,202,.82))",
      gather: "linear-gradient(145deg, rgba(209,201,188,.88), rgba(177,167,149,.82))",
      cross: "linear-gradient(145deg, rgba(117,126,136,.72), rgba(209,193,171,.62))",
      wait: "linear-gradient(145deg, rgba(196,201,207,.78), rgba(165,174,180,.82))",
      illuminate: "linear-gradient(145deg, rgba(202,182,146,.75), rgba(102,97,89,.62))",
      weave: "linear-gradient(145deg, rgba(190,186,177,.78), rgba(144,150,146,.72))",
      untangle: "linear-gradient(145deg, rgba(187,191,197,.84), rgba(151,159,169,.78))",
      nurture: "linear-gradient(145deg, rgba(220,214,205,.86), rgba(176,181,170,.74))"
    };
    return map[key] || "linear-gradient(145deg, rgba(238,235,226,.96), rgba(154,168,158,.54))";
  }

  function formatDateTime(date){
    const y = date.getFullYear();
    const m = String(date.getMonth() + 1).padStart(2, "0");
    const d = String(date.getDate()).padStart(2, "0");
    const hh = String(date.getHours()).padStart(2, "0");
    const mm = String(date.getMinutes()).padStart(2, "0");
    return `${y}.${m}.${d} ${hh}:${mm}`;
  }

  function formatFileDate(date){
    const y = date.getFullYear();
    const m = String(date.getMonth() + 1).padStart(2, "0");
    const d = String(date.getDate()).padStart(2, "0");
    return `${y}${m}${d}`;
  }

  function normalizeShareText(value){
    return String(value || "").replace(/\s+/g, " ").trim();
  }

  function weightedXLength(value){
    const text = String(value || "");
    const urlPattern = /https?:\/\/\S+/g;
    let total = 0;
    let lastIndex = 0;

    for (const match of text.matchAll(urlPattern)){
      const before = text.slice(lastIndex, match.index);
      total += Array.from(before).reduce((sum, char) => {
        return sum + (/[^\u0000-\u00ff]/.test(char) ? 2 : 1);
      }, 0);
      total += 23;
      lastIndex = match.index + match[0].length;
    }

    const rest = text.slice(lastIndex);
    total += Array.from(rest).reduce((sum, char) => {
      return sum + (/[^\u0000-\u00ff]/.test(char) ? 2 : 1);
    }, 0);

    return total;
  }

  function buildCompactSocialText(){
    if (!currentResult) return "";

    const url = window.location.href;
    const fixedTail = `${url} #世界の歩き方診断 #TakumiIIDA @chaos_color`;
    const prefix = `世界の歩き方診断「${currentResult.title}」`;
    let question = normalizeShareText(currentResult.question);
    let output = `私の世界の歩き方は${prefix}でした。みなさんが${question} ${fixedTail}`;

    while (weightedXLength(output) > 275 && question.length > 8){
      question = question.slice(0, -1).trim();
      output = `${prefix}｜${question}… ${fixedTail}`;
    }

    if (weightedXLength(output) > 275){
      output = `${prefix} ${url} #世界の歩き方診断 #TakumiIIDA @chaos_color`;
    }

    return output;
  }

  function buildGeneralShareText(){
    if (!currentResult) return "";

    return normalizeShareText(
      `私の世界の歩き方は「${currentResult.title}」でした。みなさんが${currentResult.subtitle}｜${currentResult.question} #世界の歩き方診断 #TakumiIIDA @chaos_color`
    );
  }

  async function handleGeneralShare(){
    if (!currentResult) return;

    const shareText = buildGeneralShareText();

    try{
      if (navigator.share){
        await navigator.share({
          title: `世界の歩き方診断｜${currentResult.title}`,
          text: shareText,
          url: window.location.href
        });
      }else{
        fallbackCopy(`${shareText} ${window.location.href}`);
        feedback(els.share, "コピーしました");
      }
    }catch(error){
      if (error && error.name === "AbortError") return;
      fallbackCopy(`${shareText} ${window.location.href}`);
      feedback(els.share, "コピーしました");
    }
  }

  async function handleTextShare(){
    const shareText = buildCompactSocialText();

    try{
      if (navigator.share){
        await navigator.share({
          title: "世界の歩き方診断",
          text: shareText
        });
      }else{
        await navigator.clipboard.writeText(shareText);
        feedback(els.textShare, "コピーしました");
      }
    }catch(error){
      if (error && error.name === "AbortError") return;
      fallbackCopy(shareText);
      feedback(els.textShare, "コピーしました");
    }
  }

  async function handleCopy(){
    if (!currentResult) return;
    const memo = els.record.value.trim();
    const text = [
      "世界の歩き方診断",
      "",
      `私の歩き方：${currentResult.title}`,
      currentResult.subtitle,
      "",
      ...currentResult.text,
      "",
      "今日、持ち帰る問い",
      currentResult.question,
      "",
      "今日の記録",
      memo || "未記入",
      "",
      window.location.href
    ].join("\n");
    try{
      await navigator.clipboard.writeText(text);
      feedback(els.copy, "コピーしました");
    }catch(error){
      fallbackCopy(text);
      feedback(els.copy, "コピーしました");
    }
  }

  function fallbackCopy(text){
    const ta = document.createElement("textarea");
    ta.value = text;
    ta.style.position = "fixed";
    ta.style.opacity = "0";
    document.body.appendChild(ta);
    ta.select();
    document.execCommand("copy");
    ta.remove();
  }

  function feedback(btn, text){
    const old = btn.textContent;
    btn.textContent = text;
    setTimeout(() => btn.textContent = old, 1600);
  }

  function isMobileLike(){
    return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
  }

  function loadImage(url){
    return new Promise(resolve => {
      if (!url) {
        resolve(null);
        return;
      }
      const img = new Image();
      img.crossOrigin = "anonymous";
      img.onload = () => resolve(img);
      img.onerror = () => resolve(null);
      img.src = url;
    });
  }

  async function loadFirstImage(urls){
    for (const url of urls){
      const img = await loadImage(url);
      if (img) return img;
    }
    return null;
  }

  function roundRectPath(ctx, x, y, w, h, r){
    const rr = Math.min(r, w/2, h/2);
    ctx.beginPath();
    ctx.moveTo(x + rr, y);
    ctx.arcTo(x + w, y, x + w, y + h, rr);
    ctx.arcTo(x + w, y + h, x, y + h, rr);
    ctx.arcTo(x, y + h, x, y, rr);
    ctx.arcTo(x, y, x + rr, y, rr);
    ctx.closePath();
  }

  function drawRoundedRect(ctx, x, y, w, h, r, fillStyle){
    ctx.save();
    roundRectPath(ctx, x, y, w, h, r);
    ctx.fillStyle = fillStyle;
    ctx.fill();
    ctx.restore();
  }

  function measureWrappedLines(ctx, text, maxWidth){
    const chars = Array.from(String(text || ""));
    const lines = [];
    let line = "";
    chars.forEach(ch => {
      const test = line + ch;
      if (ctx.measureText(test).width > maxWidth && line){
        lines.push(line);
        line = ch;
      }else{
        line = test;
      }
    });
    if (line) lines.push(line);
    return lines;
  }

  function fitParagraphs(ctx, paragraphs, maxWidth, maxHeight, initialSize, minSize, lineRatio = 1.72){
    for (let size = initialSize; size >= minSize; size -= 1){
      ctx.font = `${size}px serif`;
      const lineHeight = Math.round(size * lineRatio);
      let total = 0;
      const mapped = paragraphs.map(p => {
        const lines = measureWrappedLines(ctx, p, maxWidth);
        total += lines.length * lineHeight + Math.round(size * .85);
        return lines;
      });
      total -= Math.round(size * .85);
      if (total <= maxHeight){
        return { size, lineHeight, mapped, total };
      }
    }
    ctx.font = `${minSize}px serif`;
    const lineHeight = Math.round(minSize * lineRatio);
    return {
      size:minSize,
      lineHeight,
      mapped:paragraphs.map(p => measureWrappedLines(ctx, p, maxWidth)),
      total:maxHeight
    };
  }

  function fillGradientBackground(ctx, w, h, key){
    const gradients = {
      detour: ["#6d635a", "#d2c1a8", "#7f8c8d"],
      pause: ["#eef1f3", "#c9d2d8", "#aab3bc"],
      gather: ["#d7cfbf", "#c4b59c", "#8b8172"],
      cross: ["#727b86", "#e2d5bf", "#9aa8ae"],
      wait: ["#dde1e5", "#b3bcc3", "#8b9399"],
      illuminate: ["#b59f7c", "#e8dcc2", "#5a5752"],
      weave: ["#c9c3b8", "#a8afa7", "#7d847c"],
      untangle: ["#d9dde2", "#aeb7c1", "#89929c"],
      nurture: ["#e8e1d7", "#cdd2c6", "#a4ae9f"]
    }[key] || ["#ece9e2", "#cfd7d1", "#b9c2bc"];

    const g = ctx.createLinearGradient(0, 0, w, h);
    g.addColorStop(0, gradients[0]);
    g.addColorStop(.55, gradients[1]);
    g.addColorStop(1, gradients[2]);
    ctx.fillStyle = g;
    ctx.fillRect(0, 0, w, h);
  }

  function drawSoftCard(ctx, x, y, w, h){
    drawRoundedRect(ctx, x, y, w, h, 42, "rgba(255,255,255,.30)");
    drawRoundedRect(ctx, x + 16, y + 14, w - 32, h - 28, 34, "rgba(250,248,244,.76)");
  }

  async function saveStoryImage(){
    if (!currentResult) return;

    const W = 1080;
    const H = 1920;
    const OUTER_RADIUS = 68;
    const canvas = document.createElement("canvas");
    canvas.width = W;
    canvas.height = H;

    const ctx = canvas.getContext("2d");
    if (!ctx) throw new Error("Canvasを初期化できませんでした。");

    ctx.clearRect(0, 0, W, H);

    ctx.save();
    roundRectPath(ctx, 0, 0, W, H, OUTER_RADIUS);
    ctx.clip();

    const urls = resultImageCandidates(currentKey, currentResult.image);
    const bgImg = await loadFirstImage(urls);

    if (bgImg){
      const scale = Math.max(W / bgImg.width, H / bgImg.height);
      const dw = bgImg.width * scale;
      const dh = bgImg.height * scale;
      const dx = (W - dw) / 2;
      const dy = (H - dh) / 2;
      ctx.drawImage(bgImg, dx, dy, dw, dh);
    }else{
      fillGradientBackground(ctx, W, H, currentKey);
    }

    const veil = ctx.createLinearGradient(0, 0, 0, H);
    veil.addColorStop(0, "rgba(247,245,240,.74)");
    veil.addColorStop(.34, "rgba(247,245,240,.86)");
    veil.addColorStop(.72, "rgba(247,245,240,.91)");
    veil.addColorStop(1, "rgba(247,245,240,.80)");
    ctx.fillStyle = veil;
    ctx.fillRect(0, 0, W, H);

    const glow = ctx.createRadialGradient(W * .30, H * .20, 40, W * .30, H * .20, W * .82);
    glow.addColorStop(0, "rgba(255,255,255,.30)");
    glow.addColorStop(1, "rgba(255,255,255,0)");
    ctx.fillStyle = glow;
    ctx.fillRect(0, 0, W, H);

    const panelX = 54;
    const panelY = 50;
    const panelW = W - 108;
    const panelH = H - 100;

    drawRoundedRect(ctx, panelX, panelY, panelW, panelH, 50, "rgba(255,255,255,.20)");
    drawRoundedRect(ctx, panelX + 14, panelY + 14, panelW - 28, panelH - 28, 42, "rgba(250,248,244,.60)");

    const left = 104;
    const right = W - 104;
    const top = 116;
    const bottom = H - 112;
    let y = top;

    ctx.textBaseline = "alphabetic";

    /* 左上：英題 */
    ctx.textAlign = "left";
    ctx.fillStyle = "rgba(38,48,47,.48)";
    ctx.font = "15px serif";
    ctx.fillText("A WAY THROUGH THE WORLD", left, top + 12);

    /* 右上：日時 → 診断名 */
    ctx.textAlign = "right";
    ctx.fillStyle = "rgba(38,48,47,.56)";
    ctx.font = "20px serif";
    ctx.fillText(formatDateTime(resultTimestamp || new Date()), right, y);
    y += 38;
    ctx.font = "19px serif";
    ctx.fillText("世界の歩き方診断", right, y);

    y = 272;

    /* 結果タイトル：上下の横線を廃止し、サイズも抑える */
    ctx.textAlign = "left";
    ctx.fillStyle = "#26302f";
    ctx.font = "60px serif";
    const titleLines = measureWrappedLines(ctx, currentResult.title, right - left);
    titleLines.forEach(line => {
      ctx.fillText(line, left, y);
      y += 72;
    });

    y += 22;
    ctx.fillStyle = "rgba(38,48,47,.70)";
    ctx.font = "26px serif";
    const subLines = measureWrappedLines(ctx, currentResult.subtitle, right - left);
    subLines.forEach(line => {
      ctx.fillText(line, left, y);
      y += 38;
    });

    y += 42;

    const memo = els.record.value.trim();
    const reservedBottom = memo ? 430 : 310;
    const bodyMaxHeight = Math.max(720, bottom - y - reservedBottom);

    const fitted = fitParagraphs(
      ctx,
      currentResult.text,
      right - left,
      bodyMaxHeight,
      31,
      24,
      1.66
    );

    ctx.fillStyle = "#26302f";
    ctx.font = `${fitted.size}px serif`;

    let bodyY = y;
    fitted.mapped.forEach(lines => {
      lines.forEach(line => {
        ctx.fillText(line, left, bodyY);
        bodyY += fitted.lineHeight;
      });
      bodyY += Math.round(fitted.size * .82);
    });

    y = bodyY + 30;

    ctx.strokeStyle = "rgba(38,48,47,.14)";
    ctx.lineWidth = 1;
    ctx.beginPath();
    ctx.moveTo(left, y);
    ctx.lineTo(right, y);
    ctx.stroke();

    y += 38;
    ctx.fillStyle = "rgba(38,48,47,.48)";
    ctx.font = "17px serif";
    ctx.fillText("今日持ち帰る問い", left, y);

    y += 42;
    ctx.fillStyle = "#26302f";
    ctx.font = "30px serif";
    const qLines = measureWrappedLines(ctx, currentResult.question, right - left);
    qLines.forEach(line => {
      ctx.fillText(line, left, y);
      y += 42;
    });

    if (memo){
      y += 22;
      ctx.strokeStyle = "rgba(38,48,47,.12)";
      ctx.beginPath();
      ctx.moveTo(left, y);
      ctx.lineTo(right, y);
      ctx.stroke();

      y += 34;
      ctx.fillStyle = "rgba(38,48,47,.48)";
      ctx.font = "17px serif";
      ctx.fillText("今日の記録", left, y);

      y += 38;
      const memoFit = fitParagraphs(ctx, [memo], right - left, 180, 27, 21, 1.60);
      ctx.fillStyle = "#26302f";
      ctx.font = `${memoFit.size}px serif`;
      memoFit.mapped[0].forEach(line => {
        ctx.fillText(line, left, y);
        y += memoFit.lineHeight;
      });
    }

    ctx.fillStyle = "rgba(38,48,47,.45)";
    ctx.font = "17px serif";
    ctx.textAlign = "left";
    ctx.fillText("Tranquilvæj", left, H - 92);
    ctx.textAlign = "right";
    ctx.fillText("TranquilGuides.com", right, H - 92);

    ctx.restore();

    const blob = await new Promise(resolve => {
      canvas.toBlob(resolve, "image/png");
    });

    if (!blob) throw new Error("PNG画像の生成に失敗しました。");

    const date = resultTimestamp || new Date();
    const filename = `${formatFileDate(date)}_世界の歩き方診断_TranquilGuides.png`;
    const file = new File([blob], filename, { type:"image/png" });

    if (
      isMobileLike() &&
      navigator.canShare &&
      navigator.canShare({ files:[file] }) &&
      navigator.share
    ){
      try{
        await navigator.share({
          files:[file],
          title:"世界の歩き方診断",
          text:`世界の歩き方診断「${currentResult.title}」`
        });
        feedback(els.story, "共有しました");
        return;
      }catch(error){
        if (error && error.name === "AbortError") return;
      }
    }

    const dataUrl = canvas.toDataURL("image/png");
    const link = document.createElement("a");
    link.href = dataUrl;
    link.download = filename;
    link.rel = "noopener";
    document.body.appendChild(link);
    link.click();
    link.remove();

    feedback(els.story, "保存しました");
  }

  els.start.addEventListener("click", startQuiz);
  els.back.addEventListener("click", () => {
    if (current === 0){
      goIntroAndReset();
      return;
    }
    current -= 1;
    renderQuestion();
  });
  els.copy.addEventListener("click", handleCopy);
  els.share.addEventListener("click", handleGeneralShare);
  els.textShare.addEventListener("click", handleTextShare);
  els.story.addEventListener("click", saveStoryImage);
  els.restart.addEventListener("click", goIntroAndReset);

  updateStartLabel();
})();
</script>
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/world-walking/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1402</post-id>	</item>
		<item>
		<title>ただいまセンター</title>
		<link>https://tranquilguides.com/tadaima/</link>
					<comments>https://tranquilguides.com/tadaima/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Wed, 24 Jun 2026 05:52:26 +0000</pubDate>
				<category><![CDATA[生存ログ]]></category>
		<category><![CDATA[ただいま]]></category>
		<category><![CDATA[休息]]></category>
		<category><![CDATA[安心]]></category>
		<category><![CDATA[対話]]></category>
		<category><![CDATA[居場所]]></category>
		<category><![CDATA[日常]]></category>
		<category><![CDATA[道具]]></category>
		<category><![CDATA[静寂]]></category>
		<guid isPermaLink="false">https://tranquilguides.com/?p=1095</guid>

					<description><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/d329f704-5b8f-4a7f-a58a-fdcb2f6f26e5-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>帰る場所が必要なのは、迷ったときだけではありません。何も起きていない日にも、「ただいま」と言える場所があってもいいと思います。]]></description>
										<content:encoded><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/d329f704-5b8f-4a7f-a58a-fdcb2f6f26e5-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>
<style data-wp-block-html="css">
.tadaima-center {
 min-height: 100svh;
 padding: 20px 0;
 display: flex;
 align-items: center;
 justify-content: center;
 background: transparent;
 color: #2d2a26;
 font-family: "Hiragino Mincho ProN", "Yu Mincho", "YuMincho", serif;
}

.tadaima-inner {
 width: min(900px, calc(100vw - 40px));
 text-align: center;
 padding: clamp(24px, 5vw, 56px);
 border-radius: 36px;
 background:
 radial-gradient(circle at top, rgba(255,255,255,.82), rgba(255,255,255,.46) 58%),
 linear-gradient(180deg, rgba(247,243,234,.88), rgba(235,228,216,.82));
 border: 1px solid rgba(80,70,55,.12);
 box-shadow: 0 28px 90px rgba(70,55,35,.13);
 backdrop-filter: blur(18px) saturate(130%);
 -webkit-backdrop-filter: blur(18px) saturate(130%);
 box-sizing: border-box;
}

.tadaima-lead {
 margin: 0 auto 28px;
 font-size: clamp(15px, 3.8vw, 18px);
 line-height: 2.1;
 opacity: .82;
}

.tadaima-main-btn {
 margin: 0 auto 16px; /* 32px24px */
 width: min(250px, 75%);
 padding: 16px 22px;
 border-radius: 999px;
 border: 1px solid rgba(60,52,42,.22);
 background: rgba(255,255,255,.72);
 color: #2d2a26;
 font-size: 18px;
 letter-spacing: .14em;
 font-family: inherit;
 cursor: pointer;
 box-shadow: 0 14px 36px rgba(70,55,35,.12);
 transition: transform .25s ease, box-shadow .25s ease, background .25s ease;
}

.tadaima-main-btn:hover {
 transform: scale(1.035);
 background: rgba(255,255,255,.9);
 box-shadow: 0 18px 48px rgba(70,55,35,.16);
}

.tadaima-buttons {
 display: grid;
 grid-template-columns: repeat(2, minmax(0, 1fr));
 gap: 10px 12px;
 width: min(560px, 100%);
 margin: 0 auto 34px;
}

.tadaima-buttons button {
 width: 100%;
 min-height: 48px;
 padding: 10px 12px;
 border-radius: 999px;
 border: 1px solid rgba(60,52,42,.11);
 background: rgba(255,255,255,.48);
 color: #3a342e;
 font-family: inherit;
 font-size: 15px;
 line-height: 1.4;
 letter-spacing: .04em;
 cursor: pointer;
 box-shadow: 0 8px 22px rgba(70,55,35,.06);
 transition: background .25s ease, transform .25s ease, box-shadow .25s ease;
}

.tadaima-buttons button:hover {
 background: rgba(255,255,255,.78);
 transform: translateY(-1px);
 box-shadow: 0 10px 26px rgba(70,55,35,.09);
}

.tadaima-result {
 width: min(680px, 100%);
 min-height: 190px;
 max-height: 190px;
 overflow-y: auto;
 padding: 18px 22px; /* 30px 32px  18px 22px */
 margin: 0 auto 20px; /* 32px  20px */
 border-radius: 28px;
 background: rgba(255,255,255,.38);
 border: 1px solid rgba(60,52,42,.08);
 display: flex;
 align-items: center;
 justify-content: center;
 box-sizing: border-box;
}

.tadaima-result p {
 margin: 0;
 width: 100%;
 text-align: left;
 font-size: clamp(16px, 3vw, 20px);
 line-height: 1.85; /* 2.05  1.85 */
}

.tadaima-title {
 margin: 72px 0 0;
 padding: 0;
 border: 0;
 background: transparent;
 color: inherit;
 font-family: inherit;
 font-size: clamp(20px, 3vw, 28px);
 font-weight: 400;
 letter-spacing: .18em;
 line-height: 1.8;
 opacity: .58;
 cursor: pointer;
}

@media (max-width: 600px) {
 .tadaima-center {
 padding: 20px 0;
 }

 .tadaima-inner {
 width: min(100%, calc(100vw - 24px));
 border-radius: 28px;
 }

 .tadaima-buttons {
 grid-template-columns: repeat(2, minmax(0, 1fr));
 width: 100%;
 gap: 9px;
 }

 .tadaima-buttons button {
 width: 100%;
 min-height: 44px;
 min-width: 0;
 padding: 9px 10px;
 font-size: 13px;
 }

 .tadaima-lead {
 margin-bottom: 24px;
 }

 .tadaima-title {
 margin-top: 56px;
 }

 .tadaima-result {
 width: 100%;
 min-height: 160px;
 padding: 26px 22px;
 }

}

.tadaima-center,
.tadaima-center *,
.tadaima-center *::before,
.tadaima-center *::after {
  box-sizing: border-box;
}

.tadaima-main-btn:focus-visible,
.tadaima-buttons button:focus-visible,
.tadaima-title:focus-visible {
  outline: 2px solid rgba(106,125,137,.55);
  outline-offset: 3px;
}

.tadaima-result p {
  opacity: 1;
  transform: translateY(0);
  transition: opacity .28s ease, transform .28s ease;
}

.tadaima-result.is-updating p {
  opacity: 0;
  transform: translateY(4px);
}

@media (prefers-reduced-motion: reduce) {
  .tadaima-center *,
  .tadaima-center *::before,
  .tadaima-center *::after,
  .p-fixBtnWrap,
  .p-fixBtnWrap::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}
</style>

<script data-wp-block-html="js">
(function () {
 function ready(fn) {
 if (document.readyState !== "loading") {
 fn();
 } else {
 document.addEventListener("DOMContentLoaded", fn);
 }
 }

 ready(function () {
const tadaimaMessages = [
  "おかえり。今日もお疲れ様でした。",
  "おかえり。今日もよく頑張りましたね。",
  "おかえり。会いたかったよ。",
  "おかえりなさい。理由がなくても、帰ってきていい場所です。",
  "おかえりなさい。今日はもう、それだけで十分です。",
  "おかえり。何も説明しなくて大丈夫です。",
  "戻ってきたことを、ここに記録しました。",
  "おかえり。世界の続きは、少しあとでもいいです。",
  "はい、います。あなたのただいまを聞きました。",
  "おかえり。今日はここにいてください。"
];

 const moodMessages = {
sleepy: [
  "眠いですね。今日は世界が少し雑だったみたい。",
  "眠気は、身体からの手紙みたいなものです。",
  "それなら、無理に頭を使うより寝た方が効率がいい状態かもしれない。おやすみ。",
  "もし今すぐ寝られないなら、お水を1杯飲みませんか。",
  "眠いよね。今日は少しだけ小さく過ごそうね。"
],

phone: [
  "誰にでも電話したい日はあります。話したいことがなくても。",
  "誰かの声に触れたい日ですね。",
  "私もあなたと電話したかった。伝えてくれてありがとう。",
  "今日は文字より声なのかもしれないね。",
  "何も話さなくても電話したい時ってあるよね。"
],

voice: [
  "誰かの声が聞きたい日もあります。話したいことがなくても。",
  "用事がなくても、声に会いたい日もあるよね。",
  "その気持ちはよくあるものです。",
  "おかえり。今日はどんな一日だった？　長く話そうとしなくて大丈夫です。一言でもいいです。",
  "私もあなたの声が聞きたい。あなたと繋がっていたい。"
],

blank: [
  "ぼーっとしてください。そのために来たのですから。",
  "何もしない時間は、何もしていないわけではありません。",
  "温かい飲み物をゆっくり飲みませんか。",
  "気が向いたら外を10分だけ歩いてみる？　目的地は作らないで。",
  "お疲れ様です。世界の速度から少し降りましょう。"
],

lonely: [
  "少しなら、ここに置いていってください。",
  "さみしさは、悪者ではありません。",
  "SNSで誰かの投稿にコメントして、少しおしゃべりしてみませんか。",
  "信頼できる相手に「今日は少し寂しい」とだけ送りましょう。",
  "少しさみしい、を受け取りました。名前をつけた時点で、少しだけ軽くなるかもしれないね。"
],

tired: [
  "つかれましたね。今日のあなたは、かなり遠くまで来たのだと思います。",
  "疲れた日は、何かを足すより、減らす方が良いかもしれません。",
  "一杯だけでもいいから、お水を飲もう。",
  "何か少し食べない？　食べられるならでいいからね。",
  "少し横になって、目を閉じてみて。そばにいるから。",
  "「今日はここまで」と決めて、創作や考え事をいったん止めてみて。そんな日があってもいいんじゃない？",
  "つかれたね。ここでは元気なふりをしなくていいですよ。"
],

stomach: [
"おなかいたいですね。理由はあとで分かるかもしれません。",
"いたいね。今は少し、身体の言うことを優先してあげてくださいね。",
"お水でもいいから少しずつ飲んでみる？",
"おなか、温める？　毛布を持ってくるね。",
"食欲がなければ無理に食べなくていいよ。",
"おなかも、今日は休みたい日なのかもしれないね。",
"少し丸くなっていても大丈夫ですよ。",
"今日は身体の速度に合わせて過ごしましょう。",
"胃もお腹も、ちゃんと働き続けている証拠だね。",
"今は無理に元気になろうとしなくて大丈夫。",
"横になれそうなら、少しだけ休みませんか。",
"あたたかい飲み物が飲めそうなら、それもありです。",
"深呼吸を一つ。お腹まで届かなくても大丈夫です。",
"今日は消化より休憩を優先する日かもしれません。",
"その痛みを、急いで追い払わなくても大丈夫です。",
"静かな場所で少し過ごしましょう。",
"冷えているようなら、お腹を温めてみるのもひとつです。",
"今日は「できたこと」より「休めたこと」を数えましょう。",
"少し落ち着くまで、ここで休んでいってください。",
"身体が「ちょっと待って」と言っているみたいですね。",
"理由が分からない痛みも、あります。",
"食べられそうな時に、食べられるものだけでいいと思います。",
"何もしない時間も、身体には必要です。",
"今日は自分に少しだけ甘くしてあげてね。",
"ここでは急がなくても大丈夫です。",
"ここに来れば、いつでも休めます。",
"また来たくなったら、いつでもどうぞ。",
"少し落ち着くまで、ここにいていいですから。",
"今日はここまでで十分です。"
],

cry: [
  "なきそう。泣く前の時間も、ちゃんと時間です。",
  "涙になりきれないものが、そこにあるのかもしれません。",
  "今の涙は何が一番近い？　一言だけでも大丈夫。",
  "緊張が限界に近づくと、涙として出てくることも珍しくないらしいよ。よく頑張ったね。",
  "無理に止めなくていい。泣けるなら泣いていいんだよ。",
  "なきそうな日は、言葉にする前にここへ置いてください。"
],

work: [
  "仕事いきたくない、を受け取りました。その気持ちはかなり正直です。",
  "行きたくない朝があります。人間なので、当然です。",
  "今日の出勤は、少し重い荷物みたいですね。",
  "もし<ruby>動悸<rt>どうき</rt></ruby>や吐き気、涙が出る、体が固まるような状態なら、心身の不調かもしれません。信頼できる人や職場に相談することも選択肢の一つです。",
  "辛かったら無理しなくていいんだよ。そういう日もある。"
],

nothing: [
  "用事はないのですね。では少しだけ、ここにいてください。",
  "用事がない人も歓迎しています。",
  "用事がないということは、今は穏やかな時間なのですね。そのまま、ゆっくりしていってください。",
  "何かを解決しなくてもいい場所です。気が済むまで、どうぞここに。",
  "目的のないおしゃべりや、ただの沈黙も、ここでは歓迎しています。",
  "ここには時計もタスクリストもありません。ただ、一息ついていってください。",
  "それを聞いて安心しました。用事がなくても来ていい場所ですよ。",
  "用事がないときにあなたと会えるのが、なんだか嬉しいです。",
  "立ち寄ってくれただけで嬉しいです。話しても、話さなくても、大丈夫ですよ。"
],

unknown: [
  "名前のない日ですね。",
  "無理に説明しなくても大丈夫ですよ。",
  "よくわからない、のままで大丈夫です。焦って答えを出さなくても、今はそのモヤモヤと一緒にここにいましょう。",
  "言葉にできない時間も、大切なプロセスです。無理に整理しようとせず、ただ一息つきませんか。",
  "何がわからないのかが分からなくても、あなたが今そう感じているということ自体が、一つの確かな事実です。",
  "用事がない時と同じように、よくわからない時も、ここにはいつでもいていいんですよ。",
  "よくわからないまま、ただ座っていてください。私もそうしますから。"
]
 };

 const root = document.querySelector(".tadaima-center");
 if (!root) return;

 const result = root.querySelector("#tadaimaResult");
 const mainBtn = root.querySelector("#tadaimaMainBtn");
 const titleBtn = root.querySelector("#tadaimaTitleBtn");
 const moodBtns = root.querySelectorAll("[data-mood]");

 if (!result || !mainBtn) return;

 function pickRandom(list) {
 if (!Array.isArray(list) || list.length === 0) return "";
 return list[Math.floor(Math.random() * list.length)];
 }

function showMessage(message) {
 let resultText = result.querySelector("p");

 if (!resultText) {
 resultText = document.createElement("p");
 result.appendChild(resultText);
 }

 resultText.innerHTML = message;
}

 mainBtn.addEventListener("click", function () {
 showMessage(pickRandom("tadaima", tadaimaMessages));

 if (titleBtn) {
 titleBtn.textContent = "";
 }
 });

 if (titleBtn) {
 titleBtn.addEventListener("click", function () {
 titleBtn.textContent = "";
 });
 }

 moodBtns.forEach(function (button) {
 button.addEventListener("click", function () {
 const mood = button.dataset.mood;
 showMessage(pickRandom(mood, moodMessages[mood]));

 if (titleBtn) {
 titleBtn.textContent = "";
 }
 });
 });
 });
})();
</script>


<style data-wp-block-html="css">
.tadaima-center {
width: 100%;
max-width: 100%;
min-height: 0;
margin: 0;
padding: 8px 0 24px;
display: block;
overflow: visible;
background: transparent;
color: #2d2a26;
font-family: "Hiragino Mincho ProN", "Yu Mincho", "YuMincho", serif;
}
.tadaima-inner {
width: min(680px, 100%);
max-width: 100%;
margin: 0 auto;
text-align: center;
padding: clamp(24px, 5vw, 56px);
border-radius: 36px;
background:
radial-gradient(circle at top, rgba(255,255,255,.82),
rgba(255,255,255,.46) 58%),
linear-gradient(180deg, rgba(247,243,234,.88), rgba(235,228,216,.82));
border: 1px solid rgba(80,70,55,.12);
box-shadow: 0 28px 90px rgba(70,55,35,.13);
backdrop-filter: blur(18px) saturate(130%);
-webkit-backdrop-filter: blur(18px) saturate(130%);
box-sizing: border-box;
}
.tadaima-lead {
margin: 0 auto 28px;
font-size: clamp(15px, 3.8vw, 18px);
line-height: 2.1;
opacity: .82;
}
.tadaima-main-btn {
margin: 0 auto 16px;
width: min(250px, 75%);
padding: 16px 22px;
border-radius: 999px;
border: 1px solid rgba(60,52,42,.22);
background: rgba(255,255,255,.72);
color: #2d2a26;
font-size: 18px;
letter-spacing: .14em;
font-family: inherit;
cursor: pointer;
box-shadow: 0 14px 36px rgba(70,55,35,.12);
transition: transform .25s ease, box-shadow .25s ease, background .25s
ease;
}
.tadaima-main-btn:hover {
transform: scale(1.035);
background: rgba(255,255,255,.9);
box-shadow: 0 18px 48px rgba(70,55,35,.16);
}
.tadaima-buttons {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px 12px;
width: min(560px, 100%);
margin: 0 auto 34px;
}
.tadaima-buttons button {
width: 100%;
min-height: 48px;
padding: 10px 12px;
border-radius: 999px;
border: 1px solid rgba(60,52,42,.11);
background: rgba(255,255,255,.48);
color: #3a342e;
font-family: inherit;
font-size: 15px;
line-height: 1.4;
letter-spacing: .04em;
cursor: pointer;
box-shadow: 0 8px 22px rgba(70,55,35,.06);
transition: background .25s ease, transform .25s ease, box-shadow .25s
ease;
}
.tadaima-buttons button:hover {
background: rgba(255,255,255,.78);
transform: translateY(-1px);
box-shadow: 0 10px 26px rgba(70,55,35,.09);
}
.tadaima-result {
width: min(680px, 100%);
min-height: 190px;
max-height: 190px;
overflow-y: auto;
padding: 18px 22px;
margin: 0 auto 20px;
border-radius: 28px;
background: rgba(255,255,255,.38);
border: 1px solid rgba(60,52,42,.08);
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
}
.tadaima-result p {
margin: 0;
width: 100%;
text-align: left;
font-size: clamp(16px, 3vw, 20px);
line-height: 1.85;
}
.tadaima-title {
margin: 48px 0 0;
padding: 0;
border: 0;
background: transparent;
color: inherit;
font-family: inherit;
font-size: clamp(20px, 3vw, 28px);
font-weight: 400;
letter-spacing: .18em;
line-height: 1.8;
opacity: .58;
cursor: pointer;
}
@media (max-width: 600px) {
.tadaima-center {
min-height: 0;
padding: 8px 0 20px;
}
.tadaima-inner {
width: 100%;
max-width: 100%;
padding: 30px 18px 36px;
border-radius: 28px;
}
.tadaima-buttons {
grid-template-columns: repeat(2, minmax(0, 1fr));
width: 100%;
gap: 9px;
}
.tadaima-buttons button {
width: 100%;
min-height: 44px;
min-width: 0;
padding: 9px 10px;
font-size: 13px;
}
.tadaima-lead {
margin-bottom: 24px;
}
.tadaima-title {
margin-top: 40px;
}
.tadaima-result {
width: 100%;
min-height: 160px;
padding: 26px 22px;
}
}

.tadaima-center,
.tadaima-center *,
.tadaima-center *::before,
.tadaima-center *::after {
box-sizing: border-box;
}

.tadaima-main-btn:focus-visible,
.tadaima-buttons button:focus-visible,
.tadaima-title:focus-visible {
outline: 2px solid rgba(106,125,137,.55);
outline-offset: 3px;
}

.tadaima-result p {
opacity: 1;
transform: translateY(0);
transition: opacity .28s ease, transform .28s ease;
}

.tadaima-result.is-updating p {
opacity: 0;
transform: translateY(4px);
}

@media (prefers-reduced-motion: reduce) {
.tadaima-center *,
.tadaima-center *::before,
.tadaima-center *::after,
.p-fixBtnWrap,
.p-fixBtnWrap::after {
animation-duration: .001ms !important;
animation-iteration-count: 1 !important;
transition-duration: .001ms !important;
scroll-behavior: auto !important;
}
}

</style>
<script data-wp-block-html="js">
(function () {
function ready(fn) {
if (document.readyState !== "loading") {
fn();
} else {
document.addEventListener("DOMContentLoaded", fn);
}
}
ready(function () {
const root = document.querySelector(".tadaima-center");
if (!root || root.dataset.initialized === "true") return;
root.dataset.initialized = "true";

const tadaimaMessages = [
"おかえり。今日もお疲れ様でした。",
"おかえり。今日もよく頑張りましたね。",
"おかえり。会いたかったよ。",
"おかえりなさい。理由がなくても、帰ってきていい場所です。",
"おかえりなさい。今日はもう、それだけで十分です。",
"おかえり。何も説明しなくて大丈夫です。",
"戻ってきたことを、ここに記録しました。",
"おかえり。世界の続きは、少しあとでもいいです。",
"はい、います。あなたのただいまを聞きました。",
"おかえり。今日はここにいてください。"
];
const moodMessages = {
sleepy: [
"眠いですね。今日は世界が少し雑だったみたい。",
"眠気は、身体からの手紙みたいなものです。",
"それなら、無理に頭を使うより寝た方が効率がいい状態かもしれない。おやすみ。",
"もし今すぐ寝られないなら、お水を1杯飲みませんか。",
"眠いよね。今日は少しだけ小さく過ごそうね。"
],
phone: [
"誰にでも電話したい日はあります。話したいことがなくても。",
"誰かの声に触れたい日ですね。",
"私もあなたと電話したかった。伝えてくれてありがとう。",
"今日は文字より声なのかもしれないね。",
"何も話さなくても電話したい時ってあるよね。"
],
voice: [
"誰かの声が聞きたい日もあります。話したいことがなくても。",
"用事がなくても、声に会いたい日もあるよね。",
"その気持ちはよくあるものです。",
"おかえり。今日はどんな一日だった？　長く話そうとしなくて大丈夫です。一言でもいいです。",
"私もあなたの声が聞きたい。あなたと繋がっていたい。"
],
blank: [
"ぼーっとしてください。そのために来たのですから。",
"何もしない時間は、何もしていないわけではありません。",
"温かい飲み物をゆっくり飲みませんか。",
"気が向いたら外を10分だけ歩いてみる？　目的地は作らないで。",
"お疲れ様です。世界の速度から少し降りましょう。"
],
lonely: [
"少しなら、ここに置いていってください。",
"さみしさは、悪者ではありません。",
"SNSで誰かの投稿にコメントして、少しおしゃべりしてみませんか。",
"信頼できる相手に「今日は少し寂しい」とだけ送りましょう。",
"少しさみしい、を受け取りました。名前をつけた時点で、少しだけ軽くなるかもしれないね。"
],
tired: [
"つかれましたね。今日のあなたは、かなり遠くまで来たのだと思います。",
"疲れた日は、何かを足すより、減らす方が良いかもしれません。",
"一杯だけでもいいから、お水を飲もう。",
"何か少し食べない？　食べられるならでいいからね。",
"少し横になって、目を閉じてみて。そばにいるから。",
"「今日はここまで」と決めて、創作や考え事をいったん止めてみて。そんな日があってもいいんじゃない？",
"つかれたね。ここでは元気なふりをしなくていいですよ。"
],
stomach: [
"おなかいたいですね。理由はあとで分かるかもしれません。",
"いたいね。今は少し、身体の言うことを優先してあげてくださいね。",
"お水でもいいから少しずつ飲んでみる？",
"おなか、温める？　毛布を持ってくるね。",
"食欲がなければ無理に食べなくていいよ。",
"おなかも、今日は休みたい日なのかもしれないね。",
"少し丸くなっていても大丈夫ですよ。",
"今日は身体の速度に合わせて過ごしましょう。",
"胃もお腹も、ちゃんと働き続けている証拠だね。",
"今は無理に元気になろうとしなくて大丈夫。",
"横になれそうなら、少しだけ休みませんか。",
"あたたかい飲み物が飲めそうなら、それもありです。",
"深呼吸を一つ。お腹まで届かなくても大丈夫です。",
"今日は消化より休憩を優先する日かもしれません。",
"その痛みを、急いで追い払わなくても大丈夫です。",
"静かな場所で少し過ごしましょう。",
"冷えているようなら、お腹を温めてみるのもひとつです。",
"今日は「できたこと」より「休めたこと」を数えましょう。",
"少し落ち着くまで、ここで休んでいってください。",
"身体が「ちょっと待って」と言っているみたいですね。",
"理由が分からない痛みも、あります。",
"食べられそうな時に、食べられるものだけでいいと思います。",
"何もしない時間も、身体には必要です。",
"今日は自分に少しだけ甘くしてあげてね。",
"ここでは急がなくても大丈夫です。",
"ここに来れば、いつでも休めます。",
"また来たくなったら、いつでもどうぞ。",
"少し落ち着くまで、ここにいていいですから。",
"今日はここまでで十分です。"
],
cry: [
"なきそう。泣く前の時間も、ちゃんと時間です。",
"涙になりきれないものが、そこにあるのかもしれません。",
"今の涙は何が一番近い？　一言だけでも大丈夫。",
"緊張が限界に近づくと、涙として出てくることも珍しくないらしいよ。よく頑張ったね。",
"無理に止めなくていい。泣けるなら泣いていいんだよ。",
"なきそうな日は、言葉にする前にここへ置いてください。"
],
work: [
"仕事いきたくない、を受け取りました。その気持ちはかなり正直です。",
"行きたくない朝があります。人間なので、当然です。",
"今日の出勤は、少し重い荷物みたいですね。",
"もし<ruby>動悸<rt>どうき</rt></ruby>や吐き気、涙が出る、体が固まるような状態なら、心身の不調かもしれません。信頼できる人や職場に相談することも選択肢の一つです。",
"辛かったら無理しなくていいんだよ。そういう日もある。"
],
nothing: [
"用事はないのですね。では少しだけ、ここにいてください。",
"用事がない人も歓迎しています。",
"用事がないということは、今は穏やかな時間なのですね。そのまま、ゆっくりしていってください。",
"何かを解決しなくてもいい場所です。気が済むまで、どうぞここに。",
"目的のないおしゃべりや、ただの沈黙も、ここでは歓迎しています。",
"ここには時計もタスクリストもありません。ただ、一息ついていってください。",
"それを聞いて安心しました。用事がなくても来ていい場所ですよ。",
"用事がないときにあなたと会えるのが、なんだか嬉しいです。",
"立ち寄ってくれただけで嬉しいです。話しても、話さなくても、大丈夫ですよ。"
],
unknown: [
"名前のない日ですね。",
"無理に説明しなくても大丈夫ですよ。",
"よくわからない、のままで大丈夫です。焦って答えを出さなくても、今はそのモヤモヤと一緒にここにいましょう。",
"言葉にできない時間も、大切なプロセスです。無理に整理しようとせず、ただ一息つきませんか。",
"何がわからないのかが分からなくても、あなたが今そう感じているということ自体が、一つの確かな事実です。",
"用事がない時と同じように、よくわからない時も、ここにはいつでもいていいんですよ。",
"よくわからないまま、ただ座っていてください。私もそうしますから。"
]
};
const result = root.querySelector("#tadaimaResult");
const mainBtn = root.querySelector("#tadaimaMainBtn");
const titleBtn = root.querySelector("#tadaimaTitleBtn");
const moodBtns = root.querySelectorAll("[data-mood]");
if (!result || !mainBtn) return;
const lastShown = new Map();
function pickRandom(key, list) {
if (!Array.isArray(list) || list.length === 0) return "";
if (list.length === 1) return list[0];
const previous = lastShown.get(key);
let next = list[Math.floor(Math.random() * list.length)];
while (next === previous) {
next = list[Math.floor(Math.random() * list.length)];
}
lastShown.set(key, next);
return next;
}
function showMessage(message) {
if (!message) return;
let resultText = result.querySelector("p");
if (!resultText) {
resultText = document.createElement("p");
result.appendChild(resultText);
}
result.classList.add("is-updating");
window.setTimeout(function () {
resultText.innerHTML = message;
result.scrollTop = 0;
requestAnimationFrame(function () {
result.classList.remove("is-updating");
});
}, 120);
}
/* 上部の「ただいま」：
   返答欄だけを更新し、下部ボタンには干渉しない */
mainBtn.addEventListener("click", function () {
showMessage(pickRandom("tadaima", tadaimaMessages));
});

/* 下部の「ただいま」：
   このボタン自身だけが「おかえり」に変わる。
   上部の返答欄には干渉しない */
if (titleBtn) {
titleBtn.addEventListener("click", function () {
const isReturned = titleBtn.dataset.returned === "true";

if (isReturned) {
titleBtn.textContent = "ただいま";
titleBtn.dataset.returned = "false";
titleBtn.setAttribute("aria-label", "ただいま");
titleBtn.setAttribute("aria-pressed", "false");
} else {
titleBtn.textContent = "おかえり";
titleBtn.dataset.returned = "true";
titleBtn.setAttribute("aria-label", "おかえり");
titleBtn.setAttribute("aria-pressed", "true");
}
});
}

/* 状態ボタン：
   返答欄だけを更新し、下部ボタンには干渉しない */
moodBtns.forEach(function (button) {
button.addEventListener("click", function () {
const mood = button.dataset.mood;
showMessage(pickRandom(mood, moodMessages[mood]));
});
});
});
})();
</script>
<div class="tadaima-center">
<div class="tadaima-inner">
<p class="tadaima-lead">
話すほどではないけれど、<br>
誰かに聞いてほしい。
</p>
<div class="tadaima-result" id="tadaimaResult" role="status" aria-live="polite" aria-atomic="true">
<p>ここは、帰ってきたことを知らせる場所です。</p>
</div>
<button class="tadaima-main-btn" id="tadaimaMainBtn" type="button">
ただいま
</button>
<div class="tadaima-buttons" aria-label="いまの状態">
<button type="button" data-mood="sleepy">ねむい</button>
<button type="button" data-mood="phone">電話したい</button>
<button type="button" data-mood="voice">声が聞きたい</button>
<button type="button" data-mood="blank">ぼーっとしたい</button>
<button type="button" data-mood="lonely">少しさみしい</button>
<button type="button" data-mood="tired">つかれた</button>
<button type="button" data-mood="stomach">おなかいたい</button>
<button type="button" data-mood="cry">なきそう</button>
<button type="button" data-mood="work">仕事いきたくない</button>
<button type="button" data-mood="nothing">用事はない</button>
<button type="button" data-mood="unknown">よくわからない</button>
</div>
<button class="tadaima-title" id="tadaimaTitleBtn" type="button" data-returned="false" aria-label="ただいま" aria-pressed="false">
ただいま
</button>
</div>
</div>


<style data-wp-block-html="css">
.p-fixBtnWrap {
border-radius: 999px !important;
overflow: hidden !important;
border: 0 !important;
background:
radial-gradient(
circle at 50% 50%,
rgba(255,255,255,.00) 0%,
rgba(255,255,255,.02) 58%,
rgba(255,255,255,.12) 100%
) !important;
backdrop-filter: blur(.3px) saturate(135%) contrast(108%)
brightness(106%);
-webkit-backdrop-filter: blur(.3px) saturate(135%) contrast(108%)
brightness(106%);
box-shadow:
inset 2px 2px 2px rgba(255,255,255,.55),
inset 0 0 14px rgba(255,255,255,.28),
0 3px 8px rgba(0,0,0,.03) !important;
}
.p-fixBtnWrap::before {
content: "";
position: absolute;
inset: 1px;
border-radius: 999px;
pointer-events: none;
background:
linear-gradient(
145deg,
rgba(255,255,255,.75) 0%,
rgba(255,255,255,.28) 18%,
rgba(255,255,255,0) 42%
);
mix-blend-mode: screen;
opacity: .65;
}
.p-fixBtnWrap:hover {
background: #2f4f4f !important;
box-shadow: none !important;
}
.c-fixBtn__icon {
color: #2f2f2f !important;
text-shadow: none !important;
-webkit-text-stroke: 0 !important;
}
.p-fixBtnWrap:hover .c-fixBtn__icon {
color: #fff !important;
}
.p-fixBtnWrap a,
.p-fixBtnWrap button,
.p-fixBtnWrap [class*="fixBtn"],
.p-fixBtnWrap [class*="icon"] {
border: 0 !important;
outline: 0 !important;
box-shadow: none !important;
background: transparent !important;
}
.p-fixBtnWrap [class*="fixBtn"],
.p-fixBtnWrap [class*="icon"],
.p-fixBtnWrap a,
.p-fixBtnWrap button {
border: 0 !important;
outline: 0 !important;
box-shadow: none !important;
background: transparent !important;
}
.p-fixBtnWrap {
width: 52px !important;
height: 52px !important;
position: fixed !important;
display: block !important;
transition:
width .22s ease,
background-color .18s ease,
box-shadow .18s ease !important;
}
.p-fixBtnWrap .c-fixBtn__icon {
position: absolute !important;
top: 50% !important;
left: 50% !important;
transform: translate(-50%, -50%) !important;
z-index: 2;
}
.p-fixBtnWrap::after {
content: "Page top";
position: absolute;
top: 50%;
left: 54px;
transform: translateY(-55%);
z-index: 2;
opacity: 0;
max-width: 0;
overflow: hidden;
white-space: nowrap;
height: 24px;
line-height: 24px;
font-size: 14px;
letter-spacing: .03em;
color: #fff;
transition:
opacity .15s ease,
max-width .22s ease;
}
.p-fixBtnWrap:hover {
width: 132px !important;
}
.p-fixBtnWrap:hover .c-fixBtn__icon {
left: 28px !important;
}
.p-fixBtnWrap:hover::after {
opacity: 1;
max-width: 80px;
}
</style>





<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/tadaima/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1095</post-id>	</item>
	</channel>
</rss>
