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

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

<image>
	<url>https://tranquilguides.com/wp-content/uploads/2026/01/cropped-IMG_3364-32x32.jpeg</url>
	<title>身体感覚 &#8211; Tranquilvæj</title>
	<link>https://tranquilguides.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">251661265</site>	<item>
		<title>記憶の残し方診断</title>
		<link>https://tranquilguides.com/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/quiet-capture/</link>
					<comments>https://tranquilguides.com/quiet-capture/#respond</comments>
		
		<dc:creator><![CDATA[案内人のアシカ]]></dc:creator>
		<pubDate>Tue, 23 Jun 2026 07:02:11 +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=1040</guid>

					<description><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/b70ec953-fdc3-4a38-a934-5a369e7f1316-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>音、光、身体、時間。いまこの瞬間を採集するための小さな観察装置。]]></description>
										<content:encoded><![CDATA[<p><img src="https://tranquilguides.com/wp-content/uploads/2026/07/b70ec953-fdc3-4a38-a934-5a369e7f1316-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>

<style data-wp-block-html="css">
.tq-quiet-capture {
  --tq-qc-ink: #26302f;
  --tq-qc-muted: rgba(38, 48, 47, .58);
  --tq-qc-line: rgba(38, 48, 47, .12);
  --tq-qc-surface: rgba(255, 255, 255, .62);
  --tq-qc-radius: 32px;

  width: 100%;
  max-width: 720px;
  margin: 0 auto;
  padding: clamp(28px, 6vw, 64px) clamp(18px, 5vw, 44px);
  border: 1px solid rgba(0, 0, 0, .08);
  border-radius: var(--tq-qc-radius);
  background:
    radial-gradient(circle at 20% 10%, rgba(255, 255, 255, .78), transparent 34%),
    linear-gradient(135deg, rgba(255, 255, 255, .74), rgba(245, 245, 240, .5));
  box-shadow: 0 24px 80px rgba(0, 0, 0, .09);
  color: var(--tq-qc-ink);
  font-family:
    "Hiragino Mincho ProN",
    "Yu Mincho",
    "YuMincho",
    serif;
  text-align: center;
  overflow: hidden;
}

.tq-quiet-capture,
.tq-quiet-capture *,
.tq-quiet-capture *::before,
.tq-quiet-capture *::after {
  box-sizing: border-box;
}

.tq-quiet-capture [hidden] {
  display: none !important;
}

/* ページ固有の識別装置 */
.tq-qc-instrument {
  position: relative;
  width: min(600px, 100%);
  min-height: 190px;
  margin: 0 auto 32px;
  overflow: hidden;
  border: 1px solid var(--tq-qc-line);
  border-radius: 28px;
  background:
    linear-gradient(rgba(38, 48, 47, .034) 1px, transparent 1px),
    linear-gradient(90deg, rgba(38, 48, 47, .034) 1px, transparent 1px),
    radial-gradient(circle at center, rgba(255, 255, 255, .92), rgba(243, 242, 237, .7));
  background-size: 26px 26px, 26px 26px, auto;
  box-shadow: 0 20px 60px rgba(35, 44, 43, .07);
}

.tq-qc-instrument::before {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 118px;
  height: 118px;
  transform: translate(-50%, -50%);
  border: 1px solid rgba(38, 48, 47, .18);
  border-radius: 50%;
  box-shadow:
    0 0 0 20px rgba(38, 48, 47, .028),
    0 0 0 42px rgba(38, 48, 47, .015);
}

.tq-qc-instrument::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 134px;
  height: 1px;
  transform: translate(-50%, -50%);
  background: rgba(38, 48, 47, .17);
}

.tq-qc-crosshair {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 1px;
  height: 134px;
  transform: translate(-50%, -50%);
  background: rgba(38, 48, 47, .17);
}

.tq-qc-crosshair::before {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 15px;
  height: 15px;
  transform: translate(-50%, -50%);
  border: 1px solid rgba(38, 48, 47, .42);
  border-radius: 50%;
  background: rgba(255, 255, 255, .94);
  box-shadow: 0 0 0 6px rgba(255, 255, 255, .64);
}

.tq-qc-wave {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 88px;
  height: 34px;
  transform: translate(-50%, -50%);
  opacity: .42;
  background: repeating-linear-gradient(
    90deg,
    transparent 0 8px,
    rgba(38, 48, 47, .55) 8px 10px,
    transparent 10px 15px
  );
  clip-path: polygon(
    0 44%, 8% 44%, 8% 58%, 18% 58%, 18% 28%, 28% 28%,
    28% 72%, 38% 72%, 38% 38%, 48% 38%, 48% 62%, 58% 62%,
    58% 20%, 68% 20%, 68% 80%, 78% 80%, 78% 36%, 88% 36%,
    88% 64%, 100% 64%, 100% 44%
  );
}

.tq-qc-instrument-badge {
  position: absolute;
  top: 14px;
  left: 16px;
  padding: 5px 8px 4px;
  border: 1px solid rgba(83, 109, 112, .22);
  border-radius: 3px;
  transform: rotate(-2deg);
  background: rgba(255, 255, 255, .34);
  color: rgba(83, 109, 112, .55);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 8px;
  letter-spacing: .16em;
}

.tq-qc-instrument-label {
  position: absolute;
  left: 18px;
  right: 18px;
  bottom: 14px;
  display: flex;
  justify-content: space-between;
  gap: 14px;
  color: rgba(38, 48, 47, .42);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 9px;
  letter-spacing: .15em;
  text-transform: uppercase;
}

.tq-qc-stage {
  opacity: 0;
  transform: translateY(8px);
  animation: tqQcFade .42s ease forwards;
}

@keyframes tqQcFade {
  to {
    opacity: 1;
    transform: none;
  }
}

.tq-qc-kicker,
.tq-qc-count {
  margin: 0 0 16px;
  color: var(--tq-qc-muted);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11px;
  letter-spacing: .16em;
  text-transform: uppercase;
}

.tq-qc-title,
.tq-qc-question,
.tq-qc-result-title {
  display: block;
  margin: 0 0 24px;
  padding: 0;
  border: 0;
  background: none;
  box-shadow: none;
  color: inherit;
  font-family: inherit;
  font-weight: 500;
  letter-spacing: .08em;
  line-height: 1.5;
  text-align: center;
}

.tq-qc-title {
  font-size: clamp(28px, 6vw, 46px);
}

.tq-qc-question,
.tq-qc-result-title {
  font-size: clamp(22px, 4.8vw, 34px);
}

.tq-qc-lead {
  max-width: 540px;
  margin: 0 auto 34px;
  color: rgba(38, 48, 47, .72);
  line-height: 2;
}

.tq-qc-options {
  display: grid;
  gap: 12px;
  max-width: 560px;
  margin: 30px auto 24px;
}

.tq-qc-options button,
#tq-qc-start-btn,
#tq-qc-restart,
#tq-qc-save,
.tq-qc-back {
  appearance: none;
  font-family: inherit;
  cursor: pointer;
}

.tq-qc-options button,
#tq-qc-start-btn,
#tq-qc-restart,
#tq-qc-save {
  width: 100%;
  max-width: 420px;
  margin: 0 auto;
  padding: 15px 20px;
  border-radius: 999px;
  font-size: 15px;
  letter-spacing: .06em;
  transition:
    transform .2s ease,
    background-color .2s ease,
    box-shadow .2s ease,
    border-color .2s ease;
}

.tq-qc-options button,
#tq-qc-start-btn,
#tq-qc-restart {
  border: 1px solid rgba(38, 48, 47, .18);
  background: rgba(255, 255, 255, .62);
  color: var(--tq-qc-ink);
}

#tq-qc-save {
  border: 1px solid rgba(38, 48, 47, .18);
  background: rgba(38, 48, 47, .9);
  color: #fff;
}

.tq-qc-options button:hover,
#tq-qc-start-btn:hover,
#tq-qc-restart:hover,
#tq-qc-save:hover {
  transform: translateY(-1px);
  box-shadow: 0 12px 30px rgba(0, 0, 0, .1);
}

.tq-qc-options button:hover,
#tq-qc-start-btn:hover,
#tq-qc-restart:hover {
  background: rgba(255, 255, 255, .9);
  border-color: rgba(38, 48, 47, .3);
}

.tq-qc-options button:focus-visible,
#tq-qc-start-btn:focus-visible,
#tq-qc-restart:focus-visible,
#tq-qc-save:focus-visible,
.tq-qc-back:focus-visible {
  outline: 2px solid rgba(83, 109, 112, .58);
  outline-offset: 4px;
}

#tq-qc-save:disabled {
  cursor: wait;
  opacity: .58;
}

.tq-qc-nav {
  max-width: 560px;
  margin: 0 auto 18px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
}

.tq-qc-nav .tq-qc-count {
  margin: 0;
}

.tq-qc-back {
  width: auto;
  margin: 0;
  padding: 4px 0;
  border: 0;
  background: transparent;
  color: rgba(38, 48, 47, .56);
  font-size: 13px;
  letter-spacing: .08em;
}

.tq-qc-result-card {
  max-width: 620px;
  margin: 0 auto;
  padding: clamp(24px, 5vw, 42px);
  border: 1px solid var(--tq-qc-line);
  border-radius: 26px;
  background:
    radial-gradient(circle at 15% 10%, rgba(255, 255, 255, .82), transparent 36%),
    linear-gradient(180deg, rgba(255, 255, 255, .82), rgba(247, 246, 241, .66));
  box-shadow: 0 22px 64px rgba(35, 44, 43, .08);
}

.tq-qc-result-text {
  max-width: 540px;
  margin: 28px auto 0;
  color: rgba(38, 48, 47, .78);
  text-align: left;
  line-height: 2.08;
}

.tq-qc-result-text p {
  margin: 0 0 1.35em;
  white-space: pre-line;
}

.tq-qc-actions {
  display: grid;
  gap: 12px;
  max-width: 560px;
  margin: 18px auto 0;
}

.tq-qc-status {
  min-height: 1.5em;
  margin: 12px 0 0;
  color: var(--tq-qc-muted);
  font-size: 12px;
  line-height: 1.6;
}

@media (max-width: 640px) {
  .tq-quiet-capture {
    padding: 14px 12px 30px;
    border-radius: 24px;
  }

  .tq-qc-instrument {
    min-height: 174px;
    margin-bottom: 26px;
    border-radius: 22px;
  }

  .tq-qc-instrument-label {
    font-size: 7px;
  }

  .tq-qc-result-card {
    padding: 24px 18px;
  }
}

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

<div class="tq-quiet-capture" id="tqQuietCapture">
  <div class="tq-qc-instrument" aria-hidden="true">
    <span class="tq-qc-instrument-badge">QUIET SCAN</span>
    <span class="tq-qc-crosshair"></span>
    <span class="tq-qc-wave"></span>

    <div class="tq-qc-instrument-label">
      <span>AMBIENT TRACE / PRESENT</span>
      <span>SOUND · LIGHT · BODY · TIME</span>
    </div>
  </div>

  <section id="tq-qc-start" class="tq-qc-stage">
    <p class="tq-qc-kicker">Quiet Capture</p>

    <div class="tq-qc-title" role="heading" aria-level="1">
      静寂採集
    </div>

    <p class="tq-qc-lead">
      いま、あなたの周囲にあるものを少しだけ採集します。<br>
      1分ほどで終わります。
    </p>

    <button type="button" id="tq-qc-start-btn">はじめる</button>
  </section>

  <section id="tq-qc-quiz" class="tq-qc-stage" hidden>
    <div
      id="tq-qc-question"
      class="tq-qc-question"
      role="heading"
      aria-level="2"
    ></div>

    <div id="tq-qc-options" class="tq-qc-options"></div>

    <div class="tq-qc-nav">
      <button type="button" id="tq-qc-back" class="tq-qc-back">
        もどる
      </button>

      <p id="tq-qc-count" class="tq-qc-count"></p>
    </div>
  </section>

  <section
    id="tq-qc-result"
    class="tq-qc-stage"
    aria-live="polite"
    aria-atomic="true"
    hidden
  >
    <p class="tq-qc-kicker">Collected Silence</p>

    <div class="tq-qc-result-card">
      <div class="tq-qc-result-title" role="heading" aria-level="2">
        あなたは今ここにいました。
      </div>

      <div id="tq-qc-result-text" class="tq-qc-result-text"></div>
    </div>

    <div class="tq-qc-actions">
      <button type="button" id="tq-qc-save">画像を保存</button>
      <button type="button" id="tq-qc-restart">再採集</button>
    </div>

    <p id="tq-qc-status" class="tq-qc-status" role="status" aria-live="polite"></p>

    <canvas
      id="tq-qc-canvas"
      width="1080"
      height="1920"
      hidden
      aria-hidden="true"
    ></canvas>
  </section>
</div>

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

  function initQuietCapture() {
    const root = document.getElementById("tqQuietCapture");

    if (!root || root.dataset.initialized === "true") {
      return;
    }

    root.dataset.initialized = "true";

    const questions = [
      {
        q: "いま、周囲でいちばん近い音は何ですか？",
        key: "sound",
        options: ["空調の音", "車や街の音", "人の声", "鳥や虫の声", "ほとんど無音"]
      },
      {
        q: "いまの光は、どんな状態ですか？",
        key: "light",
        options: ["明るい", "やわらかい", "暗い", "画面の光だけ", "よくわからない"]
      },
      {
        q: "あなたの身体は、いまどうありますか？",
        key: "body",
        options: ["座っている", "立っている", "横になっている", "歩いている", "少し固まっている"]
      },
      {
        q: "いま、時間はどんな速さに感じますか？",
        key: "time",
        options: ["早い", "普通", "遅い", "止まっているよう", "遠くにある"]
      },
      {
        q: "この瞬間に、名前をつけるなら？",
        key: "name",
        options: ["休息", "通過", "待機", "回復", "不在"]
      }
    ];

    const state = {
      index: 0,
      answers: {},
      resultDate: ""
    };

    const get = (id) => root.querySelector("#" + id);

    const start = get("tq-qc-start");
    const quiz = get("tq-qc-quiz");
    const result = get("tq-qc-result");
    const startButton = get("tq-qc-start-btn");
    const backButton = get("tq-qc-back");
    const restartButton = get("tq-qc-restart");
    const saveButton = get("tq-qc-save");
    const canvas = get("tq-qc-canvas");
    const count = get("tq-qc-count");
    const question = get("tq-qc-question");
    const options = get("tq-qc-options");
    const resultText = get("tq-qc-result-text");
    const status = get("tq-qc-status");

    if (
      !start ||
      !quiz ||
      !result ||
      !startButton ||
      !backButton ||
      !restartButton ||
      !saveButton ||
      !canvas ||
      !count ||
      !question ||
      !options ||
      !resultText
    ) {
      console.warn("[静寂採集] 必要な要素が見つかりません。");
      return;
    }

    function setStatus(message) {
      if (status) {
        status.textContent = message || "";
      }
    }

    function setView(view) {
      start.hidden = view !== "start";
      quiz.hidden = view !== "quiz";
      result.hidden = view !== "result";
      setStatus("");
    }

    function resetState() {
      state.index = 0;
      state.answers = {};
      state.resultDate = "";
      resultText.replaceChildren();
    }

    function formatDate() {
      const now = new Date();

      return [
        now.getFullYear(),
        String(now.getMonth() + 1).padStart(2, "0"),
        String(now.getDate()).padStart(2, "0")
      ].join(".") + " " + [
        String(now.getHours()).padStart(2, "0"),
        String(now.getMinutes()).padStart(2, "0")
      ].join(":");
    }

    function renderQuestion() {
      const current = questions[state.index];

      if (!current) {
        renderResult();
        return;
      }

      count.textContent = `${state.index + 1} / ${questions.length}`;
      question.textContent = current.q;
      options.replaceChildren();

      current.options.forEach((option) => {
        const button = document.createElement("button");
        button.type = "button";
        button.textContent = option;

        button.addEventListener("click", () => {
          state.answers[current.key] = option;
          state.index += 1;

          if (state.index >= questions.length) {
            renderResult();
          } else {
            renderQuestion();
          }
        });

        options.appendChild(button);
      });
    }

    function appendResultParagraph(text) {
      const paragraph = document.createElement("p");
      paragraph.textContent = text;
      resultText.appendChild(paragraph);
    }

    function renderResult() {
      state.resultDate = formatDate();
      resultText.replaceChildren();

      appendResultParagraph(state.resultDate);

      appendResultParagraph(
        `${state.answers.sound}があり、\n` +
        `光は${state.answers.light}。\n` +
        `身体は${state.answers.body}。`
      );

      appendResultParagraph(
        `時間は${state.answers.time}ように感じられ、\n` +
        `この瞬間には「${state.answers.name}」という名前がつきました。`
      );

      appendResultParagraph(
        "これは診断ではありません。\n" +
        "ただ、あなたが今ここにいたという小さな記録です。"
      );

      setView("result");
    }

    function wrapText(context, text, x, y, maxWidth, lineHeight) {
      String(text || "").split("\n").forEach((paragraph) => {
        if (!paragraph.trim()) {
          y += lineHeight;
          return;
        }

        let line = "";

        Array.from(paragraph).forEach((character) => {
          const testLine = line + character;

          if (
            context.measureText(testLine).width > maxWidth &&
            line
          ) {
            context.fillText(line, x, y);
            line = character;
            y += lineHeight;
          } else {
            line = testLine;
          }
        });

        context.fillText(line, x, y);
        y += lineHeight;
      });

      return y;
    }

    function loadImage(url) {
      return new Promise((resolve, reject) => {
        const image = new Image();
        image.crossOrigin = "anonymous";
        image.onload = () => resolve(image);
        image.onerror = reject;
        image.src = url;
      });
    }

    function drawCover(context, image, width, height) {
      const scale = Math.max(width / image.width, height / image.height);
      const drawWidth = image.width * scale;
      const drawHeight = image.height * scale;
      const x = (width - drawWidth) / 2;
      const y = (height - drawHeight) / 2;

      context.drawImage(image, x, y, drawWidth, drawHeight);
    }

    async function createResultImage() {
      const context = canvas.getContext("2d");
      const width = canvas.width;
      const height = canvas.height;

      context.clearRect(0, 0, width, height);

      try {
        const background = await loadImage(
          "https://tranquilguides.com/wp-content/uploads/2026/06/20260623_155541.jpg"
        );

        context.save();
        context.filter = "blur(72px) saturate(.72)";
        drawCover(context, background, width, height);
        context.restore();
      } catch {
        const gradient = context.createLinearGradient(0, 0, 0, height);
        gradient.addColorStop(0, "#ebe9e1");
        gradient.addColorStop(1, "#cfd7d3");
        context.fillStyle = gradient;
        context.fillRect(0, 0, width, height);
      }

      context.fillStyle = "rgba(247, 245, 239, .66)";
      context.fillRect(0, 0, width, height);

      context.fillStyle = "#26302f";
      context.textAlign = "left";

      context.font = '24px "Yu Mincho", "YuMincho", serif';
      context.fillText("Tranquilvæj", 90, 140);

      context.font = '27px "Yu Mincho", "YuMincho", serif';
      context.fillText("Quiet Capture", 90, 226);

      context.font = '64px "Yu Mincho", "YuMincho", serif';
      context.fillText("静寂採集", 90, 330);

      context.font = '30px "Yu Mincho", "YuMincho", serif';
      context.fillStyle = "rgba(38, 48, 47, .56)";
      context.fillText(state.resultDate, 90, 470);

      context.fillStyle = "#26302f";
      context.font = '35px "Yu Mincho", "YuMincho", serif';
      context.fillText("あなたは今ここにいました。", 90, 552);

      context.font = '34px "Yu Mincho", "YuMincho", serif';
      let y = 690;

      y = wrapText(
        context,
        `${state.answers.sound}があり、`,
        90,
        y,
        900,
        56
      );

      y = wrapText(
        context,
        `光は${state.answers.light}。`,
        90,
        y,
        900,
        56
      );

      y = wrapText(
        context,
        `身体は${state.answers.body}。`,
        90,
        y,
        900,
        56
      );

      y += 40;

      y = wrapText(
        context,
        `時間は${state.answers.time}ように感じられ、`,
        90,
        y,
        900,
        56
      );

      y = wrapText(
        context,
        `この瞬間には「${state.answers.name}」という名前がつきました。`,
        90,
        y,
        900,
        56
      );

      y += 70;

      context.font = '28px "Yu Mincho", "YuMincho", serif';
      context.fillStyle = "rgba(38, 48, 47, .68)";

      wrapText(
        context,
        "これは診断ではありません。ただ、あなたが今ここにいたという小さな記録です。",
        90,
        y,
        900,
        48
      );

      context.font = '24px "Yu Mincho", "YuMincho", serif';
      context.fillStyle = "rgba(38, 48, 47, .5)";
      context.fillText("TranquilGuides.com", 90, height - 120);

      return new Promise((resolve, reject) => {
        canvas.toBlob(
          (blob) => {
            if (blob) {
              resolve(blob);
            } else {
              reject(new Error("画像を生成できませんでした。"));
            }
          },
          "image/png"
        );
      });
    }

    async function saveResultImage() {
      saveButton.disabled = true;
      setStatus("画像を生成しています。");

      try {
        const blob = await createResultImage();

        const filename =
          `quiet-capture-${state.resultDate.replace(/[^0-9]/g, "").slice(0, 12)}.png`;

        const file = new File(
          [blob],
          filename,
          { type: "image/png" }
        );

        if (
          navigator.share &&
          navigator.canShare?.({ files: [file] })
        ) {
          try {
            await navigator.share({
              files: [file],
              title: "静寂採集",
              text: "静寂採集の記録画像"
            });

            setStatus("");
            return;
          } catch (error) {
            if (error?.name === "AbortError") {
              setStatus("");
              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(() => {
          URL.revokeObjectURL(url);
        }, 1000);

        setStatus("画像を保存しました。");
      } catch (error) {
        console.warn("[静寂採集] 画像生成に失敗しました。", error);
        setStatus("画像を生成できませんでした。");
      } finally {
        saveButton.disabled = false;
      }
    }

    startButton.addEventListener("click", () => {
      resetState();
      setView("quiz");
      renderQuestion();
    });

    backButton.addEventListener("click", () => {
      if (state.index === 0) {
        resetState();
        setView("start");
        return;
      }

      state.index -= 1;
      renderQuestion();
    });

    restartButton.addEventListener("click", () => {
      resetState();
      setView("start");
    });

    saveButton.addEventListener("click", saveResultImage);

    setView("start");
  }

  if (document.readyState === "loading") {
    document.addEventListener(
      "DOMContentLoaded",
      initQuietCapture,
      { once: true }
    );
  } else {
    initQuietCapture();
  }
})();
</script>


]]></content:encoded>
					
					<wfw:commentRss>https://tranquilguides.com/quiet-capture/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1040</post-id>	</item>
	</channel>
</rss>
