<?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>Tranquilvæj</title>
	<atom:link href="https://tranquilguides.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://tranquilguides.com</link>
	<description>心地よい暮らしの始め方</description>
	<lastBuildDate>Mon, 13 Jul 2026 11:51:44 +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>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>Travel Guide: 知らない街を歩く</title>
		<link>https://tranquilguides.com/unknown-city-travel-guide/</link>
					<comments>https://tranquilguides.com/unknown-city-travel-guide/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Mon, 13 Jul 2026 02:02:14 +0000</pubDate>
				<category><![CDATA[生存ログ]]></category>
		<category><![CDATA[Travel Guide]]></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>
		<category><![CDATA[静けさ]]></category>
		<guid isPermaLink="false">https://tranquilguides.com/?p=1502</guid>

					<description><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260713_152804-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>予定を詰め込みすぎず、知らない街の輪郭を静かにつかむための歩き方。Line、Loop、Driftの3つの方法を軸に、休憩、写真、地図との付き合い方を整理します。]]></description>
										<content:encoded><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260713_152804-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="wp-block-paragraph">旅先で予定を詰めすぎると、街が見えなくなることがあります。</p>



<p class="wp-block-paragraph">次の店、次の名所、次の電車。</p>



<p class="wp-block-paragraph">目的地をつなぐことに集中しているうちに、その間にあった路地や店先、人の動きは、ただの通過点になってしまいます。</p>



<p class="wp-block-paragraph">予定どおりに移動できたという満足感は残っても、その街で何を見たのか思い出せない。</p>



<p class="wp-block-paragraph">写真はたくさんあるのに、歩いていたときの空気や音が残っていない。</p>



<p class="wp-block-paragraph">そんな旅になることもあります。</p>



<p class="wp-block-paragraph">知らない街を歩く時は、必ずしも多くの場所を訪れる必要はありません。</p>



<p class="wp-block-paragraph">街の輪郭は、観光名所の数だけで決まるものではないからです。</p>



<p class="wp-block-paragraph">道の広さ、建物の高さ、商店が開き始める時間、川に向かって下っていく道。</p>



<p class="wp-block-paragraph">そうした小さな特徴をいくつか見つけるだけでも、その街がどのような場所なのか、少しずつ分かってきます。</p>



<p class="wp-block-paragraph">このTravel Guideでは、知らない街を効率よく回るのではなく、歩きながら少しずつ輪郭をつかむ方法を整理します。</p>



<h2 class="wp-block-heading"><strong>目的地は3つまで</strong></h2>



<p class="wp-block-paragraph">半日なら、目的地は3つ程度で十分です。</p>



<p class="wp-block-paragraph">選ぶ基準は、次のように分けると歩きやすくなります。</p>



<p class="wp-block-paragraph">街を知る場所。</p>



<p class="wp-block-paragraph">休む場所。</p>



<p class="wp-block-paragraph">その土地の時間を感じる場所。</p>



<p class="wp-block-paragraph">有名な観光地を3つ選ぶ必要はありません。</p>



<ul class="wp-block-list">
<li>公園</li>



<li>喫茶店</li>



<li>川沿い</li>
</ul>



<p class="wp-block-paragraph">でも成立します。</p>



<p class="wp-block-paragraph">たとえば、最初に古い商店街を歩き、途中で喫茶店に入り、夕方に川辺へ向かう。</p>



<p class="wp-block-paragraph">それだけでも、街の仕事、休息、時間の流れをそれぞれ見ることができます。</p>



<p class="wp-block-paragraph">大切なのは、目的地そのものよりも、目的地同士の間に歩く余白を残すことです。</p>



<p class="wp-block-paragraph">地図上では徒歩15分でも、実際には気になる店の前で立ち止まったり、道を一本外れたりするかもしれません。</p>



<p class="wp-block-paragraph">予定を立てるときは、正確な移動時間をもとに計画するのではなく、表示される所要時間の1.5倍ほどを見ておくと安心です。</p>



<p class="wp-block-paragraph">15分の道なら、20〜30分。</p>



<p class="wp-block-paragraph">30分の道なら、45分ほど。</p>



<p class="wp-block-paragraph">余った時間は無駄にはなりません。街を見るための時間になります。</p>



<h2 class="wp-block-heading"><strong>歩き方を選ぶ</strong></h2>



<p class="wp-block-paragraph">街歩きには、いくつかの形があります。</p>



<p class="wp-block-paragraph">出発前に、その日の歩き方やテーマを一つ決めておくと、予定を増やしすぎずに済みます。</p>



<h3 class="wp-block-heading"><strong>Line</strong>: 一本道で街を知る歩き方</h3>



<p class="wp-block-paragraph">駅から目的地まで、一本の道を歩きます。</p>



<p class="wp-block-paragraph">迷いにくく、初めての街でも始めやすい方法です。</p>



<p class="wp-block-paragraph">大通りをまっすぐ歩いても構いません。</p>



<p class="wp-block-paragraph">線路沿い、川沿い、旧街道のように、何か一つの軸を決めてもよいでしょう。</p>



<p class="wp-block-paragraph">Lineの良さは、街の変化を順番に見られることです。</p>



<p class="wp-block-paragraph">駅前の商業地から住宅街へ変わり、住宅街の先に畑が現れる。</p>



<p class="wp-block-paragraph">新しい建物が減り、古い家が増えていく。</p>



<p class="wp-block-paragraph">一点だけを見るのではなく、場所同士のつながりが見えてきます。</p>



<p class="wp-block-paragraph">途中で気になる横道があっても、すべてに入る必要はありません。</p>



<p class="wp-block-paragraph">一本だけ選んで寄り道し、また元の道へ戻ります。</p>



<h3 class="wp-block-heading"><strong>Loop</strong>: 戻ることで街が見えてくる</h3>



<p class="wp-block-paragraph">出発地点へ戻る、小さな周回をつくります。</p>



<p class="wp-block-paragraph">行きと帰りで道を変えると、同じ範囲でも街の表情が増えます。</p>



<p class="wp-block-paragraph">駅から公園へ向かい、帰りは商店街を通る。</p>



<p class="wp-block-paragraph">川の右岸を進み、橋を渡って左岸から戻る。</p>



<p class="wp-block-paragraph">Loopは、限られた時間でも使いやすい歩き方です。</p>



<p class="wp-block-paragraph">終点が出発地点なので、帰りの交通を考え続ける必要もありません。</p>



<p class="wp-block-paragraph">また、少し離れた場所から戻ってくることで、最初に見た駅前や広場の印象が変化することがあります。</p>



<p class="wp-block-paragraph">到着したときにはただ広く感じた駅前が、帰る頃には街の人が集まる場所として見えるかもしれません。</p>



<h3 class="wp-block-heading"><strong>Drift</strong>: 偶然を受け入れる歩き方</h3>



<p class="wp-block-paragraph">歩く時間だけを決め、気になった方向へ進みます。</p>



<p class="wp-block-paragraph">看板の色、木の多い道、遠くに見える塔、坂の向こう側。</p>



<p class="wp-block-paragraph">理由は小さなもので構いません。</p>



<p class="wp-block-paragraph">ただし、完全に無計画にする必要はありません。</p>



<ul class="wp-block-list">
<li>戻る時間</li>



<li>最寄りの駅</li>



<li>帰りの交通手段</li>



<li>日没の時刻</li>
</ul>



<p class="wp-block-paragraph">この4つだけは、あらかじめ確認しておきます。</p>



<p class="wp-block-paragraph">Driftは、偶然を受け入れる歩き方ですが、安全や帰路まで偶然に任せる方法ではありません。</p>



<p class="wp-block-paragraph">土地勘のない場所では、30分〜1時間歩いたら現在地を確認する、川や線路を越えたら一度地図を見るなど、自分なりの区切りを決めておくと安心です。</p>



<h2 class="wp-block-heading"><strong>地図は確認するために使う</strong></h2>



<p class="wp-block-paragraph">スマートフォンの地図を見ながら歩き続けると、実際の街よりも画面上の線を追うことになります。</p>



<p class="wp-block-paragraph">地図は、進む道を常に指示してもらうためではなく、現在地を確認するために使います。</p>



<p class="wp-block-paragraph">出発前に目的地のおおまかな方向を見ます。</p>



<p class="wp-block-paragraph">次に確認するのは、大きな交差点や川、線路など、街の境目に着いたときです。</p>



<p class="wp-block-paragraph">それ以外の時間は、画面を閉じて歩いてみます。</p>



<p class="wp-block-paragraph">少し道を間違えても、すぐに修正する必要はありません。</p>



<p class="wp-block-paragraph">危険がなく、時間にも余裕があるなら、一本先の道から戻るだけで、新しい場所を見ることができます。</p>



<p class="wp-block-paragraph">道に迷うことと、道を間違えることは同じではありません。</p>



<p class="wp-block-paragraph">戻る方法が分かっているなら、それは小さな寄り道です。</p>



<h2 class="wp-block-heading"><strong>街を見る手がかり</strong></h2>



<p class="wp-block-paragraph">街の特徴は、案内板に説明されているものだけではありません。</p>



<p class="wp-block-paragraph">歩いているときは、次のようなものが手がかりになります。</p>



<style>
.tg-observation-table {
  margin: 2.4rem 0;
  overflow: hidden;
  border: 1px solid rgba(75, 88, 82, 0.14);
  border-radius: 16px;
  background: #fff;
  box-shadow: 0 10px 30px rgba(44, 54, 49, 0.045);
}

.tg-observation-table table {
  width: 100%;
  margin: 0;
  border: 0 !important;
  border-collapse: collapse;
  border-spacing: 0;
  table-layout: fixed;
  background: transparent;
  font-size: 0.94rem;
}

.tg-observation-table thead {
  background: #f2f4f1;
}

.tg-observation-table th,
.tg-observation-table td {
  height: auto;
  border: 0 !important;
  box-shadow: none !important;
  text-align: left;
  vertical-align: top;
}

.tg-observation-table th {
  padding: 15px 20px;
  color: #3f4944;
  font-size: 0.78rem;
  font-weight: 600;
  line-height: 1.5;
  letter-spacing: 0.08em;
}

.tg-observation-table th:first-child,
.tg-observation-table td:first-child {
  width: 42%;
}

.tg-observation-table td {
  position: relative;
  padding: 17px 20px;
  color: #4a514d;
  line-height: 1.75;
}

.tg-observation-table td:first-child {
  padding-left: 46px;
  color: #303733;
  font-weight: 500;
}

.tg-observation-table td:first-child::before {
  content: counter(tg-observation, decimal-leading-zero);
  position: absolute;
  top: 19px;
  left: 20px;
  color: #9ba59f;
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  font-size: 0.68rem;
  font-weight: 400;
  letter-spacing: 0.04em;
}

.tg-observation-table tbody {
  counter-reset: tg-observation;
}

.tg-observation-table tbody tr {
  counter-increment: tg-observation;
  border-top: 1px solid rgba(75, 88, 82, 0.1);
  transition: background-color 0.2s ease;
}

.tg-observation-table tbody tr:first-child {
  border-top: 0;
}

@media (hover: hover) {
  .tg-observation-table tbody tr:hover {
    background: #f8f9f7;
  }
}

@media (max-width: 600px) {
  .tg-observation-table {
    margin: 2rem 0;
    border-radius: 13px;
  }

  .tg-observation-table table,
  .tg-observation-table tbody,
  .tg-observation-table tr,
  .tg-observation-table th,
  .tg-observation-table td {
    display: block;
    width: 100%;
  }

  .tg-observation-table thead {
    display: none;
  }

  .tg-observation-table tbody tr {
    padding: 15px 17px 16px;
  }

  .tg-observation-table td {
    padding: 0;
  }

  .tg-observation-table td:first-child {
    width: 100%;
    padding: 0 0 5px 29px;
    font-size: 0.94rem;
  }

  .tg-observation-table td:first-child::before {
    top: 2px;
    left: 0;
  }

  .tg-observation-table td:last-child {
    padding-left: 29px;
    color: #69716d;
    font-size: 0.88rem;
    line-height: 1.7;
  }
}
</style>

<div class="tg-observation-table">
  <table>
    <thead>
      <tr>
        <th scope="col">見るもの</th>
        <th scope="col">その街から分かること</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>店が開き始める時間</td>
        <td>街の一日の始まり</td>
      </tr>
      <tr>
        <td>ベンチの向き</td>
        <td>人が立ち止まる場所</td>
      </tr>
      <tr>
        <td>古い看板</td>
        <td>以前そこにあった営み</td>
      </tr>
      <tr>
        <td>川や坂</td>
        <td>街の地形と成り立ち</td>
      </tr>
      <tr>
        <td>夕方の人の流れ</td>
        <td>暮らしの方向</td>
      </tr>
      <tr>
        <td>自転車の数</td>
        <td>移動距離や道の平坦さ</td>
      </tr>
      <tr>
        <td>軒先の植物</td>
        <td>家と道との距離感</td>
      </tr>
      <tr>
        <td>閉じた店の多さ</td>
        <td>商店街の現在の時間</td>
      </tr>
      <tr>
        <td>学校や公園</td>
        <td>子どもたちが過ごす場所</td>
      </tr>
      <tr>
        <td>洗濯物や室外機</td>
        <td>建物の裏側にある生活</td>
      </tr>
    </tbody>
  </table>
</div>



<p class="wp-block-paragraph">すべてを分析する必要はありません。</p>



<p class="wp-block-paragraph">一つか二つ、気になったものを覚えておくだけで十分です。</p>



<p class="wp-block-paragraph">たとえば、どの家にも小さな鉢植えが置かれていることに気づいたら、その街では家の内側と道の境界が少し柔らかいのかもしれません。</p>



<p class="wp-block-paragraph">川沿いのベンチがすべて水面ではなく住宅側を向いていたら、そこは景色を見る場所ではなく、人を待つ場所なのかもしれません。</p>



<p class="wp-block-paragraph">正しい答えを出すことが目的ではありません。</p>



<p class="wp-block-paragraph">街の中にある小さな配置から、その場所の暮らしを想像してみます。</p>



<h2 class="wp-block-heading"><strong>建物ではなく、建物の間を見る</strong></h2>



<p class="wp-block-paragraph">知らない街では、特徴的な建物に目が向きやすくなります。</p>



<p class="wp-block-paragraph">高層ビル、個性的な店、古い洋館、寺院。</p>



<p class="wp-block-paragraph">しかし、街の印象をつくっているのは建物そのものだけではありません。</p>



<p class="wp-block-paragraph">建物と建物の間の細い通路。</p>



<p class="wp-block-paragraph">家の脇に残された空き地。</p>



<p class="wp-block-paragraph">駐車場の奥に見える山。</p>



<p class="wp-block-paragraph">路地から差し込む西日。</p>



<p class="wp-block-paragraph">そうした<strong>「あいだ」</strong>にも、その街らしさがあります。</p>



<p class="wp-block-paragraph">建物の用途が変わっても、道幅や敷地の形は長く残ることがあります。</p>



<p class="wp-block-paragraph">新しい住宅が並んでいても、道だけが不自然に曲がっていれば、昔そこに水路や畑の境界があったのかもしれません。</p>



<p class="wp-block-paragraph">街を歩くときは、何が建っているかだけでなく、なぜここに隙間があるのか、なぜこの道だけ細いのかにも目を向けてみます。</p>



<h2 class="wp-block-heading"><strong>休憩を予定に含める</strong></h2>



<p class="wp-block-paragraph">休憩は、歩けなくなったときに取るものではありません。</p>



<p class="wp-block-paragraph">街の印象を整理するための時間として、最初から予定に入れます。</p>



<ul class="wp-block-list">
<li>喫茶店</li>



<li>公園</li>



<li>川辺や堤防</li>



<li>図書館</li>



<li>駅のベンチ</li>
</ul>



<p class="wp-block-paragraph">長く滞在する必要はありません。</p>



<p class="wp-block-paragraph">15分ほど座るだけでも、歩いているときには見えなかったものが見えてきます。</p>



<p class="wp-block-paragraph">人はどこから来て、どこへ向かうのか。</p>



<p class="wp-block-paragraph">どの席が先に埋まるのか。</p>



<p class="wp-block-paragraph">店内ではどのような声量で話しているのか。</p>



<p class="wp-block-paragraph">歩くことを止めると、街を静止した風景ではなく、時間の流れる場所として感じられるようになります。</p>



<p class="wp-block-paragraph">休憩中に撮った写真を見返してもよいでしょう。</p>



<p class="wp-block-paragraph">数行だけメモを残す方法もあります。</p>



<ul class="wp-block-list">
<li>坂が多い</li>



<li>犬を連れた人が多い</li>



<li>川の近くまで潮の匂いがする</li>
</ul>



<p class="wp-block-paragraph">文章のように整える必要はありません。</p>



<p class="wp-block-paragraph">断片を残しておくと、次に向かう方角が自然に決まることがあります。</p>



<h2 class="wp-block-heading"><strong>同じ道を通る</strong></h2>



<p class="wp-block-paragraph">効率だけを考えると、同じ道を二度通ることは無駄に見えます。</p>



<p class="wp-block-paragraph">しかし、街を知るためには同じ場所をもう一度通ることが役立ちます。</p>



<p class="wp-block-paragraph">午前中には閉まっていた店が、午後には開いている。</p>



<p class="wp-block-paragraph">人のいなかった広場に、学校帰りの子どもが集まっている。</p>



<p class="wp-block-paragraph">逆光で見えなかった建物の表情が、帰り道には見える。</p>



<p class="wp-block-paragraph">同じ場所でも、時間が変わると見え方も変わります。</p>



<p class="wp-block-paragraph">往復で同じ道を歩くなら、帰りは反対側の歩道を歩いてみます。</p>



<p class="wp-block-paragraph">視線の向きが変わるだけで、最初には気づかなかった看板や入口が見つかります。</p>



<p class="wp-block-paragraph">街は、一度通っただけで見終わるものではありません。</p>



<h2 class="wp-block-heading"><strong>撮らない時間をつくる</strong></h2>



<p class="wp-block-paragraph">写真を撮り続けていると、街を見ることが被写体探しに変わります。</p>



<p class="wp-block-paragraph">光がきれいな場所。</p>



<p class="wp-block-paragraph">特徴的な看板。</p>



<p class="wp-block-paragraph">SNSに載せやすい構図。</p>



<p class="wp-block-paragraph">何かを残そうとするほど、目の前の場所を、写真になるかどうかで判断してしまうことがあります。</p>



<p class="wp-block-paragraph">一区間だけカメラをしまい、音や匂い、足元の傾きを確認します。</p>



<p class="wp-block-paragraph">車の音が急に遠くなる道。</p>



<p class="wp-block-paragraph">飲食店の裏側から漂う匂い。</p>



<p class="wp-block-paragraph">坂を下るときに変わる歩幅。</p>



<p class="wp-block-paragraph">建物の隙間を抜ける風。</p>



<p class="wp-block-paragraph">写真には写らない空気や感覚も、街の一部です。</p>



<p class="wp-block-paragraph">10分でも構いません。</p>



<p class="wp-block-paragraph">カメラを持たずに歩いたあとで、それでも撮りたくなったものがあれば、改めて立ち止まります。</p>



<p class="wp-block-paragraph">そのとき撮るものは、最初に目についたものとは少し違うかもしれません。</p>



<h2 class="wp-block-heading"><strong>記録する量を決める</strong></h2>



<p class="wp-block-paragraph">旅先では、見たものをできるだけ多く残したくなります。</p>



<p class="wp-block-paragraph">しかし、写真やメモが多すぎると後から見返さなくなることもあります。</p>



<p class="wp-block-paragraph">そこで、記録する量を先に決めておきます。</p>



<p class="wp-block-paragraph">写真は30枚まで。</p>



<p class="wp-block-paragraph">レンズは1本まで。</p>



<p class="wp-block-paragraph">メモは5つまで。</p>



<p class="wp-block-paragraph">持ち帰るものは一つだけ。</p>



<p class="wp-block-paragraph">制限は、街を見る範囲を狭めるためではありません。</p>



<p class="wp-block-paragraph">何を残すかを選び、自分が何に最も惹かれたのかを発見するためのものです。</p>



<p class="wp-block-paragraph">同じ場所を何枚も撮る代わりに、一度その場を離れ、少し距離を置いてから戻ってみます。</p>



<p class="wp-block-paragraph">本当に残したいものなら、戻ったあとにも気になるはずです。</p>



<p class="wp-block-paragraph">その場では撮らず、帰宅してから記憶だけで書いてみるのもいいでしょう。</p>



<p class="wp-block-paragraph">写真に残っていないものほど、意外に強く覚えていることがあります。</p>



<h2 class="wp-block-heading"><strong>観光地の裏側へ少しだけ進む</strong></h2>



<p class="wp-block-paragraph">有名な場所を避ける必要はありません。</p>



<p class="wp-block-paragraph">観光地には、その場所が長く残されてきた理由があります。</p>



<p class="wp-block-paragraph">ただし、正面だけを見て終わらず、出口を出てから少しだけ周辺を歩いてみます。</p>



<p class="wp-block-paragraph">寺院の裏側にある住宅地。</p>



<p class="wp-block-paragraph">市場から一本外れた搬入口。</p>



<p class="wp-block-paragraph">美術館の隣にある公園。</p>



<p class="wp-block-paragraph">観光客の流れが途切れる場所まで進むと、その場所が日常とどのようにつながっているかが見えてきます。</p>



<p class="wp-block-paragraph">ただし、生活の場所へ入り込むときは、距離を保つ必要があります。</p>



<p class="wp-block-paragraph">私有地に入らない。</p>



<p class="wp-block-paragraph">住宅の窓へカメラを向けない。</p>



<p class="wp-block-paragraph">通行の邪魔になる場所で、長時間立ち止まらない。</p>



<p class="wp-block-paragraph">街を見ることと、他人の生活を無遠慮に覗くことは異なります。</p>



<p class="wp-block-paragraph">見つけたものを持ち帰る前に、その場所の静けさを壊していないかを確認します。</p>



<h2 class="wp-block-heading"><strong>天候に歩き方を合わせる</strong></h2>



<p class="wp-block-paragraph">街歩きは、晴れた日にだけ成立するものではありません。</p>



<p class="wp-block-paragraph">雨の日には、軒下やアーケード、人が雨宿りする場所が見えてきます。</p>



<p class="wp-block-paragraph">暑い日は、木陰や地下道、風が通る道が分かります。</p>



<p class="wp-block-paragraph">寒い日は、日向のベンチや暖房のある公共施設に人が集まります。</p>



<p class="wp-block-paragraph">天候は街の使われ方を変えます。</p>



<p class="wp-block-paragraph">無理に予定を守るのではなく、その日の条件に合わせて歩き方を変えます。</p>



<p class="wp-block-paragraph">雨が強ければLineを短くする。</p>



<p class="wp-block-paragraph">暑ければ休憩地点を増やす。</p>



<p class="wp-block-paragraph">夕方から晴れるなら、昼は喫茶店や図書館で過ごし、光が変わる時間に外へ出る。</p>



<p class="wp-block-paragraph">予定を変更することは、旅の失敗ではありません。</p>



<p class="wp-block-paragraph">その日の街に合わせて、観察方法を調整した結果です。</p>



<h2 class="wp-block-heading"><strong>帰る前に一度立ち止まる</strong></h2>



<p class="wp-block-paragraph">駅に着いたら、すぐに改札へ入らず、少しだけ街の方を振り返ります。</p>



<p class="wp-block-paragraph">最初に降りたときと、何が変わって見えるでしょうか。</p>



<p class="wp-block-paragraph">通った道の方向。</p>



<p class="wp-block-paragraph">休憩した店の位置。</p>



<p class="wp-block-paragraph">川や坂との距離。</p>



<p class="wp-block-paragraph">朝には知らなかった場所が、いくつか頭の中でつながっているはずです。</p>



<p class="wp-block-paragraph">すべての道を覚えていなくても構いません。</p>



<p class="wp-block-paragraph">「駅の向こうに古い商店街がある」</p>



<p class="wp-block-paragraph">「川は街の東側を流れている」</p>



<p class="wp-block-paragraph">「夕方になると人は坂の上へ帰っていく」</p>



<p class="wp-block-paragraph">その程度の輪郭が残れば、その街はもう地図上の名前だけではありません。</p>



<p class="wp-block-paragraph">帰りの電車では、写真を整理しすぎない方がよいこともあります。</p>



<p class="wp-block-paragraph">家に着くまでが旅です。</p>



<p class="wp-block-paragraph">帰りの電車で窓の外に目を向け、その日に見聞きしたものの余韻に浸る時間も、旅の一部です。</p>



<p class="wp-block-paragraph">あるいは、窓の外の景色をカメラに収めるのもいいでしょう。</p>



<p class="wp-block-paragraph">削除や加工はあとにして、その日いちばん覚えている場所を一つだけ書き留めるのもいいでしょう。</p>



<p class="wp-block-paragraph">目立つ場所でなくても構いません。</p>



<p class="wp-block-paragraph">路地の奥にあった椅子。</p>



<p class="wp-block-paragraph">閉店した店のガラス。</p>



<p class="wp-block-paragraph">川を渡るときに吹いた風。</p>



<p class="wp-block-paragraph">旅の記憶は、代表的な風景だけでできているわけではありません。</p>



<h2 class="wp-block-heading"><strong>すべてを見なくていい</strong></h2>



<p class="wp-block-paragraph">一度の旅で、その街を理解することはできません。</p>



<p class="wp-block-paragraph">歴史を調べ、名所を回り、人気の店を訪れても、そこで暮らす人の生活まですべて知ることはできません。</p>



<p class="wp-block-paragraph">だからこそ、見残すことを失敗だと考えなくてもよいのだと思います。</p>



<p class="wp-block-paragraph">一本の道。</p>



<p class="wp-block-paragraph">一軒の店。</p>



<p class="wp-block-paragraph">太陽の光。</p>



<p class="wp-block-paragraph">小さな範囲だけを持ち帰る方が、次に戻る理由が残ることもあります。</p>



<p class="wp-block-paragraph">今回は川の東側を歩いたから、次は西側へ行く。</p>



<p class="wp-block-paragraph">昼の商店街を見たから、次は店が閉まる頃に訪れる。</p>



<p class="wp-block-paragraph">雨で坂の上まで行けなかったから、季節を変えて戻ってみる。</p>



<p class="wp-block-paragraph">見られなかったものは、旅の不足ではなく、次の入口になります。</p>



<p class="wp-block-paragraph">街を知ることは、情報を集めることではありません。</p>



<p class="wp-block-paragraph">観光地を制覇することでも、地図を完全に埋めることでもありません。</p>



<p class="wp-block-paragraph">その場所の速さに、一度だけ自分の歩幅を合わせてみることです。</p>



<p class="wp-block-paragraph">急ぐ人が多ければ、その流れを少し離れた場所から見る。</p>



<p class="wp-block-paragraph">誰も歩いていない道では、足音を聞きながらゆっくり進む。</p>



<p class="wp-block-paragraph">店が開くのを待つ時間があれば、その前の通りを眺めてみる。</p>



<p class="wp-block-paragraph">街を歩いたあとに残るのは、訪れた場所の数だけではありません。</p>



<p class="wp-block-paragraph">そこで少し立ち止まった時間や、理由もなく曲がった道、撮らずに通り過ぎた風景も残ります。</p>



<p class="wp-block-paragraph">予定に空白をつくることは、何もしない時間を増やすことではありません。</p>



<p class="wp-block-paragraph">まだ名前のついていないものが入ってくる余地を残すことです。</p>



<p class="wp-block-paragraph">予定を一つ減らしてみてください。</p>



<p class="wp-block-paragraph">空いた時間が、その街に出会う時間になります。</p>



<p class="wp-block-paragraph">有名な場所を見るだけではなく、<br>その場所が日常へ戻っていく境界まで歩いてみる。</p>



<p class="wp-block-paragraph">そうすると、その街は観光地ではなく、誰かが暮らす場所として見えてきます。</p>



<p class="wp-block-paragraph">街にも呼吸があります。</p>



<p class="wp-block-paragraph">歩く速さを少し落とすと、その呼吸が聞こえてきます。</p>



<h2 class="wp-block-heading"><strong>今日のGuide</strong></h2>



<p class="wp-block-paragraph">次のうち、一つだけ試してみてください。</p>



<ul class="wp-block-list">
<li>匂いに意識を向けて、一区間歩く</li>



<li>聞こえてきた音を手がかりに、進む方向を決める</li>



<li>最初に行こうと思った道を一本だけ外れてみる</li>
</ul>



<p class="wp-block-paragraph">何かを発見しなければならないわけではありません。</p>



<p class="wp-block-paragraph">いつもとは違う感覚を一つ使って歩いた経験が、次の旅で街を見る手がかりになります。</p>



<p class="wp-block-paragraph">目に見えるものを追うだけでなく、音や匂い、風や足元の傾きにも意識を向けてみてください。</p>



<p class="wp-block-paragraph">街の印象は、写真に写るものだけでできているわけではありません。</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/unknown-city-travel-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1502</post-id>	</item>
		<item>
		<title>Guide Soundtrack</title>
		<link>https://tranquilguides.com/reading-with-sound/</link>
					<comments>https://tranquilguides.com/reading-with-sound/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Sat, 11 Jul 2026 21:08:14 +0000</pubDate>
				<category><![CDATA[生存ログ]]></category>
		<category><![CDATA[Guide Soundtrack]]></category>
		<category><![CDATA[実験]]></category>
		<category><![CDATA[読書]]></category>
		<category><![CDATA[音楽]]></category>
		<guid isPermaLink="false">https://tranquilguides.com/?p=1464</guid>

					<description><![CDATA[音楽は、読む時間にどこまで自然に寄り添えるのか。Guide Soundtrackの小さな実験です。]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-center wp-block-paragraph">静かな場所で、お試しください。</p>


	<section id="tq-gs-1464" class="tq-gs" data-provider="soundcloud" data-player-id="tq-gs-1464-master">
		<div class="tq-gs__entry">
			<p class="tq-gs__brand">GUIDE SOUNDTRACK</p>
			<div class="tq-gs__heading" role="heading" aria-level="2">Soundtrack for this guide</div>
			<p class="tq-gs__description">このガイドには、読む時間のための音楽があります。</p>
			<div class="tq-gs__actions">
				<button type="button" class="tq-gs__start" disabled>
					<span class="tq-gs__start-icon" aria-hidden="true">♪</span>
					<span class="tq-gs__start-label">音楽とともに読む</span>
				</button>
				<button type="button" class="tq-gs__silent">静かに読む</button>
			</div>
			<p class="tq-gs__status" aria-live="polite">プレイヤーを準備しています。</p>
		</div>

		<div class="tq-gs__article-start" tabindex="-1"></div>

		<div class="tq-gs__master-wrap" aria-hidden="true">
			<iframe id="tq-gs-1464-master" class="tq-gs__master-soundcloud" title="SoundCloud player" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https://soundcloud.com/blue-healer-usa/luminescent-eyes&#038;color=#111416&#038;auto_play=false&#038;hide_related=true&#038;show_comments=false&#038;show_user=false&#038;show_reposts=false&#038;show_teaser=false&#038;visual=false"></iframe>		</div>

		<div class="tq-gs__data" data-title="Luminescent Eyes" data-artist="Blue Healer" hidden></div>
	</section>
	



<p class="has-text-align-center wp-block-paragraph">アイキャッチ [静かな椅子や窓辺]</p>



<p class="has-text-align-center wp-block-paragraph">あなたが今いる場所は、今日だけの読書室です。</p>



<p class="has-text-align-center wp-block-paragraph">もしよければ、音楽とともに読み始めてください。</p>



<p class="has-text-align-center wp-block-paragraph">音がなくても、この文章は変わりません。</p>



<p class="has-text-align-center wp-block-paragraph">けれど、同じ文章でも、聞こえている音が違えば、残る記憶も少し変わります。</p>



<p class="has-text-align-center wp-block-paragraph">このページは、Guide Soundtrack のテストページです。</p>



<p class="has-text-align-center wp-block-paragraph">読書の入口として、音楽はどこまで自然に寄り添えるのか。</p>



<p class="has-text-align-center wp-block-paragraph">その小さな実験に、付き合っていただければ幸いです。</p>


	<section class="tq-gs-player" data-controller-for="tq-gs-1464">
		<p class="tq-gs-player__label">GUIDE SOUNDTRACK</p>

		<div class="tq-gs-player__card">
			<div class="tq-gs-player__artwork-wrap" aria-hidden="true">
				<img decoding="async" class="tq-gs-player__artwork" src="" alt="" hidden>
				<div class="tq-gs-player__placeholder"><span>♪</span></div>
			</div>

			<div class="tq-gs-player__copy">
				<p class="tq-gs-player__track">Luminescent Eyes</p>
				<p class="tq-gs-player__artist">Blue Healer</p>
				<p class="tq-gs-player__state" aria-live="polite">準備しています。</p>
			</div>

			<button type="button" class="tq-gs-player__toggle" disabled aria-label="再生">
				<span class="tq-gs-player__toggle-icon" aria-hidden="true"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25b6.png" alt="▶" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span>
			</button>
		</div>
	</section>
	
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/reading-with-sound/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1464</post-id>	</item>
		<item>
		<title>知らないものにはまだ名前がないだけ</title>
		<link>https://tranquilguides.com/ghost/</link>
					<comments>https://tranquilguides.com/ghost/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Sat, 11 Jul 2026 12:32:55 +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>
		<category><![CDATA[記憶]]></category>
		<category><![CDATA[認識]]></category>
		<category><![CDATA[読みもの]]></category>
		<category><![CDATA[静けさ]]></category>
		<guid isPermaLink="false">https://tranquilguides.com/?p=1449</guid>

					<description><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_213040-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>引っ越した部屋で見つかる一枚の付箋。誰が書いたのか分からない短い文章は、少しだけ現実と重なっている。見えないものには、本当に名前がないだけなのかもしれない。]]></description>
										<content:encoded><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_213040-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="wp-block-paragraph">私が引っ越してから不思議なことが続いた。</p>



<p class="wp-block-paragraph">最初は気のせいだと思った。</p>



<p class="wp-block-paragraph">部屋の机にはいつも、一冊のノートを置いていた。</p>



<p class="wp-block-paragraph">何も書いていない、まっさらなノート。</p>



<p class="wp-block-paragraph">ある朝そのノートを開くと、1ページだけ増えていた。</p>



<p class="wp-block-paragraph">誰か知らない人の文字。</p>



<p class="wp-block-paragraph">「昨日、玄関で靴を脱ぐ音がした」</p>



<p class="wp-block-paragraph">それだけが記されていた。</p>



<p class="wp-block-paragraph">日記でもない。、予定でもない。、誰かへの手紙でもない。</p>



<p class="wp-block-paragraph">ただ、そう書かれていた。</p>



<p class="wp-block-paragraph">翌朝も、1ページ増えた。</p>



<p class="wp-block-paragraph"><strong>「コップを置く音が少し大きかった」</strong></p>



<p class="wp-block-paragraph">その次の日は、</p>



<p class="wp-block-paragraph"><strong>「窓を2度閉めた」</strong></p>



<p class="wp-block-paragraph">どれも、自分では覚えていないような、小さな出来事ばかりだった。</p>



<p class="wp-block-paragraph">最初は誰かのいたずらだと思った。</p>



<p class="wp-block-paragraph">だから監視カメラを付けた。</p>



<p class="wp-block-paragraph">玄関も、机も、窓も映る位置に。</p>



<p class="wp-block-paragraph">翌朝、映像を見返す。</p>



<p class="wp-block-paragraph">でも夜の部屋には何も映っていなかった。</p>



<p class="wp-block-paragraph">誰も入っていない。</p>



<p class="wp-block-paragraph">ノートにも触れていない。</p>



<p class="wp-block-paragraph">午前3時17分。</p>



<p class="wp-block-paragraph">音だけが記録されていた。</p>



<p class="wp-block-paragraph">紙を1枚づつ、ゆっくりと捲る音。</p>



<p class="wp-block-paragraph">映像を止めて、何度も音だけを聞いた。</p>



<p class="wp-block-paragraph">不思議なことに、聞くたびにページを捲る枚数だけが変わった。</p>



<p class="wp-block-paragraph">それだけだった。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">それから毎朝、ノートを開くことが日課になった。</p>



<p class="wp-block-paragraph">そしてある夜、駅を出ると突然雨が降った。</p>



<p class="wp-block-paragraph">私は急いで帰り、濡れた折り畳み傘を玄関に立て掛ける。</p>



<p class="wp-block-paragraph">部屋へ入り、無意識にノートを開く。</p>



<p class="wp-block-paragraph">そこには、</p>



<p class="wp-block-paragraph"><strong>「玄関には、濡れた傘が1本ある」</strong></p>



<p class="wp-block-paragraph">とだけ書かれていた。</p>



<p class="wp-block-paragraph">予言ではなかった。</p>



<p class="wp-block-paragraph">報告とも違った。</p>



<p class="wp-block-paragraph">ただ、この部屋には、私が見たものを、私より少し遅れて見ている誰かがいる。</p>



<p class="wp-block-paragraph">そんな考えが、一度だけ頭をよぎった。</p>



<p class="wp-block-paragraph">その考えは、すぐに忘れることにした。</p>



<p class="wp-block-paragraph">そんな気がした。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">その日を境に、文章は少しだけ変わった。</p>



<p class="wp-block-paragraph"><strong>「今日はこちらを見ていた」</strong></p>



<p class="wp-block-paragraph">その日から、ページを捲る前に、部屋を見回す癖がついた。</p>



<p class="wp-block-paragraph">誰もいない。</p>



<p class="wp-block-paragraph">そう確認してから、ノートを開くようになった。</p>



<p class="wp-block-paragraph">そう思って振り返る。</p>



<p class="wp-block-paragraph">何もない。</p>



<p class="wp-block-paragraph">それでも、「何もない」という確信だけが少し揺らいだ。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">ある朝。</p>



<p class="wp-block-paragraph">ノートは白紙だった。</p>



<p class="wp-block-paragraph">ページは増えている。</p>



<p class="wp-block-paragraph">けれど一文字も書かれていない。</p>



<p class="wp-block-paragraph">私は、その白紙のページを閉じた。</p>



<p class="wp-block-paragraph">それ以上、確かめようとは思わなかった。</p>



<p class="wp-block-paragraph">翌朝からページは増えなくなった。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">それから何年も経って、引っ越しの日が来た。</p>



<p class="wp-block-paragraph">荷物を運び終え、最後に部屋を見回す。</p>



<p class="wp-block-paragraph">机の周りはどこもかしこも空だった。</p>



<p class="wp-block-paragraph">ノートもない。</p>



<p class="wp-block-paragraph">電気を消し、玄関の鍵を閉める。</p>



<p class="wp-block-paragraph">廊下を歩き始める。</p>



<p class="wp-block-paragraph">数歩進んだところで、後ろから音がした。</p>



<p class="wp-block-paragraph">紙をゆっくりと捲る音だった。</p>



<p class="wp-block-paragraph">立ち止まる。</p>



<p class="wp-block-paragraph">振り返ろうとして、足だけが止まった。</p>



<p class="wp-block-paragraph">そのまま、振り返らずに歩いた。</p>



<p class="wp-block-paragraph">理由は、今でも思い出せない。</p>



<p class="wp-block-paragraph">ただ、振り返ってはいけない気がした。</p>



<p class="wp-block-paragraph">そのまま階段を下りる。</p>



<p class="wp-block-paragraph">外へ出る。</p>



<p class="wp-block-paragraph">空は薄く曇っていた。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">それ以来、あの部屋を思い出すことはほとんどない。</p>



<p class="wp-block-paragraph">それでも新しいノートを開くたび、最初のページだけは少し時間を置いてから捲る。</p>



<p class="wp-block-paragraph">その癖だけが、あの部屋から持ち帰ったものだった。</p>



<p class="wp-block-paragraph">もし、あの日の続きを書こうとしている誰かがいるなら、邪魔をしたくないからだ。</p>



<p class="wp-block-paragraph">あの部屋で何が起きていたのか、今でも分からない。</p>



<p class="wp-block-paragraph">ただ、知らないものにはまだ、名前がないだけなのかもしれない。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/ghost/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1449</post-id>	</item>
		<item>
		<title>記憶の残し方診断</title>
		<link>https://tranquilguides.com/memory-trace-reading/</link>
					<comments>https://tranquilguides.com/memory-trace-reading/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Sat, 11 Jul 2026 02:35:47 +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=1445</guid>

					<description><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_113430-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>景色、音、匂い、体温、誰かとの距離。12の場面をたどりながら、あなたの記憶がどんな感覚を入口にして残るのかを見つめるWeb診断です。]]></description>
										<content:encoded><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_113430-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>
<!--
記憶の残し方診断 / Version 1.0
WordPress（SWELL）の「カスタムHTML」ブロックへ、このファイルの内容を丸ごと貼り付けてください。

設計
- 12問
- 8種類の結果
- 前の質問へ戻る
- 結果と記録をコピー
- Web Share API
- X / Threads向け共有
- 角丸PNG画像保存（1080 × 1350）
- 日付入りファイル名
- iPhone / iPadでは共有シートを優先
- h1〜h6不使用、SWELLの見出し干渉を回避
- JavaScript内で && を不使用（WordPressのHTMLエンティティ変換対策）

画像について
結果画像はCSSだけでも成立します。
実写画像を使う場合は JavaScript 内 results の image: "" にURLを入れてください。
-->

<div class="mr-test" id="mrTest">
  <section class="mr-screen mr-intro" id="mrIntro">
    <div class="mr-orbit" aria-hidden="true"><span></span><span></span><span></span></div>
    <p class="mr-kicker">Memory Trace Reading</p>
    <div class="mr-title-hero" role="heading" aria-level="1">記憶の残し方診断</div>
    <div class="mr-lead">
      <p>同じ時間を過ごしても、残るものは人によって違います。</p>
      <p>景色、音、匂い、体温、言葉にならなかった余白。</p>
    </div>
    <div class="mr-note">
      <p>12の場面から、あなたの記憶が</p>
      <p>どんな輪郭を選んで残るのかを見つめます。</p>
      <p>これは記憶力を測る診断ではありません。</p>
    </div>
    <button class="mr-btn mr-btn-main" id="mrStartBtn" type="button">記憶をたどる</button>
    <p class="mr-duration">約3〜5分</p>
  </section>

  <section class="mr-screen mr-quiz" id="mrQuiz" hidden="">
    <div class="mr-quiz-head">
      <button class="mr-back" id="mrBackBtn" type="button" aria-label="ひとつ前の質問へ戻る">← 戻る</button>
      <p class="mr-progress" id="mrProgress">01 / 12</p>
    </div>
    <div class="mr-progress-track" aria-hidden="true"><span id="mrProgressBar"></span></div>
    <p class="mr-scene-label" id="mrSceneLabel">SCENE 01</p>
    <div class="mr-question" id="mrQuestion" role="heading" aria-level="2"></div>
    <p class="mr-scene-text" id="mrSceneText"></p>
    <div class="mr-options" id="mrOptions"></div>
    <p class="mr-choice-note">考えすぎず、最初に浮かんだものを選ぶのがおすすめです。</p>
  </section>

  <section class="mr-screen mr-result" id="mrResult" hidden="">
    <p class="mr-kicker">Your Memory Trace</p>

    <article class="mr-result-card">
      <div class="mr-result-visual" id="mrResultVisual" role="img" aria-label="診断結果の抽象的な風景">
        <span class="mr-trace mr-trace-a"></span>
        <span class="mr-trace mr-trace-b"></span>
        <span class="mr-trace mr-trace-c"></span>
      </div>

      <div class="mr-result-body">
        <p class="mr-result-prefix">あなたの記憶は</p>
        <div class="mr-result-title" id="mrResultTitle" role="heading" aria-level="2"></div>
        <p class="mr-result-en" id="mrResultEn"></p>
        <p class="mr-result-subtitle" id="mrResultSubtitle"></p>
        <div class="mr-divider"></div>
        <div class="mr-result-text" id="mrResultText"></div>

        <div class="mr-insight-grid">
          <section class="mr-insight">
            <p class="mr-insight-label">残りやすいもの</p>
            <p id="mrResultKeeps"></p>
          </section>
          <section class="mr-insight">
            <p class="mr-insight-label">見落としやすいもの</p>
            <p id="mrResultMisses"></p>
          </section>
          <section class="mr-insight mr-insight-wide">
            <p class="mr-insight-label">あなたに合う残し方</p>
            <p id="mrResultPractice"></p>
          </section>
        </div>

        <details class="mr-score-details">
          <summary>記憶の輪郭を見る</summary>
          <div class="mr-score-list" id="mrScoreList"></div>
        </details>

        <div class="mr-reflection">
          <p class="mr-reflection-label">持ち帰る問い</p>
          <p id="mrResultQuestion"></p>
        </div>

        <div class="mr-record-box">
          <label for="mrRecordText">今日、残しておきたい断片</label>
          <textarea id="mrRecordText" rows="6" placeholder="出来事を説明しなくても構いません。色、音、匂い、体温、誰かの一言。残った断片だけを書いてください。"></textarea>
        </div>
      </div>
    </article>

    <div class="mr-actions">
      <button class="mr-btn" id="mrCopyBtn" type="button">結果をコピー</button>
      <button class="mr-btn" id="mrShareBtn" type="button">結果をシェア</button>
      <button class="mr-btn" id="mrTextShareBtn" type="button">XやThreadsへ共有</button>
      <button class="mr-btn" id="mrSaveBtn" type="button">画像を保存</button>
      <button class="mr-btn mr-btn-sub mr-btn-wide" id="mrRestartBtn" type="button">再診断</button>
    </div>

    <div class="mr-result-note">
      <p>記憶の残り方は、固定された性格ではありません。</p>
      <p>場所や関係、心身の状態によって、別の輪郭が前に出ることがあります。</p>
    </div>
  </section>

  <div class="mr-capture" id="mrCapture" aria-hidden="true">
    <div class="mr-capture-bg"></div>
    <div class="mr-capture-grain"></div>
    <div class="mr-capture-inner">
      <div class="mr-capture-top">
        <p class="mr-capture-brand">Tranquilvæj</p>
        <p class="mr-capture-date"></p>
      </div>
      <div class="mr-capture-main">
        <p class="mr-capture-test">記憶の残し方診断</p>
        <p class="mr-capture-kicker">YOUR MEMORY TRACE</p>
        <div class="mr-capture-title"></div>
        <p class="mr-capture-en"></p>
        <div class="mr-capture-line"></div>
        <p class="mr-capture-subtitle"></p>
        <p class="mr-capture-text"></p>
      </div>
      <div class="mr-capture-bottom">
        <div class="mr-capture-question-wrap">
          <p>QUESTION TO CARRY</p>
          <div class="mr-capture-question"></div>
        </div>
        <div class="mr-capture-record-wrap" hidden="">
          <p>TODAY&#8217;S FRAGMENT</p>
          <div class="mr-capture-record"></div>
        </div>
        <p class="mr-capture-url">tranquilguides.com</p>
      </div>
    </div>
  </div>
</div>

<style>
.mr-test{
  --mr-ink:#202a2b;
  --mr-muted:rgba(32,42,43,.62);
  --mr-faint:rgba(32,42,43,.42);
  --mr-line:rgba(32,42,43,.12);
  --mr-panel:rgba(255,255,255,.60);
  --mr-panel-strong:rgba(255,255,255,.78);
  --mr-accent:#425d59;
  width:100%;
  max-width:800px;
  margin:0 auto;
  padding:clamp(54px,8vw,92px) 20px;
  box-sizing:border-box;
  color:var(--mr-ink);
  font-family:inherit;
}
.mr-test *, .mr-test *::before, .mr-test *::after{box-sizing:border-box;}
.mr-screen[hidden]{display:none !important;}
.mr-screen{position:relative;animation:mrFade .52s ease both;}
.mr-intro{text-align:center;min-height:590px;display:flex;flex-direction:column;justify-content:center;align-items:center;overflow:hidden;border-radius:34px;padding:clamp(48px,8vw,78px) 22px;background:radial-gradient(circle at 18% 12%,rgba(255,255,255,.82),transparent 31%),radial-gradient(circle at 85% 82%,rgba(91,124,116,.11),transparent 38%),linear-gradient(145deg,rgba(243,242,236,.92),rgba(224,232,228,.72));border:1px solid rgba(32,42,43,.09);box-shadow:0 28px 90px rgba(35,48,47,.09);isolation:isolate;}
.mr-orbit{position:absolute;inset:0;overflow:hidden;z-index:-1;opacity:.64;}
.mr-orbit span{position:absolute;border:1px solid rgba(32,42,43,.10);border-radius:50%;}
.mr-orbit span:nth-child(1){width:460px;height:460px;left:-230px;top:-180px;}
.mr-orbit span:nth-child(2){width:330px;height:330px;right:-145px;bottom:-110px;}
.mr-orbit span:nth-child(3){width:9px;height:9px;left:70%;top:20%;background:rgba(32,42,43,.18);border:0;box-shadow:-290px 270px 0 rgba(32,42,43,.10),-180px -55px 0 rgba(32,42,43,.08);}
.mr-kicker,.mr-progress,.mr-scene-label,.mr-result-prefix,.mr-reflection-label,.mr-insight-label,.mr-duration{margin:0;color:var(--mr-muted);font-size:11px;letter-spacing:.19em;text-transform:uppercase;}
.mr-kicker{margin-bottom:20px;text-align:center;}
.mr-title-hero,.mr-question,.mr-result-title{margin:0;color:var(--mr-ink) !important;font-family:inherit;font-weight:500 !important;letter-spacing:.055em !important;text-wrap:balance;}
.mr-title-hero{font-size:clamp(30px,5.7vw,46px) !important;line-height:1.5 !important;margin-bottom:30px !important;}
.mr-lead{max-width:590px;font-size:16px;line-height:2.05;letter-spacing:.035em;}
.mr-lead p,.mr-note p,.mr-result-note p{margin:.18em 0;}
.mr-note{max-width:540px;margin-top:28px;color:var(--mr-muted);font-size:13px;line-height:1.95;}
.mr-duration{margin-top:17px;}
.mr-btn{position:relative;appearance:none;-webkit-appearance:none;overflow:hidden;min-height:49px;padding:13px 24px;border:1px solid rgba(255,255,255,.72) !important;border-radius:999px;background:radial-gradient(circle at 50% 40%,rgba(255,255,255,.16),rgba(255,255,255,.48)) !important;color:var(--mr-ink) !important;font:inherit;font-size:13px;letter-spacing:.07em;line-height:1.5;cursor:pointer;box-shadow:inset 2px 2px 2px rgba(255,255,255,.68),inset -2px -2px 2px rgba(0,0,0,.055),0 8px 24px rgba(35,48,47,.07) !important;transition:transform .24s ease,background .24s ease,color .24s ease,border-color .24s ease,box-shadow .24s ease;backdrop-filter:blur(6px) saturate(125%);-webkit-backdrop-filter:blur(6px) saturate(125%);}
.mr-btn::before{content:"";position:absolute;inset:1px;border-radius:inherit;background:linear-gradient(145deg,rgba(255,255,255,.72),transparent 38%);pointer-events:none;opacity:.62;}
.mr-btn-main{margin-top:34px;min-width:210px;}
@media (hover:hover) and (pointer:fine){.mr-btn:hover{transform:translateY(-2px);background:var(--mr-accent) !important;color:#fff !important;border-color:var(--mr-accent) !important;box-shadow:0 13px 30px rgba(35,48,47,.16) !important;}.mr-option:hover{transform:translateY(-2px);border-color:rgba(32,42,43,.28);background:rgba(255,255,255,.88);}}
.mr-btn:active,.mr-option:active{transform:scale(.985);}
.mr-btn:focus-visible,.mr-option:focus-visible,.mr-back:focus-visible,textarea:focus-visible,summary:focus-visible{outline:2px solid rgba(66,93,89,.55);outline-offset:3px;}
.mr-quiz{max-width:700px;margin:0 auto;padding:12px 0 28px;}
.mr-quiz-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:13px;}
.mr-back{appearance:none;border:0;background:transparent;color:var(--mr-muted);font:inherit;font-size:12px;letter-spacing:.08em;cursor:pointer;padding:8px 0;}
.mr-back[disabled]{opacity:.22;cursor:default;}
.mr-progress-track{height:1px;background:var(--mr-line);overflow:hidden;margin-bottom:clamp(46px,8vw,72px);}
.mr-progress-track span{display:block;width:0;height:100%;background:var(--mr-accent);transition:width .35s ease;}
.mr-scene-label{text-align:center;margin-bottom:14px;}
.mr-question{max-width:650px;margin:0 auto 14px !important;text-align:center;font-size:clamp(22px,4.3vw,33px) !important;line-height:1.62 !important;}
.mr-scene-text{max-width:590px;margin:0 auto;text-align:center;color:var(--mr-muted);font-size:14px;line-height:1.9;letter-spacing:.025em;}
.mr-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px;margin:35px auto 0;}
.mr-option{appearance:none;-webkit-appearance:none;width:100%;min-height:92px;padding:17px 19px;border:1px solid rgba(32,42,43,.13);border-radius:21px;background:rgba(255,255,255,.55);color:var(--mr-ink);font:inherit;font-size:14px;line-height:1.75;letter-spacing:.025em;cursor:pointer;box-shadow:0 14px 42px rgba(35,48,47,.045);transition:transform .22s ease,border-color .22s ease,background .22s ease;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);}
.mr-choice-note{text-align:center;margin:20px 0 0;color:var(--mr-faint);font-size:11px;line-height:1.7;}
.mr-result-card{overflow:hidden;border:1px solid rgba(32,42,43,.09);border-radius:34px;background:var(--mr-panel);box-shadow:0 28px 90px rgba(35,48,47,.09);backdrop-filter:blur(20px) saturate(120%);-webkit-backdrop-filter:blur(20px) saturate(120%);}
.mr-result-visual{position:relative;aspect-ratio:16/9;overflow:hidden;background:linear-gradient(145deg,#dfe6e2,#f1eee7);background-size:cover;background-position:center;isolation:isolate;}
.mr-result-visual::before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.08),rgba(20,30,30,.10));}
.mr-result-visual::after{content:"";position:absolute;inset:0;background-image:radial-gradient(rgba(255,255,255,.20) .8px,transparent .8px);background-size:4px 4px;mix-blend-mode:soft-light;opacity:.55;}
.mr-trace{position:absolute;border-radius:999px;border:1px solid rgba(255,255,255,.38);filter:blur(.2px);}
.mr-trace-a{width:62%;height:62%;left:-12%;top:-24%;}
.mr-trace-b{width:45%;height:45%;right:-4%;bottom:-20%;}
.mr-trace-c{width:8px;height:8px;left:67%;top:35%;background:rgba(255,255,255,.55);border:0;box-shadow:-250px 90px 0 rgba(255,255,255,.26),150px -75px 0 rgba(255,255,255,.20);}
.mr-result-body{padding:clamp(34px,6vw,58px);}
.mr-result-prefix{text-align:center;margin-bottom:13px;}
.mr-result-title{text-align:center;font-size:clamp(30px,5.4vw,44px) !important;line-height:1.4 !important;}
.mr-result-en{text-align:center;margin:8px 0 0;color:var(--mr-faint);font-size:11px;letter-spacing:.19em;text-transform:uppercase;}
.mr-result-subtitle{max-width:560px;margin:22px auto 0;text-align:center;color:var(--mr-muted);font-size:15px;line-height:1.95;}
.mr-divider{width:42px;height:1px;margin:34px auto;background:rgba(32,42,43,.20);}
.mr-result-text{max-width:600px;margin:0 auto;font-size:15px;line-height:2.1;letter-spacing:.025em;color:rgba(32,42,43,.82);}
.mr-result-text p{margin:0 0 1.35em;}
.mr-insight-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:36px;}
.mr-insight{padding:19px 20px;border:1px solid var(--mr-line);border-radius:18px;background:rgba(255,255,255,.40);}
.mr-insight-wide{grid-column:1/-1;}
.mr-insight-label{margin-bottom:10px;}
.mr-insight p:last-child{margin:0;color:rgba(32,42,43,.76);font-size:13px;line-height:1.85;}
.mr-score-details{margin-top:30px;border-top:1px solid var(--mr-line);border-bottom:1px solid var(--mr-line);}
.mr-score-details summary{padding:17px 2px;cursor:pointer;color:var(--mr-muted);font-size:12px;letter-spacing:.08em;list-style:none;}
.mr-score-details summary::-webkit-details-marker{display:none;}
.mr-score-details summary::after{content:"＋";float:right;}
.mr-score-details[open] summary::after{content:"−";}
.mr-score-list{padding:2px 0 20px;display:grid;gap:10px;}
.mr-score-row{display:grid;grid-template-columns:112px 1fr 34px;align-items:center;gap:11px;font-size:11px;color:var(--mr-muted);}
.mr-score-track{height:4px;border-radius:999px;background:rgba(32,42,43,.08);overflow:hidden;}
.mr-score-track span{display:block;height:100%;border-radius:inherit;background:var(--mr-accent);}
.mr-score-value{text-align:right;font-variant-numeric:tabular-nums;}
.mr-reflection{margin-top:36px;padding:26px;border-radius:21px;background:linear-gradient(145deg,rgba(66,93,89,.08),rgba(255,255,255,.30));border:1px solid rgba(66,93,89,.10);text-align:center;}
.mr-reflection-label{margin-bottom:12px;}
.mr-reflection p:last-child{margin:0;font-size:16px;line-height:1.95;letter-spacing:.035em;}
.mr-record-box{margin-top:34px;}
.mr-record-box label{display:block;margin-bottom:12px;color:var(--mr-muted);font-size:12px;letter-spacing:.10em;}
.mr-record-box textarea{display:block;width:100%;min-height:150px;padding:18px;border:1px solid rgba(32,42,43,.14);border-radius:19px;background:rgba(255,255,255,.50);color:var(--mr-ink);font:inherit;font-size:14px;line-height:1.8;resize:vertical;}
.mr-record-box textarea:focus{border-color:rgba(66,93,89,.44);background:rgba(255,255,255,.75);outline:none;}
.mr-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:18px auto 0;}
.mr-actions .mr-btn{width:100%;}
.mr-btn-wide{grid-column:1/-1;opacity:.72;}
.mr-result-note{margin-top:30px;text-align:center;color:var(--mr-muted);font-size:12px;line-height:1.9;}
.mr-capture{position:fixed;left:-10000px;top:0;width:1080px;height:1350px;overflow:hidden;border-radius:72px;background:#dfe5e1;color:#1e2928;font-family:-apple-system,BlinkMacSystemFont,"Hiragino Sans","Noto Sans JP",sans-serif;}
.mr-capture-bg{position:absolute;inset:0;background:radial-gradient(700px 700px at 8% 8%,rgba(255,255,255,.95),transparent 63%),radial-gradient(720px 720px at 102% 92%,rgba(69,100,91,.28),transparent 64%),linear-gradient(145deg,#ebe9e2,#cbd9d3);background-size:cover;background-position:center;}
.mr-capture-bg::before,.mr-capture-bg::after{content:"";position:absolute;border:1px solid rgba(255,255,255,.36);border-radius:50%;}
.mr-capture-bg::before{width:740px;height:740px;left:-390px;top:-330px;}
.mr-capture-bg::after{width:590px;height:590px;right:-300px;bottom:-210px;}
.mr-capture-grain{position:absolute;inset:0;opacity:.17;background-image:radial-gradient(rgba(255,255,255,.8) .8px,transparent .8px);background-size:5px 5px;mix-blend-mode:soft-light;}
.mr-capture-inner{position:relative;height:100%;padding:78px 82px 72px;display:flex;flex-direction:column;justify-content:space-between;}
.mr-capture-top{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid rgba(30,41,40,.16);padding-bottom:25px;}
.mr-capture-top p{margin:0;font-size:22px;letter-spacing:.08em;}
.mr-capture-date{opacity:.62;font-size:18px !important;letter-spacing:.12em !important;}
.mr-capture-main{margin-top:56px;}
.mr-capture-test{margin:0 0 54px;font-size:21px;letter-spacing:.14em;opacity:.68;}
.mr-capture-kicker{margin:0 0 18px;font-size:16px;letter-spacing:.24em;opacity:.56;}
.mr-capture-title{font-family:"Hiragino Mincho ProN","Yu Mincho",serif;font-size:72px;line-height:1.28;letter-spacing:.08em;font-weight:500;}
.mr-capture-en{margin:15px 0 0;font-size:17px;letter-spacing:.24em;opacity:.54;text-transform:uppercase;}
.mr-capture-line{width:72px;height:1px;background:rgba(30,41,40,.34);margin:43px 0 34px;}
.mr-capture-subtitle{margin:0;font-size:25px;line-height:1.75;letter-spacing:.05em;max-width:850px;}
.mr-capture-text{margin:28px 0 0;max-width:850px;font-size:21px;line-height:1.9;opacity:.76;}
.mr-capture-bottom{margin-top:auto;}
.mr-capture-question-wrap,.mr-capture-record-wrap{border-top:1px solid rgba(30,41,40,.16);padding-top:26px;margin-top:26px;}
.mr-capture-question-wrap p,.mr-capture-record-wrap p{margin:0 0 11px;font-size:14px;letter-spacing:.20em;opacity:.53;}
.mr-capture-question,.mr-capture-record{font-size:22px;line-height:1.72;letter-spacing:.04em;}
.mr-capture-url{margin:32px 0 0;text-align:right;font-size:16px;letter-spacing:.14em;opacity:.55;}
.mr-test .mr-toast{position:fixed;left:50%;bottom:28px;z-index:999999;transform:translate(-50%,16px);padding:11px 18px;border-radius:999px;background:rgba(30,41,40,.92);color:#fff;font-size:12px;letter-spacing:.05em;opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s ease;}
.mr-test .mr-toast.is-show{opacity:1;transform:translate(-50%,0);}
@keyframes mrFade{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@media(max-width:620px){.mr-test{padding-left:14px;padding-right:14px}.mr-intro{min-height:560px;border-radius:26px;padding-left:18px;padding-right:18px}.mr-options{grid-template-columns:1fr}.mr-option{min-height:74px}.mr-result-card{border-radius:27px}.mr-result-visual{aspect-ratio:4/3}.mr-result-body{padding:31px 20px 36px}.mr-insight-grid{grid-template-columns:1fr}.mr-insight-wide{grid-column:auto}.mr-actions{grid-template-columns:1fr}.mr-btn-wide{grid-column:auto}.mr-score-row{grid-template-columns:92px 1fr 30px}.mr-reflection{padding:22px 17px}}
@media(prefers-reduced-motion:reduce){.mr-screen,.mr-btn,.mr-option,.mr-progress-track span,.mr-toast{animation:none !important;transition:none !important;}}
</style>

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

  const root = document.getElementById("mrTest");
  if (!root) return;

  const TYPE_ORDER = ["scene","sound","body","relation","time","scent","emotion","silence"];
  const TYPE_LABELS = {
    scene:"景色", sound:"音", body:"身体", relation:"関係",
    time:"時間", scent:"匂い", emotion:"感情", silence:"余白"
  };

  const questions = [
    {
      label:"SCENE 01 / 帰宅後",
      q:"短い旅から戻った夜、最初によみがえるものは？",
      text:"荷物をほどく前に、ふと一日を思い返します。",
      options:[
        {text:"窓から見た光や、歩いた道の形",score:{scene:3,time:1}},
        {text:"駅や店で聞いた音、誰かの声",score:{sound:3,relation:1}},
        {text:"風の冷たさや、身体に残る疲れ",score:{body:3,time:1}},
        {text:"一緒にいた人との距離や空気",score:{relation:3,emotion:1}}
      ]
    },
    {
      label:"SCENE 02 / 古い写真",
      q:"数年前の写真を一枚見つけました。どこから記憶が開きますか？",
      text:"写真には、当時のあなたと、見覚えのある部屋が写っています。",
      options:[
        {text:"画面の外にあった景色や光まで思い出す",score:{scene:3,silence:1}},
        {text:"その頃が何月で、どんな日々だったかをたどる",score:{time:3,scene:1}},
        {text:"その場で交わした言葉や声の調子を思い出す",score:{sound:2,relation:2}},
        {text:"写真を見るだけで、当時の気持ちが戻ってくる",score:{emotion:3,body:1}}
      ]
    },
    {
      label:"SCENE 03 / 雨のあと",
      q:"雨上がりの道で、急に昔を思い出すとしたら？",
      text:"何がきっかけだったのか、すぐには説明できません。",
      options:[
        {text:"濡れた土やアスファルトの匂い",score:{scent:3,scene:1}},
        {text:"軒先から落ちる水滴や、遠い車の音",score:{sound:3,scene:1}},
        {text:"湿度や服に触れる空気の重さ",score:{body:3,scent:1}},
        {text:"雨の日に言えなかったこと",score:{silence:3,emotion:1}}
      ]
    },
    {
      label:"SCENE 04 / 映画の翌日",
      q:"映画を観た翌日まで残っているものは？",
      text:"筋書きは少しずつ曖昧になっています。",
      options:[
        {text:"一つの画面構成や色、人物の佇まい",score:{scene:3,silence:1}},
        {text:"音楽、環境音、忘れられない台詞",score:{sound:3,emotion:1}},
        {text:"観ていた間に生まれた感情の揺れ",score:{emotion:3,body:1}},
        {text:"物語の余韻や、説明されなかった部分",score:{silence:3,time:1}}
      ]
    },
    {
      label:"SCENE 05 / 誰かの部屋",
      q:"久しぶりに訪れた部屋で、変化に気づくのはどこから？",
      text:"家具の配置は似ていますが、以前と何かが違います。",
      options:[
        {text:"窓辺や棚の配置、光の入り方",score:{scene:3,time:1}},
        {text:"その人の話し方や、沈黙の長さ",score:{relation:2,silence:2}},
        {text:"部屋の匂い、布や木の香り",score:{scent:3,body:1}},
        {text:"前に来たときとの時間の隔たり",score:{time:3,relation:1}}
      ]
    },
    {
      label:"SCENE 06 / 別れ際",
      q:"誰かと別れたあと、もっとも残りやすいものは？",
      text:"特別な別れとは限りません。いつもの帰り道かもしれません。",
      options:[
        {text:"最後に見た背中や、振り返った場所",score:{scene:2,relation:2}},
        {text:"最後の一言と、その声の高さ",score:{sound:2,relation:2}},
        {text:"言わなかったこと、続いた沈黙",score:{silence:3,emotion:1}},
        {text:"帰り道に身体へ残った寂しさや安堵",score:{emotion:2,body:2}}
      ]
    },
    {
      label:"SCENE 07 / 食卓",
      q:"昔の食卓を思い出すとき、最初に現れるのは？",
      text:"料理名より前に、ひとつの感覚が立ち上がります。",
      options:[
        {text:"湯気や皿の並び、部屋の明るさ",score:{scene:3,scent:1}},
        {text:"料理や家の匂い",score:{scent:3,body:1}},
        {text:"そこにいた人たちの関係や会話",score:{relation:3,sound:1}},
        {text:"その頃の生活全体の速さや季節",score:{time:3,emotion:1}}
      ]
    },
    {
      label:"SCENE 08 / 手の記憶",
      q:"身体が先に覚えている、と感じるのはどんなとき？",
      text:"頭では忘れていたのに、動作や感覚が戻ってきます。",
      options:[
        {text:"久しぶりの道でも、自然に角を曲がれたとき",score:{body:2,scene:2}},
        {text:"昔使っていた道具を、迷わず扱えたとき",score:{body:3,time:1}},
        {text:"誰かの手触りや体温を思い出したとき",score:{body:2,relation:2}},
        {text:"ある感情だけが、理由より先に戻ったとき",score:{emotion:3,body:1}}
      ]
    },
    {
      label:"SCENE 09 / 名前のない時間",
      q:"何も起きなかった一日を、何が記憶に残しますか？",
      text:"記念日でも事件でもない、ごく普通の日です。",
      options:[
        {text:"午後の光や、窓の外の天気",score:{scene:3,time:1}},
        {text:"生活音や、遠くで流れていた音楽",score:{sound:3,time:1}},
        {text:"一緒にいても会話をしなかった時間",score:{silence:2,relation:2}},
        {text:"穏やかだった、重かった、という感情の温度",score:{emotion:2,body:2}}
      ]
    },
    {
      label:"SCENE 10 / 記録するなら",
      q:"今日をひとつだけ記録するなら、何を選びますか？",
      text:"写真、文章、録音に限らず、自由に残せるとします。",
      options:[
        {text:"今日を象徴する一枚の景色",score:{scene:3,time:1}},
        {text:"環境音や、誰かの短い声",score:{sound:3,relation:1}},
        {text:"匂いや温度を思い出せる短い言葉",score:{scent:2,body:2}},
        {text:"今日、言葉にならなかった一瞬",score:{silence:3,emotion:1}}
      ]
    },
    {
      label:"SCENE 11 / 忘れたくない人",
      q:"ある人を忘れたくないとき、何を残したいですか？",
      text:"その人のすべてを保存することはできません。",
      options:[
        {text:"その人がいた場所や、よく見ていた風景",score:{scene:2,relation:2}},
        {text:"話し方、笑い方、呼ばれた名前",score:{sound:2,relation:2}},
        {text:"一緒にいたときの安心や緊張",score:{emotion:2,body:2}},
        {text:"二人のあいだにだけあった沈黙",score:{silence:2,relation:2}}
      ]
    },
    {
      label:"SCENE 12 / 未来のあなたへ",
      q:"一年後の自分へ、今日から何を渡しますか？",
      text:"説明の代わりに、ひとつの断片だけを封筒へ入れます。",
      options:[
        {text:"今日の光が分かる写真や色",score:{scene:3,time:1}},
        {text:"街の音や、自分の声の録音",score:{sound:3,time:1}},
        {text:"今日の匂いや身体感覚を書いた一文",score:{scent:2,body:2}},
        {text:"いま抱えている感情、または書かなかった余白",score:{emotion:2,silence:2}}
      ]
    }
  ];

  const results = {
    scene:{
      title:"景色の標本",
      en:"Landscape Keeper",
      subtitle:"あなたは、出来事を場所と光の配置として残します。",
      text:[
        "記憶を呼び戻す入口は、説明よりも景色です。窓の位置、道の曲がり方、夕方の色。そこに誰がいたかを忘れても、その人が立っていた場所だけは鮮明に残ることがあります。",
        "あなたにとって風景は背景ではありません。感情や関係を受け止めておく器です。写真を撮るときも、主役そのものより、主役を包んでいた空間へ目が向きやすいでしょう。"
      ],
      keeps:"光、色、道、窓、物の配置、誰かがいた場所。",
      misses:"会話の正確な内容や、身体に残っていた小さな変化。",
      practice:"一枚の写真に、場所・時刻・その場にいなかったものを一行だけ添える。",
      question:"あなたが覚えている景色には、誰の不在が写っていますか。",
      palette:["#dce5df","#8ca397","#f2eee5"], image:""
    },
    sound:{
      title:"音の余韻",
      en:"Echo Collector",
      subtitle:"あなたは、過ぎた時間を音の層として聴き直します。",
      text:[
        "記憶の扉を開くのは、声や音楽だけではありません。冷蔵庫の低い唸り、雨樋の水音、遠くの踏切。何気ない音が、場所や人を丸ごと連れ戻します。",
        "あなたは言葉の意味と同じくらい、言い方や間を覚えています。録音されなかった音まで記憶に残るため、静けさもまた一つの音として扱っている人です。"
      ],
      keeps:"声の調子、環境音、音楽、間、遠くから聞こえた生活の気配。",
      misses:"景色の細部や、出来事が起きた正確な順序。",
      practice:"30秒の環境音を録り、音を説明せず、そのとき考えていたことだけ記す。",
      question:"もう一度だけ聴けるなら、どの時間の音を選びますか。",
      palette:["#dbe1e6","#748895","#f0eee7"], image:""
    },
    body:{
      title:"身体の手紙",
      en:"Somatic Memory",
      subtitle:"あなたの身体は、言葉より先に時間を覚えています。",
      text:[
        "気温、湿度、疲れ、手触り、歩いた距離。あなたの記憶は、頭の中だけで保存されていません。似た風が吹いた日、身体が先に昔を思い出すことがあります。",
        "出来事の説明が曖昧でも、そのとき安心していたか、身構えていたかは残ります。身体感覚は嘘をつきにくい一方、現在の疲れと過去の感覚が重なることもあります。"
      ],
      keeps:"温度、湿度、手触り、姿勢、疲労、安心や緊張の身体反応。",
      misses:"感覚が生まれた理由や、周囲で実際に起きていたこと。",
      practice:"出来事ではなく、身体のどこに何が残ったかを三語で記録する。",
      question:"あなたの身体は、何を忘れないようにしていますか。",
      palette:["#e5ddd5","#aa8d78","#edf0ea"], image:""
    },
    relation:{
      title:"関係の編み目",
      en:"Connection Weaver",
      subtitle:"あなたは、出来事よりも人と人のあいだを残します。",
      text:[
        "何をしたかより、誰と、どんな距離でいたか。あなたの記憶は、関係の変化に敏感です。同じ場所でも、一緒にいる人が変われば、まったく別の時間として保存されます。",
        "表情や言葉だけでなく、気遣い、ためらい、近づいた瞬間や離れた瞬間を覚えています。そのため、関係が終わったあとも、二人のあいだにあった空気が長く残ります。"
      ],
      keeps:"距離、表情、会話の温度、気遣い、二人のあいだだけにあった習慣。",
      misses:"その場そのものの美しさや、自分一人の身体感覚。",
      practice:"誰かについて書くとき、その人の特徴ではなく「二人の間にあったもの」を一つ残す。",
      question:"その人を覚えているのか、その人といた自分を覚えているのか。",
      palette:["#dedde5","#8f879f","#ece8e1"], image:""
    },
    time:{
      title:"時間の地層",
      en:"Time Archivist",
      subtitle:"あなたは、一日を前後の流れと季節の中へ残します。",
      text:[
        "あなたの記憶には、いつも時間の位置があります。あの頃、帰る途中、冬になる少し前。単独の場面ではなく、その前後に何があり、どこへ向かっていたかが大切です。",
        "変化の速度にも敏感です。昔と今を比べることで、失ったものだけでなく、気づかないうちに育っていたものを見つけます。"
      ],
      keeps:"季節、時刻、前後関係、生活の周期、変化していく速度。",
      misses:"一瞬だけ現れた感情や、説明できない感覚の断片。",
      practice:"日付だけでなく「何かが始まる前／終わった後」という位置を添えて残す。",
      question:"いまは、何と何のあいだにある時間でしょうか。",
      palette:["#e4e0d4","#9a9075","#dce5e4"], image:""
    },
    scent:{
      title:"匂いの鍵",
      en:"Scent Rememberer",
      subtitle:"あなたの記憶は、名前のない香りから突然ひらきます。",
      text:[
        "雨、紙、木、洗剤、食べ物。匂いは説明を通らず、遠い時間へ直接触れます。思い出そうとしていなかった記憶ほど、香りによって不意に戻ることがあります。",
        "あなたは環境の微細な違いを嗅ぎ取っています。ただし匂いの記憶は輪郭が強いぶん、いつの出来事だったのか分からなくなることもあります。"
      ],
      keeps:"雨、土、紙、木、布、食べ物、部屋や人に固有の香り。",
      misses:"日付や順序、誰がどの言葉を話したかという事実。",
      practice:"香りを商品名で書かず、「何に似ていたか」と「どこへ戻ったか」を残す。",
      question:"あなたを過去へ連れ戻す匂いは、どこにありますか。",
      palette:["#e8e1cf","#a5966e","#dfe8df"], image:""
    },
    emotion:{
      title:"感情の残光",
      en:"Emotion Carrier",
      subtitle:"あなたは、出来事が消えたあとも感情の色を持ち続けます。",
      text:[
        "何があったかを詳しく思い出せなくても、嬉しかった、怖かった、救われた、という感情は残ります。あなたにとって感情は結果ではなく、記憶そのものに近いものです。",
        "感情の解像度が高いため、他者の記憶にも共鳴しやすいでしょう。一方で、今の感情が過去の場面を塗り替えることもあります。"
      ],
      keeps:"喜び、寂しさ、安堵、違和感、言葉になる前の感情の色。",
      misses:"実際の出来事と、あとから意味づけた物語との差。",
      practice:"感情に理由をつける前に、色・重さ・動きの三つで書き留める。",
      question:"覚えている感情は、当時のものですか。いま生まれたものですか。",
      palette:["#e5d9dc","#a77d86","#e9e6de"], image:""
    },
    silence:{
      title:"余白の保存",
      en:"Keeper of Silence",
      subtitle:"あなたは、語られなかったものを記憶の中心に残します。",
      text:[
        "話さなかったこと、写らなかった人、途中で止まった動作。あなたは、出来事の外側にある欠け目へ自然に目を向けます。明確な情報より、残された余白のほうが長く心に留まります。",
        "その感受性は、他の人が通り過ぎる小さな兆しを拾います。ただし、空白へ意味を与えすぎると、実際には存在しなかった物語まで抱えることがあります。"
      ],
      keeps:"沈黙、視線、言えなかったこと、不在、途中で終わったもの。",
      misses:"すでにそこにあった明確な喜びや、単純な事実。",
      practice:"空白を埋めずに「分からないまま残す」記録を一つ作る。",
      question:"残っている余白は、誰かに埋めてほしいものですか。",
      palette:["#dfe3e1","#7d8a87","#eeeae3"], image:""
    }
  };

  const intro = document.getElementById("mrIntro");
  const quiz = document.getElementById("mrQuiz");
  const resultScreen = document.getElementById("mrResult");
  const startBtn = document.getElementById("mrStartBtn");
  const backBtn = document.getElementById("mrBackBtn");
  const progress = document.getElementById("mrProgress");
  const progressBar = document.getElementById("mrProgressBar");
  const sceneLabel = document.getElementById("mrSceneLabel");
  const questionEl = document.getElementById("mrQuestion");
  const sceneText = document.getElementById("mrSceneText");
  const optionsEl = document.getElementById("mrOptions");
  const restartBtn = document.getElementById("mrRestartBtn");
  const recordText = document.getElementById("mrRecordText");

  let current = 0;
  let answers = [];
  let currentKey = "scene";

  function showScreen(target){
    intro.hidden = target !== "intro";
    quiz.hidden = target !== "quiz";
    resultScreen.hidden = target !== "result";
    const top = root.getBoundingClientRect().top + window.pageYOffset - 30;
    window.scrollTo({top:Math.max(0,top),behavior:"smooth"});
  }

  function pad(value){return String(value).padStart(2,"0");}

  function renderQuestion(){
    const item = questions[current];
    progress.textContent = pad(current + 1) + " / " + pad(questions.length);
    progressBar.style.width = ((current + 1) / questions.length * 100) + "%";
    sceneLabel.textContent = item.label;
    questionEl.textContent = item.q;
    sceneText.textContent = item.text;
    backBtn.disabled = current === 0;
    optionsEl.innerHTML = "";

    item.options.forEach(function(option,index){
      const button = document.createElement("button");
      button.type = "button";
      button.className = "mr-option";
      button.textContent = option.text;
      button.setAttribute("aria-label",(index + 1) + "番目の選択肢: " + option.text);
      button.addEventListener("click",function(){
        answers[current] = index;
        if (current < questions.length - 1){
          current += 1;
          renderQuestion();
          return;
        }
        showResult();
      });
      optionsEl.appendChild(button);
    });
  }

  function calculate(){
    const scores = {};
    TYPE_ORDER.forEach(function(key){scores[key] = 0;});
    answers.forEach(function(answerIndex,qIndex){
      const option = questions[qIndex].options[answerIndex];
      if (!option) return;
      Object.keys(option.score).forEach(function(key){scores[key] += option.score[key];});
    });

    const lastWeights = {};
    TYPE_ORDER.forEach(function(key){lastWeights[key] = -1;});
    answers.forEach(function(answerIndex,qIndex){
      const option = questions[qIndex].options[answerIndex];
      if (!option) return;
      Object.keys(option.score).forEach(function(key){
        if (option.score[key] >= 2) lastWeights[key] = qIndex;
      });
    });

    const ranked = TYPE_ORDER.slice().sort(function(a,b){
      if (scores[b] !== scores[a]) return scores[b] - scores[a];
      if (lastWeights[b] !== lastWeights[a]) return lastWeights[b] - lastWeights[a];
      return TYPE_ORDER.indexOf(a) - TYPE_ORDER.indexOf(b);
    });
    return {scores:scores,key:ranked[0],ranked:ranked};
  }

  function setResultVisual(data){
    const visual = document.getElementById("mrResultVisual");
    const p = data.palette;
    visual.style.backgroundImage = "linear-gradient(145deg," + p[0] + "," + p[1] + " 62%," + p[2] + ")";
    if (data.image){
      visual.style.backgroundImage = "linear-gradient(180deg,rgba(20,30,30,.04),rgba(20,30,30,.16)),url('" + data.image + "')";
    }
  }

  function buildScoreList(calculated){
    const list = document.getElementById("mrScoreList");
    const max = Math.max.apply(null,Object.values(calculated.scores));
    list.innerHTML = "";
    calculated.ranked.forEach(function(key){
      const row = document.createElement("div");
      row.className = "mr-score-row";
      const percent = max === 0 ? 0 : Math.round(calculated.scores[key] / max * 100);
      row.innerHTML = "<span>" + TYPE_LABELS[key] + "</span><span class=\"mr-score-track\"><span style=\"width:" + percent + "%\"></span></span><span class=\"mr-score-value\">" + calculated.scores[key] + "</span>";
      list.appendChild(row);
    });
  }

  function showResult(){
    const calculated = calculate();
    currentKey = calculated.key;
    const data = results[currentKey];
    document.getElementById("mrResultTitle").textContent = data.title;
    document.getElementById("mrResultEn").textContent = data.en;
    document.getElementById("mrResultSubtitle").textContent = data.subtitle;
    document.getElementById("mrResultText").innerHTML = data.text.map(function(p){return "<p>" + p + "</p>";}).join("");
    document.getElementById("mrResultKeeps").textContent = data.keeps;
    document.getElementById("mrResultMisses").textContent = data.misses;
    document.getElementById("mrResultPractice").textContent = data.practice;
    document.getElementById("mrResultQuestion").textContent = data.question;
    setResultVisual(data);
    buildScoreList(calculated);
    updateCapture();
    showScreen("result");
  }

  function getShareText(includeRecord){
    const data = results[currentKey];
    let text = "記憶の残し方診断｜私の記憶は「" + data.title + "」でした。\n" + data.subtitle + "\n\n持ち帰る問い：" + data.question;
    const note = recordText.value.trim();
    if (includeRecord === true){
      if (note) text += "\n\n今日の断片：\n" + note;
    }
    text += "\n\n#記憶の残し方診断 #Tranquilvæj";
    return text;
  }

  function toast(message){
    let el = root.querySelector(".mr-toast");
    if (!el){
      el = document.createElement("div");
      el.className = "mr-toast";
      el.setAttribute("role","status");
      root.appendChild(el);
    }
    el.textContent = message;
    el.classList.add("is-show");
    window.setTimeout(function(){el.classList.remove("is-show");},2200);
  }

  async function copyText(text){
    try{
      await navigator.clipboard.writeText(text);
      toast("コピーしました");
      return;
    }catch(error){
      const area = document.createElement("textarea");
      area.value = text;
      area.style.position = "fixed";
      area.style.opacity = "0";
      document.body.appendChild(area);
      area.select();
      document.execCommand("copy");
      area.remove();
      toast("コピーしました");
    }
  }

  function updateCapture(){
    const data = results[currentKey];
    const capture = document.getElementById("mrCapture");
    capture.querySelector(".mr-capture-title").textContent = data.title;
    capture.querySelector(".mr-capture-en").textContent = data.en;
    capture.querySelector(".mr-capture-subtitle").textContent = data.subtitle;
    capture.querySelector(".mr-capture-text").textContent = data.text[0];
    capture.querySelector(".mr-capture-question").textContent = data.question;
    const now = new Date();
    capture.querySelector(".mr-capture-date").textContent = now.getFullYear() + "." + pad(now.getMonth()+1) + "." + pad(now.getDate());
    const recordWrap = capture.querySelector(".mr-capture-record-wrap");
    const note = recordText.value.trim();
    recordWrap.hidden = note === "";
    capture.querySelector(".mr-capture-record").textContent = note;
    const bg = capture.querySelector(".mr-capture-bg");
    const p = data.palette;
    bg.style.backgroundImage = "radial-gradient(700px 700px at 8% 8%,rgba(255,255,255,.92),transparent 63%),radial-gradient(720px 720px at 102% 92%," + p[1] + "55,transparent 64%),linear-gradient(145deg," + p[2] + "," + p[0] + ")";
    if (data.image){
      bg.style.backgroundImage = "linear-gradient(145deg,rgba(238,240,235,.80),rgba(42,55,53,.34)),url('" + data.image + "')";
    }
  }

  function loadHtml2Canvas(){
    return new Promise(function(resolve,reject){
      if (window.html2canvas){resolve(window.html2canvas);return;}
      const existing = document.querySelector("script[data-mr-html2canvas='true']");
      if (existing){
        existing.addEventListener("load",function(){resolve(window.html2canvas);},{once:true});
        existing.addEventListener("error",reject,{once:true});
        return;
      }
      const script = document.createElement("script");
      script.src = "https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js";
      script.async = true;
      script.dataset.mrHtml2canvas = "true";
      script.onload = function(){resolve(window.html2canvas);};
      script.onerror = reject;
      document.head.appendChild(script);
    });
  }

  function canvasToBlob(canvas){
    return new Promise(function(resolve){canvas.toBlob(resolve,"image/png",1);});
  }

  async function saveImage(){
    const button = document.getElementById("mrSaveBtn");
    const original = button.textContent;
    button.disabled = true;
    button.textContent = "画像を生成中…";
    try{
      updateCapture();
      const html2canvas = await loadHtml2Canvas();
      const capture = document.getElementById("mrCapture");
      const canvas = await html2canvas(capture,{backgroundColor:null,scale:1,useCORS:true,allowTaint:false,logging:false,width:1080,height:1350});
      const blob = await canvasToBlob(canvas);
      if (!blob) throw new Error("Blob creation failed");
      const now = new Date();
      const filename = now.getFullYear() + pad(now.getMonth()+1) + pad(now.getDate()) + "_記憶の残し方診断_" + results[currentKey].title + ".png";
      const file = new File([blob],filename,{type:"image/png"});
      const canShare = navigator.share ? navigator.canShare : null;
      if (canShare){
        if (navigator.canShare({files:[file]})){
          await navigator.share({files:[file],title:"記憶の残し方診断",text:"私の記憶は「" + results[currentKey].title + "」でした。"});
          toast("共有画面を開きました");
          return;
        }
      }
      const url = URL.createObjectURL(blob);
      const link = document.createElement("a");
      link.href = url;
      link.download = filename;
      document.body.appendChild(link);
      link.click();
      link.remove();
      window.setTimeout(function(){URL.revokeObjectURL(url);},5000);
      toast("画像を保存しました");
    }catch(error){
      if (error.name !== "AbortError"){
        console.error(error);
        toast("画像を保存できませんでした");
      }
    }finally{
      button.disabled = false;
      button.textContent = original;
    }
  }

  startBtn.addEventListener("click",function(){current=0;answers=[];renderQuestion();showScreen("quiz");});
  backBtn.addEventListener("click",function(){if (current === 0) return;current -= 1;renderQuestion();});
  restartBtn.addEventListener("click",function(){current=0;answers=[];recordText.value="";showScreen("intro");});
  document.getElementById("mrCopyBtn").addEventListener("click",function(){copyText(getShareText(true));});
  document.getElementById("mrTextShareBtn").addEventListener("click",function(){copyText(getShareText(false));toast("共有文をコピーしました");});
  document.getElementById("mrShareBtn").addEventListener("click",async function(){
    const text = getShareText(false);
    if (navigator.share){
      try{await navigator.share({title:"記憶の残し方診断",text:text,url:window.location.href});return;}catch(error){if (error.name === "AbortError") return;}
    }
    copyText(text + "\n" + window.location.href);
  });
  document.getElementById("mrSaveBtn").addEventListener("click",saveImage);
  recordText.addEventListener("input",updateCapture);
})();
</script>
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/memory-trace-reading/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1445</post-id>	</item>
		<item>
		<title>不在診断</title>
		<link>https://tranquilguides.com/absence-reading-test/</link>
					<comments>https://tranquilguides.com/absence-reading-test/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Sat, 11 Jul 2026 01:57:00 +0000</pubDate>
				<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=1407</guid>

					<description><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_113423-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>何があるかではなく、何の欠け目に先に気づくのか。10の情景から、あなたが触れやすい「不在のかたち」を読み解く診断です。]]></description>
										<content:encoded><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260711_113423-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>
<!--
不在診断 / Version 2.1 レイアウト修正版
WordPress（SWELL）の「カスタムHTML」ブロックへ、このファイルの内容を丸ごと貼り付けてください。

概要
- 10問
- 8種類の結果
- 画像保存（Story・角丸PNG）
- 結果と記録のコピー
- Web Share API / X・Threads向けテキスト共有
- 再診断（入口へ戻る）
- 結果ごとに背景画像を切り替え可能
- SWELLの見出しスタイル干渉を回避
- 診断位置を基準にスクロール
- 装飾背景を各画面に追従させ、結果カードとの位置ずれを解消
- 日付入りファイル名 / iPhone共有対応

画像を設定する場合：
JavaScript内 results の image: "" と captureImage: "" にURLを入れてください。
未設定でも淡い背景で成立します。
-->

<div class="ab-test" id="abTest">
  <section class="ab-stage ab-intro" id="abIntro">
    <p class="ab-kicker">Absence Reading Test</p>
    <div class="ab-title-hero" role="heading" aria-level="1">不在診断</div>
    <p class="ab-lead">
      これは、何があるかを見る診断ではありません。<br>
      あなたが、何の欠け目に先に気づくのか。<br>
      どんな空白に、心が反応するのかを見つめる小さな装置です。
    </p>
    <p class="ab-note">
      正解はありません。<br>
      不在は、失われたものだけではなく、まだ名づけられていない余白でもあります。
    </p>
    <button class="ab-btn ab-btn-main" id="abStartBtn" type="button">診断をはじめる</button>
    <p class="ab-duration">約3〜4分</p>
  </section>

  <section class="ab-stage ab-quiz" id="abQuiz" hidden="">
    <div class="ab-quiz-head">
      <button class="ab-back" id="abBackBtn" type="button" aria-label="ひとつ前へ戻る">← 戻る</button>
      <p class="ab-progress" id="abProgress">01 / 10</p>
    </div>

    <div class="ab-progress-line" aria-hidden="true">
      <span id="abProgressBar"></span>
    </div>

    <p class="ab-time-label" id="abTimeLabel">Scene</p>
    <div class="ab-question" id="abQuestion" role="heading" aria-level="2"></div>
    <p class="ab-scene-text" id="abSceneText"></p>
    <div class="ab-options" id="abOptions"></div>
  </section>

  <section class="ab-stage ab-result" id="abResult" hidden="">
    <p class="ab-kicker">Your Reading of Absence</p>

    <article class="ab-result-card">
      <div class="ab-result-image" id="abResultImage" role="img" aria-label=""></div>

      <div class="ab-result-body">
        <p class="ab-result-prefix">あなたが先に触れる不在は</p>
        <div class="ab-result-title" id="abResultTitle" role="heading" aria-level="2"></div>
        <p class="ab-result-subtitle" id="abResultSubtitle"></p>

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

        <div class="ab-result-text" id="abResultText"></div>

        <details class="ab-score-details">
          <summary>歩んだ過程を見る</summary>
          <div class="ab-score-list" id="abScoreList"></div>
        </details>

        <div class="ab-reflection">
          <p class="ab-reflection-label">持ち帰る問い</p>
          <p id="abResultQuestion"></p>
        </div>

        <div class="ab-record-box">
          <label for="abRecordText">今日の記録</label>
          <textarea id="abRecordText" rows="6" placeholder="この診断で残ったことを、ここに置いていってください。"></textarea>

          <button class="ab-btn ab-btn-small" id="abCopyBtn" type="button">
            結果と記録をコピー
          </button>
        </div>
      </div>
    </article>

    <div class="ab-actions">
      <button class="ab-btn" id="abCopyBtnBottom" type="button">結果をコピー</button>
      <button class="ab-btn" id="abShareBtn" type="button">結果をシェア</button>
      <button class="ab-btn" id="abTextShareBtn" type="button">XやThreadsへ共有</button>
      <button class="ab-btn" id="abSaveStoryBtn" type="button">画像を保存</button>
      <button class="ab-btn ab-btn-sub ab-btn-wide" id="abHomeBtn" type="button">再診断</button>
    </div>

    <p class="ab-result-note">
      不在の見え方は固定された性格ではありません。<br>
      状態や場所が変われば、あなたが先に触れる欠け目も変わります。
    </p>
  </section>

  <div class="ab-capture-card ab-capture-story" id="abCaptureStory" aria-hidden="true">
    <div class="ab-capture-overlay"></div>
    <div class="ab-capture-panel">
      <p class="ab-capture-brand">Tranquilvæj</p>
      <p class="ab-capture-testname">不在診断</p>
      <p class="ab-capture-datetime"></p>
      <p class="ab-capture-kicker">Absence Reading Test</p>
      <div class="ab-capture-title"></div>
      <p class="ab-capture-subtitle"></p>
      <div class="ab-capture-divider"></div>
      <div class="ab-capture-result-text"></div>
      <div class="ab-capture-question-wrap">
        <p class="ab-capture-question-label">A QUESTION TO CARRY HOME</p>
        <p class="ab-capture-question"></p>
      </div>
      <div class="ab-capture-record-wrap">
        <p class="ab-capture-record-label">TODAY&#8217;S NOTE</p>
        <p class="ab-capture-record"></p>
      </div>
      <p class="ab-capture-url">tranquilguides.com</p>
    </div>
  </div>

</div>

<style>
.ab-test{
  --ab-ink:#26302f;
  --ab-muted:rgba(38,48,47,.62);
  --ab-line:rgba(38,48,47,.12);
  --ab-glass:rgba(255,255,255,.56);
  --ab-accent:#2f4f4f;

  width:100%;
  max-width:760px;
  margin:0 auto;
  padding:clamp(52px,8vw,88px) 20px;
  box-sizing:border-box;
  color:var(--ab-ink);
  font-family:inherit;
}

.ab-test *,
.ab-test *::before,
.ab-test *::after{
  box-sizing:border-box;
}

.ab-stage{
  text-align:center;
  animation:abFade .55s ease both;
}

.ab-stage[hidden]{
  display:none !important;
}

.ab-kicker,
.ab-progress,
.ab-time-label,
.ab-result-prefix,
.ab-reflection-label{
  margin:0;
  font-size:12px;
  letter-spacing:.18em;
  text-transform:uppercase;
  color:var(--ab-muted);
}

.ab-kicker{margin-bottom:20px;}

.ab-title-hero,
.ab-question,
.ab-result-title{
  color:var(--ab-ink) !important;
  font-weight:500 !important;
  letter-spacing:.06em !important;
}

.ab-title-hero{
  margin:0 0 28px !important;
  font-size:clamp(28px,5vw,42px) !important;
  line-height:1.55 !important;
}

.ab-lead{
  max-width:560px;
  margin:0 auto;
  font-size:16px;
  line-height:2.1;
  letter-spacing:.04em;
}

.ab-note{
  max-width:520px;
  margin:26px auto 0;
  font-size:13px;
  line-height:1.95;
  color:var(--ab-muted);
}

.ab-duration{
  margin:18px 0 0;
  font-size:12px;
  letter-spacing:.08em;
  color:var(--ab-muted);
}

.ab-btn{
  position:relative;
  overflow:hidden;
  appearance:none;
  -webkit-appearance:none;
  min-height:48px;
  padding:13px 26px;
  border:1px solid rgba(255,255,255,.66) !important;
  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%) !important;
  color:var(--ab-ink) !important;
  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) !important;
  transition:transform .22s ease, background .22s ease, color .22s ease, border-color .22s ease, box-shadow .22s ease;
}

.ab-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;
}

.ab-btn:hover,
.ab-btn:focus-visible{
  transform:translateY(-1px);
  background:var(--ab-accent) !important;
  color:#fff !important;
  border-color:var(--ab-accent) !important;
  box-shadow:0 10px 28px rgba(0,0,0,.12) !important;
  outline:none;
}

.ab-btn-main{
  min-width:210px;
  margin-top:38px;
}

.ab-btn-small{
  margin-top:18px;
  min-height:42px;
  padding:10px 20px;
  font-size:12px;
}

.ab-quiz-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  margin-bottom:14px;
}

.ab-back{
  appearance:none;
  -webkit-appearance:none;
  padding:0;
  border:0;
  background:none;
  color:var(--ab-muted);
  font:inherit;
  font-size:12px;
  letter-spacing:.12em;
  cursor:pointer;
  transition:color .2s ease, opacity .2s ease;
}

.ab-back:hover{color:var(--ab-ink);}

.ab-progress-line{
  width:100%;
  height:1px;
  margin-bottom:44px;
  overflow:hidden;
  background:rgba(38,48,47,.10);
}

.ab-progress-line span{
  display:block;
  width:0;
  height:100%;
  background:rgba(38,48,47,.48);
  transition:width .35s ease;
}

.ab-time-label{margin-bottom:16px;}

.ab-question{
  max-width:620px;
  margin:0 auto 14px !important;
  font-size:clamp(22px,4.3vw,32px) !important;
  line-height:1.65 !important;
}

.ab-scene-text{
  max-width:560px;
  min-height:3.8em;
  margin:0 auto;
  color:var(--ab-muted);
  font-size:14px;
  line-height:1.9;
  white-space:pre-line;
}

.ab-options{
  display:grid;
  gap:13px;
  margin-top:34px;
}

.ab-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(--ab-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;
}

.ab-option:hover,
.ab-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;
}

.ab-result-card{
  max-width:680px;
  margin:0 auto;
  overflow:hidden;
  border:1px solid rgba(38,48,47,.08);
  border-radius:34px;
  background:var(--ab-glass);
  text-align:left;
  backdrop-filter:blur(18px) saturate(130%);
  -webkit-backdrop-filter:blur(18px) saturate(130%);
  box-shadow:0 24px 80px rgba(0,0,0,.10);
}

.ab-result-image{
  width:100%;
  aspect-ratio:16 / 10;
  background-color:rgba(38,48,47,.08);
  background-size:cover;
  background-position:center;
}

.ab-result-body{
  padding:clamp(30px,5vw,50px);
}

.ab-result-prefix{
  margin-bottom:10px;
  text-align:center;
}

.ab-result-title{
  margin:0 0 8px !important;
  text-align:center;
  font-size:clamp(27px,5vw,38px) !important;
  line-height:1.55 !important;
}

.ab-result-subtitle{
  margin:0;
  text-align:center;
  color:var(--ab-muted);
  font-size:14px;
  line-height:1.8;
  letter-spacing:.06em;
}

.ab-divider{
  width:44px;
  height:1px;
  margin:36px auto 30px;
  background:rgba(38,48,47,.25);
}

.ab-result-text{
  max-width:560px;
  margin:0 auto;
  font-size:15px;
  line-height:2.05;
  letter-spacing:.025em;
}

.ab-result-text p{margin:0 0 1.55em;}
.ab-result-text p:last-child{margin-bottom:0;}

.ab-score-details{
  margin-top:34px;
  padding-top:26px;
  border-top:1px solid var(--ab-line);
}

.ab-score-details summary{
  color:var(--ab-muted);
  font-size:12px;
  letter-spacing:.08em;
  text-align:center;
  cursor:pointer;
}

.ab-score-list{
  display:grid;
  gap:11px;
  margin-top:22px;
}

.ab-score-row{
  display:grid;
  grid-template-columns:94px 1fr 30px;
  align-items:center;
  gap:10px;
  font-size:12px;
  color:var(--ab-muted);
}

.ab-score-track{
  height:4px;
  overflow:hidden;
  border-radius:999px;
  background:rgba(38,48,47,.08);
}

.ab-score-fill{
  display:block;
  height:100%;
  border-radius:999px;
  background:rgba(47,79,79,.55);
}

.ab-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;
}

.ab-reflection-label{margin-bottom:12px;}
.ab-reflection p:last-child{
  margin:0;
  font-size:15px;
  line-height:1.9;
}

.ab-record-box{
  margin-top:34px;
  padding-top:30px;
  border-top:1px solid var(--ab-line);
}

.ab-record-box label{
  display:block;
  margin-bottom:14px;
  text-align:center;
  color:var(--ab-muted);
  font-size:13px;
  letter-spacing:.14em;
}

.ab-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(--ab-ink);
  font:inherit;
  font-size:15px;
  line-height:1.8;
  resize:vertical;
}

.ab-record-box textarea:focus{
  border-color:rgba(38,48,47,.38);
  background:rgba(255,255,255,.84);
  outline:none;
}

.ab-actions{
  max-width:680px;
  margin:18px auto 0;
  display:grid;
  gap:12px;
}

.ab-save-group{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:12px;
}

.ab-actions .ab-btn{width:100%;}
.ab-btn-sub{opacity:.72;}

.ab-result-note{
  margin:32px auto 0;
  color:var(--ab-muted);
  font-size:12px;
  line-height:1.9;
}

/* Capture */
.ab-capture-card{
  position:fixed;
  left:-99999px;
  top:0;
  overflow:hidden;
  background-color:#e8e5de;
  background-position:center;
  background-size:cover;
  color:#26302f;
  font-family:serif;
}

.ab-capture-story{width:1080px;height:1920px;}

.ab-capture-overlay{
  position:absolute;
  inset:0;
  z-index:1;
  background:
    linear-gradient(180deg, rgba(247,245,239,.62) 0%, rgba(247,245,239,.82) 38%, rgba(247,245,239,.95) 100%);
  backdrop-filter:blur(18px) saturate(78%);
  -webkit-backdrop-filter:blur(18px) saturate(78%);
}

.ab-capture-panel{
  position:relative;
  z-index:2;
  height:100%;
}

.ab-capture-story .ab-capture-panel{padding:88px 78px 82px;}

.ab-capture-brand{
  margin:0;
  font-size:24px;
  letter-spacing:.03em;
}

.ab-capture-testname{
  margin:28px 0 8px;
  font-size:18px;
  letter-spacing:.02em;
}

.ab-capture-datetime{
  margin:0 0 34px;
  color:rgba(38,48,47,.62);
  font-size:18px;
  letter-spacing:.02em;
}

.ab-capture-kicker{
  margin:0 0 26px;
  color:rgba(38,48,47,.52);
  font-size:13px;
  letter-spacing:.24em;
  text-transform:uppercase;
}

.ab-capture-title{
  margin:0;
  color:#26302f;
  font-size:54px;
  font-weight:400;
  line-height:1.25;
  letter-spacing:.08em;
}

.ab-capture-subtitle{
  margin:14px 0 0;
  color:rgba(38,48,47,.68);
  font-size:20px;
  line-height:1.55;
}

.ab-capture-divider{
  width:52px;
  height:1px;
  margin:34px 0 30px;
  background:rgba(38,48,47,.38);
}

.ab-capture-result-text{
  font-size:18px;
  line-height:1.62;
  letter-spacing:.012em;
}

.ab-capture-result-text p{margin:0 0 1em;}

.ab-capture-question-wrap{
  margin-top:28px;
  padding-top:24px;
  border-top:1px solid rgba(38,48,47,.16);
}

.ab-capture-question-label,
.ab-capture-record-label{
  margin:0 0 12px;
  color:rgba(38,48,47,.50);
  font-size:12px;
  letter-spacing:.18em;
}

.ab-capture-question{
  margin:0;
  font-size:21px;
  line-height:1.6;
}

.ab-capture-record-wrap{
  margin-top:24px;
  padding-top:22px;
  border-top:1px solid rgba(38,48,47,.12);
}

.ab-capture-record{
  margin:0;
  font-size:18px;
  line-height:1.65;
  white-space:pre-line;
}

.ab-capture-url{
  position:absolute;
  left:78px;
  bottom:52px;
  margin:0;
  color:rgba(38,48,47,.58);
  font-size:17px;
}



/* 各画面に追従する背景装置：画面切替後もカード位置とずれない */
.ab-test{
  position:relative;
  isolation:isolate;
  min-height:0;
}

.ab-intro,
.ab-quiz{
  position:relative;
  z-index:0;
  width:100%;
  max-width:680px;
  margin:0 auto;
  padding:clamp(42px,6vw,62px) clamp(22px,5vw,42px);
  border:1px solid rgba(38,48,47,.08);
  border-radius:clamp(28px,5vw,46px);
  background:
    radial-gradient(circle at 18% 16%,rgba(255,255,255,.86),transparent 28%),
    radial-gradient(circle at 76% 22%,rgba(113,132,122,.14),transparent 34%),
    linear-gradient(145deg,rgba(238,235,226,.80),rgba(225,231,226,.52));
  box-shadow:0 30px 90px rgba(38,48,47,.07);
  overflow:hidden;
}

.ab-intro::after,
.ab-quiz::after{
  content:"";
  position:absolute;
  z-index:-1;
  top:clamp(28px,5vw,54px);
  right:clamp(24px,6vw,58px);
  width:clamp(72px,14vw,112px);
  aspect-ratio:1;
  border:1px solid rgba(38,48,47,.13);
  border-left-color:transparent;
  border-radius:50%;
  opacity:.65;
  pointer-events:none;
}

.ab-result{
  width:100%;
  max-width:680px;
  margin:0 auto;
}

.ab-actions{
  grid-template-columns:repeat(2,minmax(0,1fr));
}
.ab-actions > .ab-btn{width:100%;margin:0;}
.ab-btn-wide{grid-column:1 / -1;}
.ab-option:focus-visible,.ab-back:focus-visible,.ab-btn:focus-visible{
  outline:2px solid rgba(47,79,79,.48);
  outline-offset:3px;
}
.ab-option.is-chosen{
  transform:translateY(-1px) scale(.995);
  background:rgba(47,79,79,.92) !important;
  color:#fff !important;
  border-color:rgba(47,79,79,.92) !important;
}
@media(max-width:600px){
  .ab-actions{grid-template-columns:1fr;}
  .ab-btn-wide{grid-column:auto;}
}

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

@media (max-width:680px){
  .ab-test{padding:50px 16px 66px;}
  .ab-lead{font-size:15px;}
  .ab-progress-line{margin-bottom:36px;}
  .ab-scene-text{min-height:auto;}
  .ab-option{
    min-height:54px;
    padding:14px 16px;
    font-size:14px;
  }
  .ab-result-card{border-radius:26px;}
  .ab-result-body{padding:27px 20px 31px;}
  .ab-save-group{grid-template-columns:1fr;}
  .ab-score-row{grid-template-columns:80px 1fr 26px;}
}

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

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

  const TYPES = [
    "trace",
    "silence",
    "emptyseat",
    "missedvoice",
    "unopened",
    "afterlight",
    "gapkeeper",
    "returnless"
  ];

  const TYPE_LABELS = {
    trace: "痕跡を追う",
    silence: "沈黙を聴く",
    emptyseat: "空席を守る",
    missedvoice: "呼ばれなかった声に触れる",
    unopened: "開かれなかった扉を見る",
    afterlight: "去ったあとの光を拾う",
    gapkeeper: "余白を残す",
    returnless: "戻らないものを見送る"
  };

  const questions = [
    {
      time: "室内",
      q: "静かな部屋に入りました。",
      text: "最初に気になるのは、どれですか？",
      a: [
        { text: "片づけられた机の上の、薄い四角い跡", score: { trace: 3, unopened: 1 } },
        { text: "話し声が止んだあとの静けさ", score: { silence: 3, missedvoice: 1 } },
        { text: "誰も座っていない椅子", score: { emptyseat: 3, gapkeeper: 1 } },
        { text: "閉じたままの窓", score: { unopened: 3, afterlight: 1 } }
      ]
    },
    {
      time: "朝",
      q: "テーブルの上に、湯気のないカップがあります。",
      text: "あなたはどう受け取りますか？",
      a: [
        { text: "少し前まで誰かがいた気配を感じる", score: { trace: 2, emptyseat: 2 } },
        { text: "何か言いかけたまま離れた感じがする", score: { missedvoice: 3, silence: 1 } },
        { text: "冷めるまで置かれた時間を想像する", score: { afterlight: 3, trace: 1 } },
        { text: "そのまま触れずに、空白を残しておきたい", score: { gapkeeper: 3, returnless: 1 } }
      ]
    },
    {
      time: "通路",
      q: "掲示板から一枚だけ紙が剥がされています。",
      text: "そこに残っているものとして近いのは？",
      a: [
        { text: "何が貼られていたのかという輪郭", score: { trace: 3, unopened: 1 } },
        { text: "誰にも読まれなかった可能性", score: { missedvoice: 3, returnless: 1 } },
        { text: "抜けたことで生まれた余白", score: { gapkeeper: 3, silence: 1 } },
        { text: "もう必要ではなくなった時間", score: { afterlight: 2, returnless: 2 } }
      ]
    },
    {
      time: "午後",
      q: "駅のホームで、一本前の電車が行ったあと。",
      text: "残っているものは何だと思いますか？",
      a: [
        { text: "風だけが少し遅れて届く", score: { afterlight: 3, silence: 1 } },
        { text: "乗り損ねた人の感情", score: { missedvoice: 3, returnless: 1 } },
        { text: "立っていた位置の痕跡", score: { trace: 3, emptyseat: 1 } },
        { text: "次を待つための空いた時間", score: { gapkeeper: 2, emptyseat: 2 } }
      ]
    },
    {
      time: "夕方",
      q: "誰かの名前が呼ばれたような気がして振り返る。",
      text: "振り返った先に何もなかったとき、近い感覚は？",
      a: [
        { text: "呼ばれなかった自分の輪郭", score: { missedvoice: 3, silence: 1 } },
        { text: "聞き間違いではなく、残響のようなもの", score: { silence: 3, afterlight: 1 } },
        { text: "もうそこにいない誰かの気配", score: { returnless: 3, trace: 1 } },
        { text: "何もなかったことを、そのまま置いておきたい", score: { gapkeeper: 3, unopened: 1 } }
      ]
    },
    {
      time: "黄昏",
      q: "灯りのついていない家を見たとき。",
      text: "あなたの想像はどこへ向かいますか？",
      a: [
        { text: "ここにいた暮らしの残り香", score: { trace: 3, afterlight: 1 } },
        { text: "誰も帰ってこない夜", score: { returnless: 3, emptyseat: 1 } },
        { text: "まだ開かれていない扉の内側", score: { unopened: 3, silence: 1 } },
        { text: "暗いままでいられる余白", score: { gapkeeper: 3, silence: 1 } }
      ]
    },
    {
      time: "夜道",
      q: "会話の途中で、相手が少し黙りました。",
      text: "あなたが先に触れるのは？",
      a: [
        { text: "言われなかった言葉の形", score: { missedvoice: 3, silence: 1 } },
        { text: "黙るまでにあった気持ちの流れ", score: { trace: 2, afterlight: 2 } },
        { text: "その沈黙を埋めずに残したい感覚", score: { silence: 2, gapkeeper: 2 } },
        { text: "もう戻らないタイミングかもしれないという感じ", score: { returnless: 3, unopened: 1 } }
      ]
    },
    {
      time: "帰路",
      q: "本棚から一冊だけ抜けています。",
      text: "その不在を見たとき近いのは？",
      a: [
        { text: "そこにあった厚みを先に感じる", score: { trace: 3, emptyseat: 1 } },
        { text: "誰かが持ち出した理由を考える", score: { unopened: 2, missedvoice: 2 } },
        { text: "抜けたことで生まれた呼吸のような隙間", score: { gapkeeper: 3, silence: 1 } },
        { text: "もう戻ってこないかもしれない一冊", score: { returnless: 3, afterlight: 1 } }
      ]
    },
    {
      time: "深夜",
      q: "メッセージの返信が来ない夜。",
      text: "あなたにとってその不在は何に近いですか？",
      a: [
        { text: "まだ言葉になっていない途中", score: { unopened: 3, silence: 1 } },
        { text: "届かなかった声の重さ", score: { missedvoice: 3, returnless: 1 } },
        { text: "返事のない時間そのもの", score: { gapkeeper: 2, emptyseat: 2 } },
        { text: "残された画面の光だけ", score: { afterlight: 3, trace: 1 } }
      ]
    },
    {
      time: "帰宅",
      q: "最後に、あなたがいちばん失いたくないのは？",
      text: "不在の中でも残っていてほしいものを選んでください。",
      a: [
        { text: "誰かがいた痕跡", score: { trace: 3, afterlight: 1 } },
        { text: "言葉になる前の沈黙", score: { silence: 3, gapkeeper: 1 } },
        { text: "戻ってこられるための空席", score: { emptyseat: 3, gapkeeper: 1 } },
        { text: "もう戻らないものを見送る感覚", score: { returnless: 3, missedvoice: 1 } }
      ]
    }
  ];

  const results = {
    trace: {
      title: "痕跡を追う",
      subtitle: "消えたものそのものより、残された輪郭へ先に触れる不在",
      image: "",
      captureImage: "",
      text: [
        "あなたは、完全な空白そのものよりも、その前に確かに何かがあったことを示す小さな痕跡へ先に反応する人です。机の上の薄い跡、少しだけずれた椅子、触れられたままの取っ手。そこにいま無いものを、直接想像する前に、残されている輪郭から読み取ろうとします。",
        "この反応は、失われたものへの執着というより、世界が一度そこに確かに存在したことを見失わないための感覚です。あなたは「無い」という事実を、ただの欠落として片づけません。無くなったあとにも残る微かな層を掬い上げ、その存在の厚みを守ろうとします。",
        "そのためあなたは、人や場所や時間の変化に対して繊細です。誰かが離れたあと、残された配置や匂い、気配のズレから、言葉にならない変化を先に察知します。記録や写真、記憶の保存とも相性が良く、説明しきれないものを丁寧に持ち帰る力があります。",
        "一方で、痕跡を見つめる力が強いほど、今ここにあるものより、そこに「かつてあったもの」へ気持ちが引かれる日もあるでしょう。残された形に優しく触れられる反面、手放したはずの時間へ何度も戻ってしまうこともあります。",
        "大切なのは、痕跡を追うことをやめることではなく、そこから今の自分が何を受け取ったのかを言葉にしてみることです。残っているものは、過去への入口であると同時に、現在の感受性の証拠でもあります。あなたは不在の中に、消失ではなく『確かにあった』という厚みを見つける人です。"
      ],
      question: "あなたが最近、いちばん静かに守っていた痕跡は何ですか？"
    },

    silence: {
      title: "沈黙を聴く",
      subtitle: "言葉が消えたあとに残る静けさへ耳を向ける不在",
      image: "",
      captureImage: "",
      text: [
        "あなたが先に触れる不在は、ものの欠落よりも、言葉が止んだあとの静けさです。誰かが黙った瞬間、会話が終わったあとの空気、呼ばれなかった声。あなたは何が言われたかと同じくらい、何が言われなかったかに敏感です。",
        "それは単に想像力が強いからではありません。沈黙を『空白』として切り捨てず、その中に未完成の感情やためらい、届かなかった気持ちが含まれていることを知っているからです。多くの人が埋めてしまう無音の時間を、あなたはそのまま受け取ることができます。",
        "この感受性は、他者との距離感に深い影響を与えます。相手の言葉数が少ないときでも、何も無いとは感じません。むしろ、言葉の外側にある部分へ近づこうとします。そのため、簡単に説明できない気分や、形になる前の感情に寄り添える力があります。",
        "ただし、沈黙を読み取る力が強い分、そこに本来無かった意味まで背負ってしまうこともあります。返事の遅さ、間の長さ、言いよどみ。すべてを自分との関係で受け取ると、必要以上に傷つくこともあります。沈黙は必ずしも拒絶ではなく、ただ言葉がまだ追いついていない時間でもあります。",
        "あなたの強さは、黙っているものを雑に扱わないことです。沈黙を恐れず、しかしそこに呑まれすぎず、自分が本当に聴き取ったものを大切にしてください。あなたは不在の中に、欠落ではなく『まだ言葉になっていないもの』の存在を見つける人です。"
      ],
      question: "最近、埋めずに残しておきたかった沈黙はありましたか？"
    },

    emptyseat: {
      title: "空席を守る",
      subtitle: "誰かが戻ってこられるための余地として不在を見る",
      image: "",
      captureImage: "",
      text: [
        "あなたが先に触れる不在は、空いている場所です。誰も座っていない椅子、返事のない席、ひとつ分だけ空いた距離。それを単なる欠けではなく、誰かが戻ってこられるための余地として感じやすい人です。",
        "この感覚には、喪失への敏感さと同時に、迎え入れる力があります。空席は、ただ埋まっていない場所ではありません。あなたにとっては、まだ終わっていない関係や、戻ってくる可能性を保持している場所でもあります。だからこそ、すぐには埋めずに、その空きの意味を守ろうとします。",
        "あなたは人との距離の取り方にも、この感覚が表れます。誰かが離れたあとも、その人の位置を完全には消しません。忘れないためというより、簡単に置き換えないためです。人間関係だけでなく、生活の中でも『空けておくこと』に意味を見つけます。",
        "一方で、空席を守り続けることが、現在の流れを止めてしまう日もあります。戻ってこないもののために、いつまでも場所を空けたままにする。新しいものを入れないことで、自分も動けなくなる。その優しさは時に、自分を待機状態へ閉じ込めます。",
        "大切なのは、空席を消すことではなく、その席が本当に誰かのためのものなのか、それとも自分が失いたくない感覚を置いているのかを見分けることです。あなたは不在の中に、欠け目ではなく『戻ってこられるための場所』を見つける人です。だからこそ、ときどき自分のための席も用意してください。"
      ],
      question: "あなたはいま、誰のために、あるいは何のために場所を空けていますか？"
    },

    missedvoice: {
      title: "呼ばれなかった声に触れる",
      subtitle: "届かなかった言葉や、言いかけた気持ちに反応する不在",
      image: "",
      captureImage: "",
      text: [
        "あなたが強く感じる不在は、姿の消失よりも、声の不達です。呼ばれなかった名前、返ってこなかった返事、最後まで言われなかった一言。そこにあったはずの言葉が届かなかったことに、深く反応する人です。",
        "それは寂しさだけではありません。言葉は、誰かと誰かのあいだに橋をかけるものだからです。その橋が架からなかったとき、あなたはただの沈黙以上のものを感じます。そこには、ためらい、遠慮、失われた機会、あるいはもう届かないままの感情が含まれていると知っています。",
        "この感受性は、人との関係に対して誠実さを与えます。あなたは会話の表面よりも、その奥にある「言いきれなかったもの」を無視しません。そのため、他人の取りこぼした感情や、自分の中に残っている未送信の言葉にも敏感です。",
        "ただし、その敏感さゆえに、届かなかったすべてを自分の責任のように抱え込むこともあります。もっと早く返せばよかった、別の言い方があったのではないか、あの沈黙は何だったのか。言葉が届かなかった理由は一つではなく、ときには誰のせいでもないこともあります。",
        "あなたに必要なのは、届かなかった声を無かったことにすることではありません。それが確かに自分の中へ残ったことを認めつつ、すべてを回収しようとしないことです。あなたは不在の中に、『言葉にならずに残ったもの』の重さを見つける人です。そしてその重さは、あなたの繊細さの欠点ではなく、関係を軽く扱わない強さでもあります。"
      ],
      question: "いまも心の中に残っている、言えなかった言葉はありますか？"
    },

    unopened: {
      title: "開かれなかった扉を見る",
      subtitle: "起きなかった出来事や、始まらなかった可能性として不在を感じる",
      image: "",
      captureImage: "",
      text: [
        "あなたが先に触れる不在は、すでに失われたものだけではありません。むしろ、開かれなかった扉、選ばれなかった道、まだ始まらなかった可能性としての不在に反応します。そこに『何も無い』のではなく、『まだ起きていない』ものを感じる人です。",
        "この感覚は、想像力と保留の感受性に支えられています。閉じた窓、未読のままのメッセージ、開かれなかった会話。あなたはそれらを終わったものとして切り捨てず、何かが始まる直前の状態として受け取ることがあります。起きた出来事だけでなく、起きなかった出来事にも輪郭を感じるのです。",
        "そのためあなたは、今ある現実に従うだけでなく、別の可能性の存在を忘れにくいでしょう。まだ言葉になっていないこと、まだ選べること、まだ閉じたままのもの。そうした未確定の領域を保つことで、自分や他人を早く決めつけない力があります。",
        "一方で、可能性を見続けることは、現実の選択を遅らせることにもつながります。どの扉も完全には閉めたくない、どれもありえたと感じたい。その結果、今ここで起きていることへ十分に踏み込めない日もあるでしょう。開かれなかった扉を愛するほど、今開いている扉の重さを見失うことがあります。",
        "大切なのは、可能性を捨てることではありません。『まだ開けない』ことと『もう開かない』ことを見分けることです。あなたは不在の中に、欠落ではなく『まだ起きていないものの余熱』を見つける人です。だからこそ、どこか一つだけは、実際に手をかけて開いてみてもよいのです。"
      ],
      question: "あなたがいま見つめている、まだ開いていない扉は何ですか？"
    },

    afterlight: {
      title: "去ったあとの光を拾う",
      subtitle: "終わったあとにだけ残る明るさや温度として不在を感じる",
      image: "",
      captureImage: "",
      text: [
        "あなたが先に触れる不在は、消えたことそのものではなく、そのあとにだけ残る光です。電車が去ったホームの風、会話が終わった部屋のぬくもり、夕方のあとの窓辺。あなたは終わりの直後に立ち上がる余韻へ強く反応する人です。",
        "この感覚は、喪失を暗いものだけとして見ていない証拠でもあります。何かが去ったあとには、ただの欠落ではなく、その存在が通ったからこそ生まれる残光があります。あなたはその微かな明るさや温度を拾い集め、失われたものを『ゼロ』にしない方法を知っています。",
        "そのためあなたは、終わりの扱い方が丁寧です。人との別れ、場の解散、暮らしの変化。終わったことをすぐに消去せず、あとに残る色合いや速度まで含めて受け取ろうとします。記録や思い出が、単なる回顧ではなく、残光を保つ行為になっているかもしれません。",
        "ただし、余韻が美しいほど、その場から離れにくくなることもあります。去ったあとの光にとどまり続けると、次に訪れる暗さや新しい明るさを受け取りにくくなる。余韻は豊かですが、永住する場所ではありません。",
        "あなたに必要なのは、余韻を急いで消すことではなく、そこから何を受け取ったのかをひとつ持ち帰ることです。あなたは不在の中に、『もう終わったはずのものが残していく光』を見つける人です。その光があったから、去ったものは完全には無駄ではなかったと言えるのかもしれません。"
      ],
      question: "最近、去ったあとにだけ見えた光景はありましたか？"
    },

    gapkeeper: {
      title: "余白を残す",
      subtitle: "埋めないことそのものに意味を見いだす不在",
      image: "",
      captureImage: "",
      text: [
        "あなたが先に触れる不在は、失われたものへの悲しみだけではなく、『埋められていないこと』そのものの価値です。空いている棚、剥がされたあとの白い壁、言葉を継ぎ足さない沈黙。あなたは欠けている部分を、すぐに補うべき不足とは見なさない人です。",
        "それは諦めではありません。余白には、まだ決まっていないものが息をする場所があると知っているからです。何でも埋めてしまうと、今ここに現れていないものが入ってくる余地がなくなります。あなたはその空きの意味を直感的に守ろうとします。",
        "この歩き方は、作品、会話、暮らし、人間関係のどこにも現れます。全部を説明しない。すぐに結論を出さない。置かれたままの間や、触れられていない部分に価値を感じる。そのため、他人や自分を急いで固定しない柔らかさがあります。",
        "一方で、余白を残すことが、必要な行動や言葉を先送りする理由になっていないかは見直す必要があります。本当は埋めるべき穴や、返すべき返事まで『このままでよい』と感じてしまうと、関係や生活の流れが滞ることもあります。",
        "余白は放置ではなく、意識的に残すことで初めて意味を持ちます。あなたは不在の中に、『まだ埋めないことの価値』を見つける人です。だからこそ、どこを残し、どこは埋めるのかを自分で選べるはずです。その選択そのものが、あなたの感受性の形です。"
      ],
      question: "いま、あえて埋めずに残しておきたい余白はどこにありますか？"
    },

    returnless: {
      title: "戻らないものを見送る",
      subtitle: "帰ってこないことを、静かに受け取る不在",
      image: "",
      captureImage: "",
      text: [
        "あなたが先に触れる不在は、『もう戻らないかもしれない』という感覚です。去った人、終わった時間、返ってこなかった言葉。そこにまだ可能性を見たい気持ちがあっても、あなたは同時に、戻らないという事実の輪郭にも触れてしまいます。",
        "それは悲観的だからではありません。むしろ、終わりを曖昧にしない誠実さに近い感覚です。いつか戻るかもしれない、また同じように続くかもしれない、と無理に希望で覆わず、その不在がもたらす重さを正面から受け止めようとします。",
        "この感受性は、喪失や変化を雑に扱わない力になります。終わったものを終わったものとして見送るからこそ、その出来事が自分の中で本当の位置を持てる。あなたは『なかったこと』にしない代わりに、『まだあること』にも偽らない人です。",
        "ただし、戻らないものを先に見てしまうことで、まだ動ける関係や、回復できる出来事まで早く閉じてしまう危険もあります。失うことに敏感な分、期待するより先に見送る体勢へ入ってしまうことがあるでしょう。",
        "あなたに必要なのは、見送ることをやめることではなく、本当に見送るべきものと、まだ待っていてよいものを区別することです。あなたは不在の中に、『もう戻らないという静かな真実』を見つける人です。その真実は冷たさではなく、物事を軽く扱わない深さでもあります。"
      ],
      question: "あなたはいま、何を静かに見送ろうとしていますか？"
    }
  };

  const intro = document.getElementById("abIntro");
  const quiz = document.getElementById("abQuiz");
  const resultSection = document.getElementById("abResult");

  const startBtn = document.getElementById("abStartBtn");
  const backBtn = document.getElementById("abBackBtn");
  const homeBtn = document.getElementById("abHomeBtn");
  const copyBtn = document.getElementById("abCopyBtn");
  const copyBtnBottom = document.getElementById("abCopyBtnBottom");
  const textShareBtn = document.getElementById("abTextShareBtn");
  const shareBtn = document.getElementById("abShareBtn");
  const saveStoryBtn = document.getElementById("abSaveStoryBtn");

  const progress = document.getElementById("abProgress");
  const progressBar = document.getElementById("abProgressBar");
  const timeLabel = document.getElementById("abTimeLabel");
  const questionEl = document.getElementById("abQuestion");
  const sceneText = document.getElementById("abSceneText");
  const options = document.getElementById("abOptions");

  const resultImage = document.getElementById("abResultImage");
  const resultTitle = document.getElementById("abResultTitle");
  const resultSubtitle = document.getElementById("abResultSubtitle");
  const resultText = document.getElementById("abResultText");
  const resultQuestion = document.getElementById("abResultQuestion");
  const scoreList = document.getElementById("abScoreList");
  const recordText = document.getElementById("abRecordText");

  const captureStory = document.getElementById("abCaptureStory");

  if (
    !intro || !quiz || !resultSection || !startBtn || !backBtn || !homeBtn ||
    !copyBtn || !copyBtnBottom || !textShareBtn || !shareBtn || !saveStoryBtn || !progress ||
    !progressBar || !timeLabel || !questionEl || !sceneText || !options ||
    !resultImage || !resultTitle || !resultSubtitle || !resultText ||
    !resultQuestion || !scoreList || !recordText || !captureStory
  ) {
    return;
  }

  let current = 0;
  let answers = [];
  let scores = createScores();
  let currentResultKey = "";
  let currentResult = null;

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

  function show(section, scroll = true) {
    [intro, quiz, resultSection].forEach(el => {
      el.hidden = el !== section;
    });

    section.style.animation = "none";
    void section.offsetWidth;
    section.style.animation = "";

    if (scroll) {
      document.getElementById("abTest").scrollIntoView({ behavior: "smooth", block: "start" });
    }
  }

  function resetAll() {
    current = 0;
    answers = [];
    scores = createScores();
    currentResultKey = "";
    currentResult = null;
    recordText.value = "";
    scoreList.innerHTML = "";
    startBtn.textContent = "もう一度最初から診る";
  }

  function startQuiz() {
    current = 0;
    answers = [];
    scores = createScores();
    currentResultKey = "";
    currentResult = null;
    recordText.value = "";
    scoreList.innerHTML = "";
    renderQuestion();
    show(quiz);
  }

  function goHome() {
    show(intro);
  }

  function rebuildScores() {
    scores = createScores();

    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");

    progress.textContent = `${number} / ${questions.length}`;
    progressBar.style.width = `${((current + 1) / questions.length) * 100}%`;
    timeLabel.textContent = item.time;
    questionEl.textContent = item.q;
    sceneText.textContent = item.text;
    options.innerHTML = "";

    item.a.forEach(answer => {
      const button = document.createElement("button");
      button.type = "button";
      button.className = "ab-option";
      button.textContent = answer.text;

      button.addEventListener("click", () => {
        if (options.dataset.locked === "1") return;
        options.dataset.locked = "1";
        button.classList.add("is-chosen");
        answers[current] = answer;

        window.setTimeout(() => {
          current += 1;
          options.dataset.locked = "0";
          if (current < questions.length) {
            renderQuestion();
          } else {
            rebuildScores();
            showResult();
          }
        }, 180);
      });

      options.appendChild(button);
    });

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

  function getTopResultKey() {
    const maxScore = Math.max(...Object.values(scores));
    const tied = TYPES.filter(type => scores[type] === maxScore);

    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 match = selectedTypes.find(type => tied.includes(type));
      if (match) return match;
    }

    return tied[0];
  }

  function showResult() {
    currentResultKey = getTopResultKey();
    currentResult = results[currentResultKey];

    resultTitle.textContent = currentResult.title;
    resultSubtitle.textContent = currentResult.subtitle;
    resultText.innerHTML = currentResult.text
      .map(paragraph => `<p>${escapeHtml(paragraph)}</p>`)
      .join("");

    resultQuestion.textContent = currentResult.question;

    const fallback =
      "linear-gradient(135deg, rgba(238,235,226,.96), rgba(154,168,158,.54))";

    resultImage.style.backgroundImage = currentResult.image
      ? `url("${currentResult.image}")`
      : fallback;

    resultImage.setAttribute(
      "aria-label",
      `診断結果「${currentResult.title}」を表すイメージ`
    );

    renderScoreList();
    startBtn.textContent = "もう一度最初から診る";
    show(resultSection);
  }

  function renderScoreList() {
    const max = Math.max(...Object.values(scores), 1);
    const sorted = [...TYPES].sort((a, b) => scores[b] - scores[a]);

    scoreList.innerHTML = sorted.map(type => {
      const width = Math.max(4, (scores[type] / max) * 100);

      return `
        <div class="ab-score-row">
          <span>${escapeHtml(TYPE_LABELS[type])}</span>
          <span class="ab-score-track">
            <span class="ab-score-fill" style="width:${width}%"></span>
          </span>
          <span>${scores[type]}</span>
        </div>
      `;
    }).join("");
  }

  function goBack() {
    if (current === 0) {
      show(intro);
      return;
    }

    current -= 1;
    renderQuestion();
  }

  function getCurrentDateTimeString() {
    const now = new Date();
    const yyyy = now.getFullYear();
    const mm = String(now.getMonth() + 1).padStart(2, "0");
    const dd = String(now.getDate()).padStart(2, "0");
    const hh = String(now.getHours()).padStart(2, "0");
    const mi = String(now.getMinutes()).padStart(2, "0");
    return `${yyyy}.${mm}.${dd} ${hh}:${mi}`;
  }

  function makeShareText(includeUrl = true) {
    if (!currentResult) return "";

    const lines = [
      "私の不在の見え方は",
      "",
      `「${currentResult.title}」`,
      "",
      currentResult.subtitle,
      "",
      "#不在診断"
    ];

    if (includeUrl) {
      lines.push("", window.location.href);
    }

    return lines.join("\n");
  }

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

    const note = recordText.value.trim();
    const fullText = currentResult.text.join("\n\n");

    const text = [
      "不在診断",
      "",
      `私の結果：${currentResult.title}`,
      currentResult.subtitle,
      "",
      fullText,
      "",
      "持ち帰る問い",
      currentResult.question,
      "",
      "今日の記録",
      note || "未記入",
      "",
      window.location.href
    ].join("\n");

    try {
      await navigator.clipboard.writeText(text);
      showButtonFeedback(copyBtn, "コピーしました");
    } catch (error) {
      fallbackCopy(text);
      showButtonFeedback(copyBtn, "コピーしました");
    }
  }

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

    const text = makeShareText(true);

    try {
      if (navigator.share) {
        await navigator.share({
          title: "不在診断",
          text
        });
      } else {
        await navigator.clipboard.writeText(text);
        showButtonFeedback(shareBtn, "コピーしました");
      }
    } catch (error) {
      if (error && error.name === "AbortError") return;

      try {
        await navigator.clipboard.writeText(text);
        showButtonFeedback(shareBtn, "コピーしました");
      } catch (copyError) {
        fallbackCopy(text);
        showButtonFeedback(shareBtn, "コピーしました");
      }
    }
  }

  async function copyShareText() {
    if (!currentResult) return;
    const text = makeShareText(true);
    try {
      await navigator.clipboard.writeText(text);
    } catch (error) {
      fallbackCopy(text);
    }
    showButtonFeedback(textShareBtn, "共有文をコピーしました");
  }

  function loadHtml2Canvas() {
    return new Promise((resolve, reject) => {
      if (window.html2canvas) {
        resolve(window.html2canvas);
        return;
      }

      const existing = document.querySelector('script[data-ab-html2canvas="true"]');

      if (existing) {
        existing.addEventListener("load", () => resolve(window.html2canvas), { once: true });
        existing.addEventListener("error", reject, { once: true });
        return;
      }

      const script = document.createElement("script");
      script.src = "https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js";
      script.async = true;
      script.dataset.abHtml2canvas = "true";
      script.onload = () => resolve(window.html2canvas);
      script.onerror = reject;
      document.head.appendChild(script);
    });
  }

  function populateCaptureCard(card) {
    const note = recordText.value.trim();
    const dt = getCurrentDateTimeString();

    card.querySelector(".ab-capture-title").textContent = currentResult.title;
    card.querySelector(".ab-capture-subtitle").textContent = currentResult.subtitle;
    card.querySelector(".ab-capture-datetime").textContent = dt;
    card.querySelector(".ab-capture-result-text").innerHTML =
      currentResult.text.map(paragraph => `<p>${escapeHtml(paragraph)}</p>`).join("");
    card.querySelector(".ab-capture-question").textContent = currentResult.question;

    const recordWrap = card.querySelector(".ab-capture-record-wrap");
    const record = card.querySelector(".ab-capture-record");

    record.textContent = note;
    recordWrap.style.display = note ? "block" : "none";

    card.style.backgroundImage = currentResult.captureImage
      ? `url("${currentResult.captureImage}")`
      : currentResult.image
      ? `url("${currentResult.image}")`
      : "linear-gradient(145deg, #dfe4df 0%, #e9e1d6 48%, #bdc9c1 100%)";
  }

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

    const card = captureStory;
    const button = saveStoryBtn;

    populateCaptureCard(card);

    const oldText = button.textContent;
    button.textContent = "画像を作成中";

    try {
      const html2canvas = await loadHtml2Canvas();

      const width = 1080;
      const height = 1920;

      const canvas = await html2canvas(card, {
        backgroundColor: null,
        width,
        height,
        scale: 1,
        useCORS: true,
        allowTaint: false,
        logging: false
      });

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

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

      const date = new Date().toISOString().slice(0, 10).replaceAll("-", "");
      const filename = `${date}_不在診断_${currentResult.title}.png`;
      const file = new File([blob], filename, { type: "image/png" });

      if (navigator.canShare && navigator.canShare({ files: [file] }) && navigator.share) {
        try {
          await navigator.share({
            files: [file],
            title: "不在診断",
            text: `私の不在の見え方は「${currentResult.title}」でした。\n${window.location.href}`
          });
          return;
        } catch (error) {
          if (error && error.name === "AbortError") return;
        }
      }

      const url = URL.createObjectURL(blob);
      const link = document.createElement("a");
      link.href = url;
      link.download = filename;
      document.body.appendChild(link);
      link.click();
      link.remove();

      setTimeout(() => URL.revokeObjectURL(url), 1000);
    } catch (error) {
      console.error(error);
      alert("結果画像を作成できませんでした。ページを再読み込みして、もう一度お試しください。");
    } finally {
      button.textContent = oldText;
    }
  }

  function showButtonFeedback(button, message) {
    const oldText = button.textContent;
    button.textContent = message;
    window.setTimeout(() => {
      button.textContent = oldText;
    }, 1600);
  }

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

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

  startBtn.addEventListener("click", startQuiz);
  backBtn.addEventListener("click", goBack);
  homeBtn.addEventListener("click", goHome);
  copyBtn.addEventListener("click", copyResultAndRecord);
  copyBtnBottom.addEventListener("click", copyResultAndRecord);
  textShareBtn.addEventListener("click", copyShareText);
  shareBtn.addEventListener("click", shareResult);
  saveStoryBtn.addEventListener("click", saveResultImage);
})();
</script>
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/absence-reading-test/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1407</post-id>	</item>
		<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>Photography Guide: 雨の日の写真</title>
		<link>https://tranquilguides.com/rain-photography-guide/</link>
					<comments>https://tranquilguides.com/rain-photography-guide/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Fri, 10 Jul 2026 13:19:45 +0000</pubDate>
				<category><![CDATA[生存ログ]]></category>
		<category><![CDATA[Photography Guide]]></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=1384</guid>

					<description><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215145__-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>雨の日の写真の撮り方を、「反射」「境界」「足元」「残った光」という4つの視点から紹介するPhotography Guide。雨の日だからこそ見つかる風景の撮り方やアイデアをまとめました。]]></description>
										<content:encoded><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215145__-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="is-style-lead wp-block-paragraph">雨の日は、晴れの日よりも写真を撮りにくい。</p>



<p class="is-style-lead wp-block-paragraph">けれど、見えるものが少ないぶん、普段は気づかないものを浮き出させます。</p>



<p class="wp-block-paragraph">濡れた路面、曇った窓、傘の縁、光を含んだ水たまり。</p>



<p class="wp-block-paragraph">このPhotography Guideでは、雨の日を「悪条件」として避けるのではなく、<strong>写真の見え方が変わる好機</strong>として捉えてみる。</p>



<h3 class="wp-block-heading">雨の日に変わるもの</h3>



<p class="wp-block-paragraph">雨は、風景に新しいものを加えるというより、もともとあった関係を見えやすくします。</p>



<ul class="wp-block-list">
<li>路面が光を反射する</li>



<li>遠景の輪郭が薄くなる</li>



<li>人の動きが小さくなる</li>



<li>窓や傘が、視界の一部を遮る</li>



<li>色が暗くなり、わずかな明るさが際立つ</li>
</ul>



<p class="wp-block-paragraph">晴れの日は、何もかもがよく見えます。</p>



<p class="wp-block-paragraph">雨の日は、見えない部分が増えます。</p>



<p class="wp-block-paragraph">その差が、写真に余白をつくります。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215211__-1024x683.jpg" alt="" class="wp-image-1388" srcset="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215211__-1024x683.jpg 1024w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215211__-300x200.jpg 300w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215211__-768x512.jpg 768w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215211__-600x400.jpg 600w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215211__.jpg 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">まず探したい4つのもの</h2>



<div class="swell-block-step is-style-default" data-num-style="circle">

<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"></div><h3 class="swell-block-step__title u-fz-l">反射</h3><div class="swell-block-step__body">

<p class="wp-block-paragraph">水たまりや濡れたアスファルトには、現実とは少しずれた風景が映ります。</p>


<p class="wp-block-paragraph">被写体そのものではなく、反射だけを撮っても構いません。</p>


<p class="wp-block-paragraph">上下を反転させると、見慣れた場所が別の空間になります。</p>


<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215148__-1024x683.jpg" alt="" class="wp-image-1395" srcset="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215148__-1024x683.jpg 1024w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215148__-300x200.jpg 300w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215148__-768x512.jpg 768w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215148__-600x400.jpg 600w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215148__.jpg 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>

</div></div>


<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"></div><h3 class="swell-block-step__title u-fz-l">境界</h3><div class="swell-block-step__body">

<p class="wp-block-paragraph">窓ガラス、車内、軒下、傘の内側。</p>


<p class="wp-block-paragraph">雨の日は「こちら側」と「向こう側」が増えます。</p>


<p class="wp-block-paragraph">ガラス越しに撮ると、水滴や曇りが画面に残ります。</p>


<p class="wp-block-paragraph">きれいに写らないことを欠点にせず、距離として使います。</p>


<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215205__-1024x683.jpg" alt="" class="wp-image-1387" srcset="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215205__-1024x683.jpg 1024w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215205__-300x200.jpg 300w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215205__-768x512.jpg 768w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215205__-600x400.jpg 600w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215205__.jpg 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>

</div></div>


<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"></div><h3 class="swell-block-step__title u-fz-l">足元</h3><div class="swell-block-step__body">

<p class="wp-block-paragraph">視線を下げると、靴、跳ねた水、排水溝、落ち葉が見えてきます。</p>


<p class="wp-block-paragraph">遠くの景色を探すより<strong>数歩先の変化</strong>を見る方が、雨の日には向いています。</p>


<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="768" src="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215150__-1024x768.jpg" alt="" class="wp-image-1390" srcset="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215150__-1024x768.jpg 1024w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215150__-300x225.jpg 300w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215150__-768x576.jpg 768w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215150__-600x450.jpg 600w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215150__.jpg 1448w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>

</div></div>


<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"></div><h3 class="swell-block-step__title u-fz-l">残った光</h3><div class="swell-block-step__body">

<p class="wp-block-paragraph">曇天では全体の明るさが落ちます。</p>


<p class="wp-block-paragraph">そのぶん、店の灯り、信号、白い壁、濡れた金属が目立ちます。</p>


<p class="wp-block-paragraph">暗い場所を明るく撮ろうとしすぎず、暗さの中に<strong>何が残っているのか</strong>を見ます。</p>


<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215209__-1024x683.jpg" alt="" class="wp-image-1391" srcset="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215209__-1024x683.jpg 1024w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215209__-300x200.jpg 300w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215209__-768x512.jpg 768w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215209__-600x400.jpg 600w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215209__.jpg 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>

</div></div>

</div>



<h2 class="wp-block-heading">撮り方の目安</h2>



<figure class="wp-block-table"><table><thead><tr><th>場面</th><th>考え方</th></tr></thead><tbody><tr><td>水たまり</td><td>被写体より反射を優先する</td></tr><tr><td>窓越し</td><td>水滴を消さず、前景として残す</td></tr><tr><td>人物</td><td>顔ではなく、傘や足元、距離を写す</td></tr><tr><td>夜</td><td>濡れた路面に映る光を探す</td></tr><tr><td>雨上がり</td><td>消え始める水滴や反射を追う</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">機材より先に決めること</h2>



<p class="wp-block-paragraph">雨の日は、レンズや設定よりも「どこまで濡れても撮るか」を先に決めておく方が重要です。</p>



<ul class="wp-block-list">
<li>軒下や車内から撮る</li>



<li>短時間だけ歩く</li>



<li>防滴性能を過信しない</li>



<li>レンズ交換をなるべく避ける</li>



<li>帰宅後に機材を乾かす</li>
</ul>



<p class="wp-block-paragraph">撮ることに集中しすぎると、機材や身体の負担を見落とします。</p>



<p class="wp-block-paragraph">雨に近づく方法は一つではありません。</p>



<p class="wp-block-paragraph">撮影が終わったあと、機材を拭く時間も<strong>撮影の一部</strong>として考えてみてください。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215156__-1024x683.jpg" alt="" class="wp-image-1392" srcset="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215156__-1024x683.jpg 1024w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215156__-300x200.jpg 300w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215156__-768x512.jpg 768w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215156__-600x400.jpg 600w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215156__.jpg 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">このGuideの見方</h2>



<p class="wp-block-paragraph">すべてを試す必要はありません。</p>



<p class="wp-block-paragraph">今日は反射だけ。</p>



<p class="wp-block-paragraph">次は窓越しだけ。</p>



<p class="wp-block-paragraph">そのくらいに範囲を狭めた方が、同じ場所でも違いを見つけやすくなります。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">今日のGuide</h2>



<p class="wp-block-paragraph"><strong>小さな課題</strong></p>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>水たまりだけ探す</li>



<li>5枚だけ撮る</li>



<li>傘を一度閉じて立ち止まる</li>
</ul>



<p class="wp-block-paragraph">一枚でも構いません、挑戦することが重要だと思います。</p>



<div style="height:70px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215204__-1024x683.jpg" alt="" class="wp-image-1394" srcset="https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215204__-1024x683.jpg 1024w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215204__-300x200.jpg 300w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215204__-768x512.jpg 768w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215204__-600x400.jpg 600w, https://tranquilguides.com/wp-content/uploads/2026/07/20260710_215204__.jpg 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:70px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">雨の日は、風景が消えるのではなく、見える順番が変わります。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/rain-photography-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1384</post-id>	</item>
		<item>
		<title>Guide Map</title>
		<link>https://tranquilguides.com/map/</link>
					<comments>https://tranquilguides.com/map/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Fri, 10 Jul 2026 03:03:54 +0000</pubDate>
				<category><![CDATA[生存ログ]]></category>
		<guid isPermaLink="false">https://tranquilguides.com/?p=1353</guid>

					<description><![CDATA[Tranquilvæj Tranquil Guide Map 探すためではなく、引っかかるための索引。 気になる断片に触れてください。クリックすると、ひとつの世界へ入ります。]]></description>
										<content:encoded><![CDATA[
<style data-wp-block-html="css">
:root{
  --tq-ink:#0d0f11;
  --tq-soft:rgba(0,0,0,.62);
  --tq-sub:rgba(0,0,0,.44);
  --tq-border:rgba(255,255,255,.22);
}

.tq-map{
  position:relative;
  max-width:1100px;
  margin:0 auto;
  padding:70px 16px 0;
}

.tq-hero{margin:0 0 18px;}
.tq-kicker{
  margin:0 0 6px;
  font-size:12px;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--tq-sub);
}
.tq-title{
  margin:0 0 12px;
  font-size:36px;
  letter-spacing:-.02em;
  line-height:1.02;
  color:var(--tq-ink);
}
.tq-sub{
  margin:0;
  color:var(--tq-soft);
  font-size:15px;
  line-height:1.6;
}
.tq-note{
  margin:10px 0 0;
  font-size:13px;
  color:var(--tq-sub);
}

/* Map Grid for Latest Posts (予感の入口) */
.tq-map + .wp-block-latest-posts{
  max-width:1100px;
  margin:20px auto 70px;
  padding:0 16px;
  list-style:none;
  display:grid;
  grid-template-columns:repeat(auto-fill, minmax(230px, 1fr));
  gap:18px;
}

/* floating bubble tile */
.tq-map + .wp-block-latest-posts li{
  position:relative;
  padding:16px 16px 14px;
  border-radius:999px;
  border:1px solid rgba(0,0,0,.06);
  background:rgba(255,255,255,.62);
  box-shadow:0 18px 60px rgba(0,0,0,.08);
  backdrop-filter:blur(10px);
  transform:translate(var(--tq-x,0px), var(--tq-y,0px)) rotate(var(--tq-r,0deg)) scale(var(--tq-s,1));
  transition:transform .45s ease, box-shadow .45s ease, border-color .45s ease, background .45s ease;
  overflow:hidden;
}

.tq-map + .wp-block-latest-posts li::after{
  content:"";
  position:absolute;
  inset:-40%;
  background:radial-gradient(50% 40% at 20% 20%, rgba(255,255,255,.18), transparent 60%);
  transform:rotate(var(--tq-r,0deg));
  pointer-events:none;
}

.tq-map + .wp-block-latest-posts li:hover{
  border-color:rgba(0,0,0,.08);
  transform:translate(var(--tq-x,0px), var(--tq-y,0px)) rotate(0deg) scale(1.03);
  box-shadow:0 28px 80px rgba(0,0,0,.12);
  background:rgba(255,255,255,.78);
}

/* Excerpt is the main entrance */
.tq-map + .wp-block-latest-posts .wp-block-latest-posts__post-excerpt{
  margin:0;
  color:var(--tq-ink);
  font-size:15px;
  line-height:1.45;
  letter-spacing:.01em;
}

.tq-map + .wp-block-latest-posts .wp-block-latest-posts__post-excerpt p{margin:0;}

/* Title is revealed when you get closer */
.tq-map + .wp-block-latest-posts .wp-block-latest-posts__post-title{
  display:block;
  margin:10px 0 0;
  font-size:12px;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--tq-sub);
  opacity:0;
  transform:translateY(4px);
  transition:opacity .2s ease, transform .2s ease;
  text-decoration:none;
}

.tq-map + .wp-block-latest-posts li:hover .wp-block-latest-posts__post-title{
  opacity:1;
  transform:translateY(0);
}

/* keep accessible on mobile */
@media (hover:none){
  .tq-map + .wp-block-latest-posts .wp-block-latest-posts__post-title{
    opacity:1;
    transform:translateY(0);
  }
}

/* variations (bubble sizes) */
.tq-map + .wp-block-latest-posts li.tq-bubble-lg{
  grid-column:span 2;
  min-height:5.2rem;
}

.tq-map + .wp-block-latest-posts li.tq-bubble-md{
  min-height:4.5rem;
}

.tq-map + .wp-block-latest-posts li.tq-bubble-sm{
  min-height:4.0rem;
}

@media (max-width:760px){
  .tq-map + .wp-block-latest-posts li.tq-bubble-lg{
    grid-column:span 1;
  }
}
</style>

<script data-wp-block-html="js">
(function(){
  var rand = function(min, max){ return Math.random()*(max-min)+min; };
  var init = function(){
    var list = document.querySelector('.tq-map + .wp-block-latest-posts');
    if(!list) return;
    var items = Array.prototype.slice.call(list.children);

    items.forEach(function(li, idx){
      var s = rand(0.92, 1.16);
      var x = rand(-4, 4);
      var y = rand(-4, 4);
      var r = rand(-1.4, 1.4);
      li.style.setProperty('--tq-s', s.toFixed(3));
      li.style.setProperty('--tq-x', x.toFixed(2) + 'px');
      li.style.setProperty('--tq-y', y.toFixed(2) + 'px');
      li.style.setProperty('--tq-r', r.toFixed(2) + 'deg');

      // Bubble size variation
      var size = 'tq-bubble-sm';
      if(idx % 9 === 0) size = 'tq-bubble-lg';
      else if(idx % 5 === 0) size = 'tq-bubble-md';
      li.classList.add(size);

      // subtle shuffle
      li.style.order = Math.floor(Math.random()*items.length);
    });

    // make whole bubble clickable
    items.forEach(function(li){
      var link = li.querySelector('a');
      if(!link) return;
      li.addEventListener('click', function(e){
        if(e.target.tagName.toLowerCase() === 'a') return;
        link.click();
      });
    });
  };

  if(document.readyState === 'loading'){
    document.addEventListener('DOMContentLoaded', init);
  }else{
    init();
  }
})();
</script>

<section class="tq-map">
  <header class="tq-hero">
    <p class="tq-kicker">Tranquilvæj</p>
    <h2 class="tq-title">Tranquil Guide Map</h2>
    <p class="tq-sub">探すためではなく、引っかかるための索引。</p>
    <p class="tq-note">気になる断片に触れてください。クリックすると、ひとつの世界へ入ります。</p>
  </header>
</section>



<div id="tranquil-map"></div>



<style data-wp-block-html="css">
#tranquil-map {
  min-height: 720px;
  padding: 72px 5vw 96px;
  background:
    radial-gradient(circle at 18% 22%, rgba(140,150,255,.16), transparent 28%),
    radial-gradient(circle at 82% 36%, rgba(170,220,210,.18), transparent 30%),
    linear-gradient(180deg, #fbfaf7 0%, #f4f1eb 100%);
  overflow: hidden;
}

.tq-map-head {
  max-width: 760px;
  margin: 0 auto 56px;
}

.tq-map-kicker {
  font-size: 11px;
  letter-spacing: .18em;
  color: rgba(30,30,30,.38);
  margin: 0 0 28px;
}

.tq-map-title {
  font-size: clamp(32px, 5vw, 72px);
  line-height: .95;
  letter-spacing: -.055em;
  margin: 0 0 22px;
  font-weight: 600;
}

.tq-map-lead {
  font-size: 14px;
  line-height: 1.9;
  color: rgba(30,30,30,.62);
  margin: 0;
}

.tq-field {
  position: relative;
  max-width: 1120px;
  min-height: 620px;
  margin: 0 auto;
}

.tq-orb {
  position: absolute;
  width: var(--s);
  min-height: calc(var(--s) * .72);
  left: var(--x);
  top: var(--y);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  border-radius: 42% 58% 54% 46% / 52% 42% 58% 48%;
  color: #1d1d1d;
  text-decoration: none;
  background:
    linear-gradient(145deg, rgba(255,255,255,.88), rgba(255,255,255,.34)),
    radial-gradient(circle at 28% 18%, rgba(255,255,255,.95), transparent 34%),
    radial-gradient(circle at 78% 86%, rgba(120,130,220,.18), transparent 36%);
  border: 1px solid rgba(255,255,255,.72);
  box-shadow:
    inset 0 0 26px rgba(255,255,255,.64),
    0 22px 70px rgba(30,30,30,.08);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  transform: translate3d(0,0,0) rotate(var(--r));
  transition: transform .45s ease, box-shadow .45s ease, opacity .45s ease;
  animation: tqFloat var(--d) ease-in-out infinite alternate;
}

.tq-orb:hover {
  transform: translateY(-8px) scale(1.035) rotate(var(--r));
  box-shadow:
    inset 0 0 32px rgba(255,255,255,.76),
    0 28px 90px rgba(80,80,130,.16);
}

.tq-phrase {
  display: block;
  font-size: clamp(13px, 1.25vw, 17px);
  line-height: 1.75;
  letter-spacing: .02em;
}

.tq-title {
  display: block;
  margin-top: 12px;
  font-size: 11px;
  letter-spacing: .08em;
  color: rgba(30,30,30,.42);
  opacity: 0;
  transition: opacity .3s ease;
}

.tq-orb:hover .tq-title {
  opacity: 1;
}

.tq-loading,
.tq-error {
  max-width: 720px;
  margin: 80px auto;
  font-size: 13px;
  color: rgba(30,30,30,.5);
}

@keyframes tqFloat {
  from { translate: 0 0; }
  to { translate: 0 -16px; }
}

@media (max-width: 780px) {
  #tranquil-map {
    padding: 48px 18px 72px;
  }

  .tq-field {
    min-height: auto;
    display: grid;
    grid-template-columns: 1fr;
    gap: 18px;
  }

  .tq-orb {
    position: relative;
    left: auto;
    top: auto;
    width: auto;
    min-height: 132px;
    border-radius: 28px;
    animation: none;
    transform: none;
  }

  .tq-title {
    opacity: 1;
  }
}
</style>



<script data-wp-block-html="js">
(function () {
  'use strict';

  const root = document.getElementById('tranquil-map');
  if (!root) return;

  const CONFIG = {
    endpoint: '/wp-json/wp/v2/posts?_embed=1&per_page=24',
    maxPosts: 18,
    minSize: 170,
    maxSize: 260,
    fieldHeight: 680
  };

  const POSITIONS = [
    [4, 8], [34, 0], [68, 10],
    [17, 34], [51, 30], [78, 40],
    [2, 63], [31, 58], [62, 66],
    [12, 88], [45, 86], [76, 82],
    [24, 112], [57, 116], [84, 108],
    [6, 138], [38, 146], [70, 140]
  ];

  function stripHTML(html) {
    const div = document.createElement('div');
    div.innerHTML = html || '';
    return (div.textContent || div.innerText || '').replace(/\s+/g, ' ').trim();
  }

  function makePhrase(post) {
    const excerpt = stripHTML(post.excerpt && post.excerpt.rendered);
    const title = stripHTML(post.title && post.title.rendered);

    if (excerpt && excerpt.length > 12) {
      return excerpt.length > 72 ? excerpt.slice(0, 72) + '…' : excerpt;
    }

    return title || '名前のない断片';
  }

  function shuffle(array) {
    return array
      .map(value => ({ value, sort: Math.random() }))
      .sort((a, b) => a.sort - b.sort)
      .map(item => item.value);
  }

  function renderShell() {
    root.innerHTML = `
      <section class="tq-map-app" aria-label="Tranquil Map">
        <header class="tq-map-head">
          <p class="tq-map-kicker">TRANQUILVÆJ</p>
          <h1 class="tq-map-title">Tranquil Map</h1>
          <p class="tq-map-lead">
            探すためではなく、引っかかるための索引。<br>
            気になる断片に近づいてください。クリックすると、ひとつの世界へ入ります。
          </p>
        </header>
        <div class="tq-field" aria-live="polite">
          <p class="tq-loading">断片を読み込んでいます。</p>
        </div>
      </section>
    `;
  }

  function renderPosts(posts) {
    const field = root.querySelector('.tq-field');
    if (!field) return;

    const selected = shuffle(posts).slice(0, CONFIG.maxPosts);

    field.innerHTML = '';

    selected.forEach((post, index) => {
      const pos = POSITIONS[index % POSITIONS.length];
      const size = CONFIG.minSize + Math.random() * (CONFIG.maxSize - CONFIG.minSize);
      const rotation = (Math.random() * 10 - 5).toFixed(2);
      const duration = (5 + Math.random() * 5).toFixed(2);

      const title = stripHTML(post.title && post.title.rendered);
      const phrase = makePhrase(post);
      const link = post.link;

      const a = document.createElement('a');
      a.className = 'tq-orb';
      a.href = link;
      a.setAttribute('aria-label', title || phrase);

      a.style.setProperty('--s', `${size}px`);
      a.style.setProperty('--x', `${pos[0]}%`);
      a.style.setProperty('--y', `${pos[1]}px`);
      a.style.setProperty('--r', `${rotation}deg`);
      a.style.setProperty('--d', `${duration}s`);

      a.innerHTML = `
        <span>
          <span class="tq-phrase">${escapeHTML(phrase)}</span>
          <span class="tq-title">${escapeHTML(title)}</span>
        </span>
      `;

      field.appendChild(a);
    });
  }

  function escapeHTML(str) {
    return String(str || '')
      .replace(/&/g, '&amp;')
      .replace(/</g, '&lt;')
      .replace(/>/g, '&gt;')
      .replace(/"/g, '&quot;')
      .replace(/'/g, '&#039;');
  }

  async function loadPosts() {
    renderShell();

    try {
      const res = await fetch(CONFIG.endpoint, {
        credentials: 'same-origin',
        headers: { Accept: 'application/json' }
      });

      if (!res.ok) throw new Error('投稿を取得できませんでした。');

      const posts = await res.json();

      if (!Array.isArray(posts) || !posts.length) {
        throw new Error('表示できる投稿がありません。');
      }

      renderPosts(posts);
      activatePointer();
    } catch (error) {
      const field = root.querySelector('.tq-field');
      if (field) {
        field.innerHTML = `<p class="tq-error">断片を読み込めませんでした。</p>`;
      }
    }
  }

  function activatePointer() {
    if (window.matchMedia('(max-width: 780px)').matches) return;

    const field = root.querySelector('.tq-field');
    const orbs = Array.from(root.querySelectorAll('.tq-orb'));
    if (!field || !orbs.length) return;

    field.addEventListener('mousemove', event => {
      const rect = field.getBoundingClientRect();
      const mx = event.clientX - rect.left;
      const my = event.clientY - rect.top;

      orbs.forEach(orb => {
        const oRect = orb.getBoundingClientRect();
        const ox = oRect.left - rect.left + oRect.width / 2;
        const oy = oRect.top - rect.top + oRect.height / 2;

        const dx = ox - mx;
        const dy = oy - my;
        const dist = Math.sqrt(dx * dx + dy * dy);

        if (dist < 180) {
          const force = (180 - dist) / 180;
          const moveX = (dx / dist) * force * 18 || 0;
          const moveY = (dy / dist) * force * 18 || 0;
          orb.style.setProperty('--push-x', `${moveX}px`);
          orb.style.setProperty('--push-y', `${moveY}px`);
          orb.style.translate = `${moveX}px ${moveY}px`;
        } else {
          orb.style.translate = '0 0';
        }
      });
    });

    field.addEventListener('mouseleave', () => {
      orbs.forEach(orb => {
        orb.style.translate = '0 0';
      });
    });
  }

  loadPosts();
})();
</script>
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/map/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1353</post-id>	</item>
		<item>
		<title>Quiet Letter 4</title>
		<link>https://tranquilguides.com/2026-07-09/</link>
					<comments>https://tranquilguides.com/2026-07-09/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Thu, 09 Jul 2026 14:30:00 +0000</pubDate>
				<category><![CDATA[生存ログ]]></category>
		<category><![CDATA[Quiet Letter]]></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>
		<category><![CDATA[静けさ]]></category>
		<guid isPermaLink="false">https://tranquilguides.com/?p=1284</guid>

					<description><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260709_152308-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>湿気をまとった日に送る手紙。 最近、夏が始まったと思った瞬間はありましたか。 ある休みの日、一日中家にいて、気づけば外は夕方になっていました。 その日、何度エアコンのリモコンに手を伸ばしたことか。 暑いからつける。 少し [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260709_152308-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="wp-block-paragraph">湿気をまとった日に送る手紙。</p>



<h3 class="wp-block-heading">最近、夏が始まったと思った瞬間はありましたか。</h3>



<p class="wp-block-paragraph">ある休みの日、一日中家にいて、気づけば外は夕方になっていました。</p>



<p class="wp-block-paragraph">その日、何度エアコンのリモコンに手を伸ばしたことか。</p>



<p class="wp-block-paragraph">暑いからつける。</p>



<p class="wp-block-paragraph">少し涼しくなってきたから消す。</p>



<p class="wp-block-paragraph">窓を開けてみる。</p>



<p class="wp-block-paragraph">風が通って、少し空気の気配を感じる。</p>



<p class="wp-block-paragraph">でも、その風は涼しさではなく湿度を部屋へ運んでくる。</p>



<p class="wp-block-paragraph">またリモコンに手を伸ばす。</p>



<p class="wp-block-paragraph">暑いからつける。</p>



<p class="wp-block-paragraph">少し涼しくなったから消す。</p>



<p class="wp-block-paragraph">また暑くなってつける。</p>



<p class="wp-block-paragraph">一日中、その繰り返しでした。</p>



<p class="wp-block-paragraph">季節の変わり目というのは、案外こんな暮らしなのかもしれません。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">昔は、夏といえば強い日差しを思い浮かべていました。</p>



<p class="wp-block-paragraph">青い空や入道雲、蝉の鳴き声。</p>



<p class="wp-block-paragraph">そんな景色が夏の始まりだと思っていました。</p>



<p class="wp-block-paragraph">けれど最近は違います。</p>



<p class="wp-block-paragraph">窓を開けた瞬間の空気。</p>



<p class="wp-block-paragraph">肌にまとわりつく湿度。</p>



<p class="wp-block-paragraph">コップの外側についた水滴。</p>



<p class="wp-block-paragraph">なかなか乾かない洗濯物。</p>



<p class="wp-block-paragraph">床を裸足で歩いたときの、少しひんやりした気持ち良さ。</p>



<p class="wp-block-paragraph">目には見えないのに、部屋の中には少しずつ季節が入り込んできます。</p>



<p class="wp-block-paragraph">そういう小さな変化の積み重ねで、</p>



<p class="wp-block-paragraph">「ああ、夏が来たんだ」</p>



<p class="wp-block-paragraph">と思うようになりました。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">あなたの部屋も、空気は変わりましたか。</p>



<p class="wp-block-paragraph">朝起きたからといって何かが急に変わるわけではありません。</p>



<p class="wp-block-paragraph">そう言葉にすると少し大げさに聞こえるけれど、部屋は昨日の続きのままです。</p>



<p class="wp-block-paragraph">机の上のものも、カーテンの揺れ方も、昨日とほとんど変わりません。</p>



<p class="wp-block-paragraph">それでも空気だけは少し違う。</p>



<p class="wp-block-paragraph">冷たい飲み物を選ぶ回数が増えたこと。</p>



<p class="wp-block-paragraph">夕方になっても壁の熱が残っていること。</p>



<p class="wp-block-paragraph">部屋の中に風の通り道を探すこと。</p>



<p class="wp-block-paragraph">そして、エアコンのリモコンに何度も手を伸ばしてしまうこと。</p>



<p class="wp-block-paragraph">そんな日が続いているうちに、気づけば七月になっていました。</p>



<p class="wp-block-paragraph">前半が終わったからといって、何かを急いでまとめなくてもいい。</p>



<p class="wp-block-paragraph">後半が始まったからといって、新しい自分にならなくてもいい。</p>



<p class="wp-block-paragraph">まずは季節が静かに動き始めたことに気づく。</p>



<p class="wp-block-paragraph">その変化を、少しだけ受け取ってみる。</p>



<p class="wp-block-paragraph">それだけで十分な日も、あるのかもしれません。</p>



<p class="wp-block-paragraph">今日もまた、リモコンを机の上に置きました。</p>



<p class="wp-block-paragraph">その小さな音が、この夏の始まりを知らせているように聞こえました。</p>



<p class="wp-block-paragraph">今年の後半も、少し涼しい風が見つかりますように。</p>



<p class="wp-block-paragraph">またね。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/2026-07-09/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1284</post-id>	</item>
		<item>
		<title>夜の茶室 営業記録</title>
		<link>https://tranquilguides.com/night-room-logs/</link>
					<comments>https://tranquilguides.com/night-room-logs/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Thu, 02 Jul 2026 03:30:00 +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=1236</guid>

					<description><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260702_001351-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>夜の部屋の営業記録です。毎朝、閉店後にその夜の利用人数を記録し、営業日数や累計利用人数、平均・中央値などの統計とともに公開しています。]]></description>
										<content:encoded><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260702_001351-1024x683.jpg" class="webfeedsFeaturedVisual" /></p><style>
    .night-room-logs{
      max-width:520px;
      margin:64px auto;
      font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
      font-size:.9rem;
      line-height:2;
      letter-spacing:.06em;
    }
    .night-room-stats{ margin-bottom:40px; opacity:.78; }
    .night-room-stats p,
    .night-room-log-lines p{ margin:0 0 .8em; }
    .night-room-stats a{
      color:inherit;
      text-decoration:none;
      border-bottom:1px solid currentColor;
    }
    .night-room-log-lines{ opacity:.68; }
    .night-room-log-lines p{ scroll-margin-top:80px; }
    </style><div class="night-room-logs"><div class="night-room-stats"><p>これまで迎えた人　8人</p><p>夜を開いた回数　9日</p><p>一晩あたりの平均　0.9人/日</p><p>一晩あたりの中央値　0人/日</p><p>もっとも賑わった夜　<a href="#night-room-log-20260701050027">2026.07.01 05:00:27</a></p></div><div class="night-room-log-lines"><p id="night-room-log-20260712195320">2026.07.12　19:53:20　0</p><p id="night-room-log-20260708195059">2026.07.08　19:50:59　0</p><p id="night-room-log-20260707050026">2026.07.07　05:00:26　0</p><p id="night-room-log-20260706050054">2026.07.06　05:00:54　0</p><p id="night-room-log-20260705050022">2026.07.05　05:00:22　0</p><p id="night-room-log-20260704050022">2026.07.04　05:00:22　0</p><p id="night-room-log-20260703050022">2026.07.03　05:00:22　0</p><p id="night-room-log-20260702050054">2026.07.02　05:00:54　0</p><p id="night-room-log-20260701050027">2026.07.01　05:00:27　8</p></div></div>



<p class="has-text-align-center wp-block-paragraph">夜の茶室が閉じたあと、席についた人の数を記録しています。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://tranquilguides.com/wp-content/uploads/2026/07/IMG_20260702_001350-300x200.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://tranquilguides.com/night-room/">夜の茶室</a>
						<span class="p-blogCard__excerpt">太陽が沈んでいるあいだだけ開く、小さな夜の部屋です。席についた人の数だけ静かにカップが並び、夜が明けるころ、その夜の記録が残されます。</span>					</div>
				</div>
			</div>
		</div>


<style data-wp-block-html="css">
.cl-copyright{
  margin:80px auto 24px;
  text-align:center;
  font-size:13px;
  letter-spacing:.08em;
  opacity:.55;
}

.cl-copyright a{
  color:inherit;
  text-decoration:none;
  transition:opacity .2s ease;
}

.cl-copyright a:hover{
  opacity:1;
}
</style>

<div class="cl-copyright">
  <a href="https://tranquilguides.com/">
Tranquilvæj
  </a>
</div>



<style data-wp-block-html="css">

/* 夜の茶室：表示領域全体をモノクロ */
html,
body,
#body_wrap,
#content,
.l-content,
.l-mainContent,
.l-mainContent__inner,
#main_content,
.post_content {
  filter: grayscale(1) !important;
}
</style>
]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/night-room-logs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1236</post-id>	</item>
	</channel>
</rss>
