<!DOCTYPE html><html lang="zh-Hant"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><script>
  (() => {
    const key = 'dream-sky-theme';
    const root = document.documentElement;
    const system = matchMedia('(prefers-color-scheme: dark)');
    const safe = (value) => ['light', 'dark'].includes(value) ? value : 'system';
    let preference = 'system';
    try { preference = safe(localStorage.getItem(key)); } catch { /* System default remains available. */ }
    const apply = () => {
      root.dataset.theme = preference === 'system' ? (system.matches ? 'dark' : 'light') : preference;
      document.querySelectorAll('[data-theme-choice]').forEach((select) => {
        select.value = preference;
        select.closest('.theme-control').hidden = false;
      });
    };
    // Run in the head, before content paints, to avoid a light flash at night.
    apply();
    document.addEventListener('DOMContentLoaded', apply, { once: true });
    document.addEventListener('change', (event) => {
      if (!(event.target instanceof HTMLSelectElement) || !event.target.matches('[data-theme-choice]')) return;
      preference = safe(event.target.value);
      try {
        if (preference === 'system') localStorage.removeItem(key);
        else localStorage.setItem(key, preference);
      } catch { /* Switching still works when storage is blocked. */ }
      apply();
    });
    system.addEventListener('change', () => { if (preference === 'system') apply(); });
    window.addEventListener('pageshow', apply);
    window.addEventListener('storage', (event) => {
      if (event.key !== key && event.key !== null) return;
      preference = safe(event.newValue);
      apply();
    });
  })();
</script><script>
  // 站長模式: editing shortcuts (編輯文章, 寫作者自評, hotkey E) stay hidden
  // unless this device has opened any page with ?owner once. ?owner=off turns
  // it back off. This only hides buttons; Pages CMS still requires Steven's
  // GitHub login to change anything.
  (() => {
    const key = 'dream-sky-owner';
    const root = document.documentElement;
    let owner = false;
    try {
      const url = new URL(location.href);
      if (url.searchParams.has('owner')) {
        if (url.searchParams.get('owner') === 'off') localStorage.removeItem(key);
        else localStorage.setItem(key, '1');
        url.searchParams.delete('owner');
        history.replaceState(history.state, '', url.pathname + url.search + url.hash);
      }
      owner = localStorage.getItem(key) === '1';
    } catch { /* Without storage the editing buttons simply stay hidden. */ }
    if (owner) root.dataset.owner = '';
  })();
</script><meta name="generator" content="Astro v7.3.1"><meta name="description" content="我生活的點點滴滴"><meta name="author" content="夢行者"><meta property="og:type" content="website"><meta property="og:locale" content="zh_TW"><meta property="og:site_name" content="夢行者的夢想天空"><meta property="og:title" content="夢行者的夢想天空"><meta property="og:description" content="我生活的點點滴滴"><meta property="og:url" content="https://d-s.tw/"><meta property="og:image" content="https://d-s.tw/og/site.png?v=2"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="夢行者的夢想天空分享預覽"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="夢行者的夢想天空"><meta name="twitter:description" content="我生活的點點滴滴"><meta name="twitter:image" content="https://d-s.tw/og/site.png?v=2"><meta name="twitter:image:alt" content="夢行者的夢想天空分享預覽"><link rel="canonical" href="https://d-s.tw/"><link rel="alternate" type="application/rss+xml" title="夢行者的夢想天空" href="/rss.xml"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"夢行者的夢想天空","description":"我生活的點點滴滴","url":"https://d-s.tw","inLanguage":"zh-Hant","author":{"@type":"Person","name":"夢行者"}}</script><title>夢行者的夢想天空</title><link rel="stylesheet" href="/_astro/BaseLayout.BphyrFYL.css"><script type="module" src="/_astro/page.CMFgH77u.js"></script></head><body><header class="site-header"><a class="brand" href="/" aria-label="夢行者的夢想天空首頁"><span class="brand-mark" aria-hidden="true">夢</span><span><strong>夢行者的夢想天空</strong><small>我生活的點點滴滴</small></span></a><div class="header-controls"><nav class="primary-nav" aria-label="主要導覽"><a href="/" aria-current="page">最新文章</a><a href="/archive/">文章彙整</a><a href="/topics/">主題索引</a><a href="/album/">相簿</a><a href="/search/">搜尋<kbd class="nav-shortcut" data-shortcut-hint hidden aria-hidden="true">⌘K</kbd></a><button type="button" class="nav-shortcuts-button" data-shortcut-help-open hidden aria-label="鍵盤快捷鍵說明" title="鍵盤快捷鍵（?）"><svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="6" width="19" height="12" rx="2.5"></rect><path d="M6.5 10h.01M9.5 10h.01M12.5 10h.01M15.5 10h.01M17.5 10h.01M8 14h8"></path></svg></button><a href="/about/">關於</a></nav><label class="theme-control" hidden><span class="sr-only">網站配色</span><select data-theme-choice aria-label="網站配色"><option value="system">配色：自動</option><option value="light">配色：淺色</option><option value="dark">配色：深色</option></select></label></div></header><main><section class="intro"><p class="eyebrow">生活、旅行與一路收藏的記憶</p><h1>把走過的日子，<br>留在一片安靜的天空裡。</h1><p>這裡保存夢行者多年來的生活記錄。從舊 WordPress 搬來的文章，現在以更簡單、長久的方式繼續生長。</p></section><div class="content-grid"><section aria-labelledby="latest-heading"><div class="section-heading"><h2 id="latest-heading">最新文章</h2><a href="/archive/">查看全部 522 篇</a></div><div class="post-list"><article class="post-card"><div class="post-meta"><time datetime="2026-10-17T04:00:00.000Z">2026年10月17日</time><span>電腦網路</span></div><h2><a href="/posts/facebook-technical-docs-mode/">讓 FB 看起來像在讀文章（續）：偽裝成技術文件</a></h2><p>腳本從 v1.6 一路改到 v2.0，從一開始只是想把側欄藏起來，一路做到深色文件模式、自動展開全文、記住音量、停用自動重新整理。現在一支腳本，就取代了我原本另外裝的兩個擴充功能。</p><a class="read-more" href="/posts/facebook-technical-docs-mode/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-10-16T04:00:00.000Z">2026年10月16日</time><span>電腦網路</span></div><h2><a href="/posts/facebook-tampermonkey-focus-mode/">讓 FB 看起來像在讀文章：我的 Tampermonkey 專注模式腳本</a></h2><p>用 Tampermonkey 跑一支自己的腳本，隱藏左右側欄、中間加寬，但字不要變大，並隱藏動態裡的廣告貼文。這支腳本前後改了六個版本，邊用邊修。</p><a class="read-more" href="/posts/facebook-tampermonkey-focus-mode/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-10-13T14:23:00.000Z">2026年10月13日</time><span>音樂分享</span></div><h2><a href="/posts/make-you-mine/">我想要擁有你 | Make You Mine</a></h2><p>之前看《影后》就很喜歡這首歌曲，小男孩樂團其實已經紅了好幾首歌了，但是好像歌紅團不紅，在這邊分享給大家，希望大家會喜歡聽。</p><a class="read-more" href="/posts/make-you-mine/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-10-08T15:43:00.000Z">2026年10月8日</time><span>運動札記</span></div><h2><a href="/posts/riverside-bike-ride/">腳踏車河濱輕鬆騎</a></h2><p>全家一起從中和的河堤騎到大稻埕，途中在小公園暫坐休憩，再吃個大稻埕魯肉飯。回程小朋友的腳踏車掉鏈，最後單手扛車、單手騎車，回家稍作休息後，又繼續去練習游泳。</p><a class="read-more" href="/posts/riverside-bike-ride/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-10-04T08:34:16.000Z">2026年10月4日</time><span>電腦網路</span></div><h2><a href="/posts/mobile-voice-blog-typeless-obsidian/">手機語音寫網誌Typeless與Obsidian</a></h2><p>用手機搭配 Typeless 記錄想法，透過 Obsidian 和 DriveSync 同步部落格文章。轉到 Mac 後卻貼不出文字，最後發現是 Command 加 V 與 Control 加 V 的設定衝突。</p><a class="read-more" href="/posts/mobile-voice-blog-typeless-obsidian/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-10-03T06:55:00.000Z">2026年10月3日</time><span>運動札記</span></div><h2><a href="/posts/jinhe-swimming/">錦和運動中心游泳</a></h2><p>重新翻閱舊網誌，才發現自己曾經在中山運動中心學過游泳，卻完全沒有記憶。現在重新游起來，換氣、抬肘入水、踢水和轉頭角度都得慢慢調整；一家人也都在練習，要活就要動！</p><a class="read-more" href="/posts/jinhe-swimming/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-10-02T06:37:40.000Z">2026年10月2日</time><span>電腦網路</span></div><h2><a href="/posts/blog-evolution/">網誌進化史</a></h2><p>網誌上線後，功能也一直慢慢變多。以前看到別人的網站有特殊功能，只能到 WordPress 外掛區找一鍵安裝；現在與 AI 討論、改進與打磨，看到熱鍵跳轉、賞圖模式、留言區陸續上線，還做了一支短片記錄網誌成長史。</p><a class="read-more" href="/posts/blog-evolution/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-09-29T14:05:00.000Z">2026年9月29日</time><span>行旅手札</span></div><h2><a href="/posts/muzha-zoo-day-trip/">木柵動物園一日遊</a></h2><p>中秋連假沒出遠門，就到木柵動物園隨意走走。搭遊園小列車直奔企鵝館吹冷氣，再看看美洲獅、長頸鹿、斑馬和大貓熊；就算只是走馬看花，也花了快四個小時。</p><a class="read-more" href="/posts/muzha-zoo-day-trip/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-09-24T14:52:00.000Z">2026年9月24日</time><span>音樂分享</span></div><h2><a href="/posts/the-girl-taught-me/">那女孩教我的事</a></h2><p>好久沒有分享歌曲了，這是一首我一直以來都滿喜歡的歌曲，品冠溫暖的唱腔，不管在何時總能溫暖著我，那種淡淡的感覺雖然沒有大鳴大放讓人聽了為之一振，但總能緩緩的治療著，分享給大家。</p><a class="read-more" href="/posts/the-girl-taught-me/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-09-23T04:00:00.000Z">2026年9月23日</time><span>電腦網路</span></div><h2><a href="/posts/mole-mac-tool/">發現 Mac 實用軟體：Mole，幫 Mac 挖出垃圾的小鼴鼠</a></h2><p>跟著 PAPAYA 電腦教室認識 Mole：用 Homebrew 安裝免費的 Mac 終端機工具，再看看 Clean、Uninstall、Optimize、Analyze 和 Status 五種功能。</p><a class="read-more" href="/posts/mole-mac-tool/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-09-18T16:43:00.000Z">2026年9月19日</time><span>電腦網路</span></div><h2><a href="/posts/customize-mac-like-windows/">終於把 Mac 轉換成習慣的模式了</a></h2><p>從 Windows 轉到 Mac，最難改的往往不是系統，而是多年的肌肉記憶。安裝唯音輸入法、開啟中英混打、設定滑鼠上下頁，再把複製貼上快捷鍵調回熟悉的 Ctrl 組合，終於把 Mac mini 用順手了。</p><a class="read-more" href="/posts/customize-mac-like-windows/">繼續閱讀 <span aria-hidden="true">→</span></a></article><article class="post-card"><div class="post-meta"><time datetime="2026-09-18T11:32:00.000Z">2026年9月18日</time><span>電腦網路</span></div><h2><a href="/posts/start-writing-with-markdown/">開始使用 Markdown 寫文章</a></h2><p>網誌改用 Markdown 之後，我也把寫作軟體換成 Typora。從所見即所得的即時預覽，到 Markdown 的常用語法，記錄這次重新摸索寫作工具的過程。</p><a class="read-more" href="/posts/start-writing-with-markdown/">繼續閱讀 <span aria-hidden="true">→</span></a></article></div><nav class="blog-pagination" aria-label="文章分頁"><span aria-hidden="true"></span><form class="pagination-jump" data-current-page="1" data-total-pages="44" data-base-path="/" aria-label="跳到指定頁面"><span>第</span><input id="page-jump-1" name="page" type="number" min="1" max="44" step="1" value="1" inputmode="numeric" aria-label="目前第 1 頁，輸入頁碼後按 Enter"><span>/ 44 頁</span></form><a class="pagination-next" href="/page/2/" rel="next"><span><strong>下一頁</strong><small>較舊的文章</small></span><span aria-hidden="true">→</span></a></nav><script type="module">document.querySelectorAll(`.pagination-jump[data-base-path]`).forEach(e=>{let t=e.elements.namedItem(`page`);if(!(t instanceof HTMLInputElement))return;let n=()=>{let n=Number(t.value),r=Number(e.dataset.currentPage),i=Number(e.dataset.totalPages);if(!Number.isInteger(n)||n<1||n>i){t.setCustomValidity(`請輸入 1 到 ${i} 之間的頁數`),t.reportValidity();return}if(n===r)return;let a=e.dataset.basePath??`/`;window.location.assign(n===1?a:`${a}page/${n}/`)};t.addEventListener(`input`,()=>t.setCustomValidity(``)),t.addEventListener(`change`,n),e.addEventListener(`submit`,e=>{e.preventDefault(),n()})});</script></section><aside class="frequent-topics"><section class="on-this-day" aria-labelledby="on-this-day-heading" data-on-this-day hidden><h2 id="on-this-day-heading"><span data-on-this-day-title>那年今日</span><small data-on-this-day-date></small></h2><ol data-on-this-day-list></ol></section><script type="module">var e=document.querySelector(`[data-on-this-day]`),t=2,n=7,r=e=>{let[t,n,r]=new Intl.DateTimeFormat(`en-CA`,{timeZone:`Asia/Taipei`,year:`numeric`,month:`2-digit`,day:`2-digit`}).format(e).split(`-`);return{year:Number(t),key:`${n}-${r}`,label:`${Number(n)} 月 ${Number(r)} 日`}};function i(e){let t=r(new Date);for(let i=0;i<=n;i+=1)for(let n of i?[-1,1]:[1]){let a=r(new Date(Date.now()+n*i*864e5)),o=(e[a.key]??[]).filter(e=>e.year<t.year);if(o.length)return{exact:i===0,today:t,date:a,posts:o}}}async function a(){if(!e)return;let n=await fetch(`/on-this-day.json`);if(!n.ok)return;let r=i(await n.json());if(!r)return;let a=[...r.posts].sort(()=>Math.random()-.5).slice(0,t);a.sort((e,t)=>e.year-t.year),e.querySelector(`[data-on-this-day-title]`).textContent=r.exact?`那年今日`:`那年這幾天`,e.querySelector(`[data-on-this-day-date]`).textContent=r.exact?r.today.label:r.date.label,e.querySelector(`[data-on-this-day-list]`).replaceChildren(...a.map(e=>{let t=document.createElement(`li`),n=document.createElement(`a`);n.href=e.url,n.textContent=e.title;let i=document.createElement(`small`);return i.textContent=`${e.year}・${r.today.year-e.year} 年前`,n.append(i),t.append(n),t})),e.hidden=!1}a().catch(()=>{});</script><h2>隨機逛主題</h2><div class="topic-list"><a href="/categories/%E7%94%9F%E6%B4%BB%E9%9B%9C%E8%A8%98/"><span>生活雜記</span><small>133</small></a><a href="/categories/%E5%B7%A5%E4%BD%9C%E8%81%B7%E5%A0%B4/"><span>工作職場</span><small>82</small></a><a href="/categories/%E9%9B%BB%E8%85%A6%E7%B6%B2%E8%B7%AF/"><span>電腦網路</span><small>66</small></a><a href="/categories/%E7%BE%8E%E9%A3%9F%E7%BE%8E%E9%A5%8C/"><span>美食美饌</span><small>65</small></a><a href="/categories/%E5%BF%83%E6%83%85%E9%BB%9E%E6%BB%B4/"><span>心情點滴</span><small>47</small></a><a href="/categories/%E8%A1%8C%E6%97%85%E6%89%8B%E6%9C%AD/"><span>行旅手札</span><small>33</small></a><a href="/categories/%E8%97%9D%E6%96%87%E5%BF%83%E5%BE%97/"><span>藝文心得</span><small>31</small></a><a href="/categories/%E9%81%8A%E6%88%B2%E5%A4%A9%E5%9C%B0/"><span>遊戲天地</span><small>29</small></a><a href="/categories/%E9%81%8B%E5%8B%95%E6%9C%AD%E8%A8%98/"><span>運動札記</span><small>28</small></a><a href="/categories/%E9%9F%B3%E6%A8%82%E5%88%86%E4%BA%AB/"><span>音樂分享</span><small>8</small></a></div><a class="all-topics-link" href="/topics/">查看全部主題 →</a></aside></div><script>
  const topicList = document.querySelector('.frequent-topics .topic-list');
  if (topicList) {
    const topics = Array.from(topicList.children);
    for (let index = topics.length - 1; index > 0; index--) {
      const randomIndex = Math.floor(Math.random() * (index + 1));
      [topics[index], topics[randomIndex]] = [topics[randomIndex], topics[index]];
    }
    topicList.replaceChildren(...topics);
  }
</script></main><footer class="site-footer"><p>© 2026 夢行者的夢想天空</p><p class="footer-links"><button type="button" class="footer-shortcuts" data-shortcut-help-open hidden>按 <kbd>?</kbd> 查看快捷鍵</button><a href="/rss.xml">RSS 訂閱</a></p></footer><dialog class="quick-search" aria-label="快速搜尋文章" data-quick-search><div class="quick-search-panel"><form class="quick-search-field" role="search" action="/search/" method="get"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg><input type="search" name="q" placeholder="搜尋夢想天空" maxlength="100" autocomplete="off" enterkeyhint="search" role="combobox" aria-label="搜尋文章標題、內文或標籤" aria-expanded="false" aria-controls="quick-search-results" aria-autocomplete="list"><kbd aria-hidden="true">esc</kbd></form><div class="quick-search-body"><p class="quick-search-status" role="status" aria-live="polite"></p><ul id="quick-search-results" class="quick-search-results" role="listbox" aria-label="搜尋結果"></ul></div><footer class="quick-search-footer"><a href="/search/" data-quick-search-all>開啟完整搜尋</a><span aria-hidden="true"><kbd>↑</kbd><kbd>↓</kbd> 選擇　<kbd>↵</kbd> 開啟</span></footer></div></dialog><script type="module" src="/_astro/QuickSearch.astro_astro_type_script_index_0_lang.EU6ukyQ8.js"></script><dialog class="shortcut-help" aria-labelledby="shortcut-help-title" data-shortcut-help><div class="shortcut-help-panel" tabindex="-1" autofocus><header class="shortcut-help-header"><h2 id="shortcut-help-title">鍵盤快捷鍵</h2><button type="button" class="shortcut-help-close" aria-label="關閉熱鍵說明" data-shortcut-help-close><kbd>esc</kbd></button></header><section><h3>全站</h3><dl><div data-mac-keys><dt><kbd>⌘</kbd><kbd>K</kbd></dt><dd>快速搜尋</dd></div><div><dt><kbd>/</kbd></dt><dd>快速搜尋</dd></div><div><dt><kbd>T</kbd></dt><dd>回到頁面頂端</dd></div><div><dt><kbd>D</kbd></dt><dd>跳到頁面底部</dd></div><div><dt><kbd>R</kbd></dt><dd>隨機看一篇文章</dd></div><div><dt><kbd>S</kbd></dt><dd>切換深色或淺色</dd></div><div><dt><kbd>?</kbd></dt><dd>顯示這張熱鍵說明</dd></div></dl></section><section data-shortcut-list hidden><h3>瀏覽文章列表時</h3><dl><div><dt><kbd>←</kbd></dt><dd>上一頁（較新的文章）</dd></div><div><dt><kbd>→</kbd></dt><dd>下一頁（較舊的文章）</dd></div></dl></section><section data-shortcut-album hidden><h3>瀏覽相簿時</h3><dl><div><dt><kbd>←</kbd></dt><dd>較新的相簿；放大時是上一張</dd></div><div><dt><kbd>→</kbd></dt><dd>較早的相簿；放大時是下一張</dd></div><div><dt><kbd>C</kbd></dt><dd>放大時複製照片的 Markdown</dd></div></dl></section><section data-shortcut-article hidden><h3>閱讀文章時</h3><dl><div><dt><kbd>,</kbd></dt><dd>跳到上一個小標題</dd></div><div><dt><kbd>.</kbd></dt><dd>跳到下一個小標題</dd></div><div><dt><kbd>←</kbd></dt><dd>較新一篇文章</dd></div><div><dt><kbd>→</kbd></dt><dd>較早一篇文章</dd></div><div><dt><kbd>C</kbd></dt><dd>跳到留言區</dd></div><div><dt><kbd>F</kbd></dt><dd>開啟或關閉專注閱讀</dd></div><div><dt><kbd>+</kbd></dt><dd>放大閱讀字級</dd></div><div><dt><kbd>−</kbd></dt><dd>縮小閱讀字級</dd></div><div><dt><kbd>esc</kbd></dt><dd>退出專注閱讀</dd></div><div data-owner-only><dt><kbd>E</kbd></dt><dd>在 Pages CMS 編輯這篇（站長模式）</dd></div></dl></section></div></dialog><script type="module">var e=document.querySelector(`[data-shortcut-help]`),t=document.querySelector(`[data-article-body]`),n=/Mac|iPhone|iPad/.test(navigator.platform),r=matchMedia(`(prefers-reduced-motion: reduce)`),i=document.querySelector(`.blog-pagination`);e.querySelector(`[data-shortcut-article]`).hidden=!t;var a=document.querySelector(`[data-album]`);e.querySelector(`[data-shortcut-list]`).hidden=!i||!!a,e.querySelector(`[data-shortcut-album]`).hidden=!a,n||e.querySelectorAll(`[data-mac-keys] kbd:first-child`).forEach(e=>{e.textContent=`Ctrl`});var o=e=>e instanceof HTMLElement&&(e.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(e.tagName))&&!e.closest(`dialog:not([open])`);function s(e){let n=[...t.querySelectorAll(`h2, h3`)].filter(e=>e.offsetParent);if(!n.length)return;let i=n.map(e=>e.getBoundingClientRect().top),a=e===1?i.findIndex(e=>e>32):i.findLastIndex(e=>e<-4);if(a===-1){e===-1&&window.scrollTo({top:0,behavior:r.matches?`instant`:`smooth`});return}n[a].scrollIntoView({behavior:r.matches?`instant`:`smooth`,block:`start`})}function c(e){let t=[...document.querySelectorAll(`[data-reading-size]`)],n=t.findIndex(e=>e.getAttribute(`aria-pressed`)===`true`);t[Math.min(t.length-1,Math.max(0,n+e))]?.click()}var l=!1;async function u(){if(!l){l=!0;try{let e=await(await fetch(`/on-this-day.json`)).json(),t=Object.values(e).flat().map(e=>e.url).filter(e=>decodeURI(e)!==decodeURI(location.pathname));t.length&&(location.href=t[Math.floor(Math.random()*t.length)])}catch{}finally{l=!1}}}function d(){let e=document.querySelector(`[data-theme-choice]`);e&&(e.value=document.documentElement.dataset.theme===`dark`?`light`:`dark`,e.dispatchEvent(new Event(`change`,{bubbles:!0})))}document.addEventListener(`keydown`,n=>{if(n.defaultPrevented||n.isComposing||n.metaKey||n.ctrlKey||n.altKey||o(n.target)||document.querySelector(`dialog[open]:not([data-shortcut-help])`))return;if(n.key===`?`){n.preventDefault(),e.open?e.close():e.showModal();return}if(e.open)return;let a={t:()=>window.scrollTo({top:0,behavior:r.matches?`instant`:`smooth`}),d:()=>window.scrollTo({top:document.documentElement.scrollHeight,behavior:r.matches?`instant`:`smooth`}),r:u,s:d},l=n.key.length===1?a[n.key.toLowerCase()]:void 0;if(l){n.preventDefault(),l();return}if(!t){let e=n.key===`ArrowLeft`?`prev`:n.key===`ArrowRight`?`next`:``,t=e&&i?.querySelector(`a[rel="${e}"]`);if(!t)return;n.preventDefault(),t.click();return}let f={".":()=>s(1),",":()=>s(-1),ArrowLeft:()=>document.querySelector(`.adjacent-posts a[rel="prev"]`)?.click(),ArrowRight:()=>document.querySelector(`.adjacent-posts a[rel="next"]`)?.click(),c:()=>document.getElementById(`comments`)?.scrollIntoView({behavior:r.matches?`instant`:`smooth`}),f:()=>document.querySelector(`[data-focus-mode]`)?.click(),e:()=>{let e=document.querySelector(`[data-post-edit]`);e&&`owner`in document.documentElement.dataset&&window.open(e.href,`_blank`,`noopener`)},"+":()=>c(1),"=":()=>c(1),"-":()=>c(-1)}[n.key.length===1?n.key.toLowerCase():n.key];f&&(n.preventDefault(),f())}),e.querySelector(`[data-shortcut-help-close]`).addEventListener(`click`,()=>e.close()),e.addEventListener(`close`,()=>{document.activeElement instanceof HTMLElement&&e.contains(document.activeElement)&&document.activeElement.blur()}),e.addEventListener(`click`,t=>{t.target===e&&e.close()}),document.querySelectorAll(`[data-shortcut-help-open]`).forEach(t=>t.addEventListener(`click`,()=>e.showModal())),matchMedia(`(hover: hover) and (pointer: fine)`).matches&&document.querySelectorAll(`[data-shortcut-help-open]`).forEach(e=>{e.hidden=!1});</script><dialog class="quick-look" aria-label="圖片預覽" data-quick-look><figure class="quick-look-stage"><img alt="" data-quick-look-image><figcaption class="quick-look-bar"><span data-quick-look-caption></span><span class="quick-look-count" data-quick-look-count></span><button type="button" class="quick-look-copy" hidden data-quick-look-copy title="複製 Markdown（C）">複製 Markdown</button></figcaption></figure><button type="button" class="quick-look-nav" data-quick-look-step="-1" aria-label="上一張圖片">‹</button><button type="button" class="quick-look-nav" data-quick-look-step="1" aria-label="下一張圖片">›</button><button type="button" class="quick-look-close" aria-label="關閉圖片預覽" data-quick-look-close><kbd>esc</kbd></button></dialog><script type="module" src="/_astro/QuickLook.astro_astro_type_script_index_0_lang.Bf9t29sS.js"></script><button class="back-to-top" type="button" hidden aria-label="回到頂端" title="回到頂端（T）"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19V5M5.5 11.5 12 5l6.5 6.5"></path></svg></button><script type="module">function e(e){if(e===`/`||/^\/page\/\d+\/$/.test(e))return`文章列表`;if(e===`/search/`)return`搜尋結果`;if(e===`/archive/`)return`文章彙整`;if(e===`/topics/`)return`主題索引`;let t=e.match(/^\/(categories|tags)\/([^/]+)\/(?:year\/\d{4}\/)?(?:page\/\d+\/)?$/);if(t)try{return`${t[1]===`tags`?`#`:``}${decodeURIComponent(t[2])}`}catch{return}}function t(t,n,r=Date.now()){if(!t||typeof t!=`object`)return!1;let i=t;if(typeof i.url!=`string`||typeof i.from!=`string`||typeof i.anchor!=`string`)return!1;try{let t=new URL(i.url,n),a=new URL(i.from,n),o=new URL(i.anchor,n);return t.origin===n&&a.origin===n&&o.origin===n&&!!e(t.pathname)&&o.pathname.startsWith(`/posts/`)&&typeof i.label==`string`&&i.label.length<=300&&Number.isFinite(i.y)&&i.y>=0&&Number.isFinite(i.offset)&&Number.isFinite(i.at)&&r>=i.at&&r-i.at<288e5}catch{return!1}}var n=`dream-sky-browse-contexts`,r=`dream-sky-browse-restore`,i=()=>location.pathname+location.search+location.hash,a=e=>{try{return JSON.parse(sessionStorage.getItem(e)??`null`)}catch{return null}},o=(e,t)=>{try{sessionStorage.setItem(e,JSON.stringify(t))}catch{}},s=()=>{let e=a(n);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(([,e])=>t(e,location.origin)))},c,l=s()[location.pathname];if(l&&document.referrer){let e=new URL(document.referrer),t=new URL(l.from,location.origin);e.origin===location.origin&&e.pathname===t.pathname&&e.search===t.search&&(c=l)}var u=document.querySelector(`[data-return-link]`);u&&c&&(u.href=c.url,u.textContent=`← 回到${c.label}`,u.addEventListener(`click`,()=>o(r,c)));var d=t=>{if(t.defaultPrevented||t.type===`auxclick`&&t.button!==1)return;let r=t.target instanceof Element?t.target.closest(`main a[href]`):null;if(!r)return;let a=new URL(r.href);if(a.origin!==location.origin||!a.pathname.startsWith(`/posts/`))return;let l=e(location.pathname),u=l?{url:i(),label:l,y:window.scrollY,anchor:a.pathname,offset:r.getBoundingClientRect().top,at:Date.now(),from:i()}:c?{...c,from:i(),at:Date.now()}:void 0;if(!u)return;let d=s();d[a.pathname]=u,o(n,Object.fromEntries(Object.entries(d).sort((e,t)=>t[1].at-e[1].at).slice(0,20)))};document.addEventListener(`click`,d),document.addEventListener(`auxclick`,d);var f=a(r);(!t(f,location.origin)||f.url!==i())&&(f=void 0);var p=!1,m=!1,h=()=>{m=!0};window.addEventListener(`wheel`,h,{passive:!0,once:!0}),window.addEventListener(`touchstart`,h,{passive:!0,once:!0}),window.addEventListener(`pointerdown`,h,{once:!0}),window.addEventListener(`keydown`,h,{once:!0});var g=()=>{if(m||!t(f,location.origin)||f.url!==i()||location.pathname===`/search/`&&!document.querySelector(`[data-search-ready]`))return;let e=f;requestAnimationFrame(()=>{if(m)return;let t=[...document.querySelectorAll(`main a[href]`)].find(t=>new URL(t.href).pathname===e.anchor),n=t?window.scrollY+t.getBoundingClientRect().top-e.offset:e.y;window.scrollTo({top:Math.max(0,n),behavior:`instant`}),p||t?.focus({preventScroll:!0}),p=!0;try{sessionStorage.removeItem(r)}catch{}})};window.addEventListener(`search:ready`,g),window.addEventListener(`load`,g,{once:!0}),window.addEventListener(`pageshow`,g),g();var _=document.querySelector(`.back-to-top`),v=document.querySelector(`.site-footer`),y=window.scrollY,b=0,x=()=>{b=0;let e=window.scrollY;_.hidden=e<600;let t=v?Math.max(0,window.innerHeight-v.getBoundingClientRect().top):0;_.style.setProperty(`--footer-lift`,`${t}px`),t>0||e<y-8?_.removeAttribute(`data-tucked`):e>y+8&&_.setAttribute(`data-tucked`,``),Math.abs(e-y)>8&&(y=e)},S=()=>{b||=requestAnimationFrame(x)};window.addEventListener(`scroll`,S,{passive:!0}),window.addEventListener(`resize`,S,{passive:!0}),window.addEventListener(`pageshow`,x),x(),_.addEventListener(`click`,()=>{window.scrollTo({top:0,behavior:matchMedia(`(prefers-reduced-motion: reduce)`).matches?`instant`:`smooth`});let e=document.querySelector(`h1`);e?.setAttribute(`tabindex`,`-1`),e?.focus({preventScroll:!0})});</script></body></html>