{"id":1058,"date":"2026-01-08T17:39:00","date_gmt":"2026-01-08T09:39:00","guid":{"rendered":"https:\/\/seedcenter.tw\/care.org\/?page_id=1058"},"modified":"2026-01-21T14:37:24","modified_gmt":"2026-01-21T06:37:24","slug":"mindspring-%e6%ad%a3%e5%bf%b5%e7%a4%be%e6%9c%83%e6%83%85%e7%b7%92%e5%ad%b8%e7%bf%92-%e7%ac%ac%e4%ba%8c%e5%86%8a-%e5%bd%b1%e9%9f%b3%e8%b3%87%e6%ba%90","status":"publish","type":"page","link":"https:\/\/seedcenter.tw\/care.org\/?page_id=1058","title":{"rendered":"MindSpring \u6b63\u5ff5\u793e\u6703\u60c5\u7dd2\u5b78\u7fd2 \u7b2c\u4e8c\u518a \u5f71\u97f3\u8cc7\u6e90"},"content":{"rendered":"\n<!DOCTYPE html>\n<html class=\"light\" lang=\"zh-Hant\">\n  <head>\n    <meta charset=\"utf-8\" \/>\n    <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" \/>\n    <title>MindSpring \u7b2c\u4e8c\u518a \u5f71\u97f3\u9023\u7d50<\/title>\n\n    <link href=\"https:\/\/fonts.googleapis.com\" rel=\"preconnect\" \/>\n    <link crossorigin=\"\" href=\"https:\/\/fonts.gstatic.com\" rel=\"preconnect\" \/>\n    <link\n      href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;700;900&#038;display=swap\"\n      rel=\"stylesheet\"\n    \/>\n    <link\n      href=\"https:\/\/fonts.googleapis.com\/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&#038;display=swap\"\n      rel=\"stylesheet\"\n    \/>\n\n    <script src=\"https:\/\/cdn.tailwindcss.com?plugins=forms,container-queries\"><\/script>\n    <script id=\"tailwind-config\">\n      tailwind.config = {\n        darkMode: \"class\",\n        theme: {\n          extend: {\n            colors: {\n              primary: \"rgb(98,178,178)\",\n              \"primary-weak\": \"rgb(204,229,229)\",\n\n              \"background-light\": \"#f6f7f8\",\n              \"background-dark\": \"#101922\",\n              \"surface-light\": \"#ffffff\",\n              \"surface-dark\": \"#1a2632\",\n              \"text-main\": \"#111418\",\n              \"text-secondary\": \"#617589\",\n            },\n            fontFamily: {\n              display: [\"Inter\", \"sans-serif\"],\n            },\n            borderRadius: {\n              DEFAULT: \"0.25rem\",\n              lg: \"0.5rem\",\n              xl: \"0.75rem\",\n              full: \"9999px\",\n            },\n          },\n        },\n      };\n    <\/script>\n\n    <style>\n      body {\n        font-family: \"Inter\", \"Noto Sans\", sans-serif;\n      }\n      .material-symbols-outlined {\n        font-variation-settings: \"FILL\" 0, \"wght\" 420, \"GRAD\" 0, \"opsz\" 24;\n      }\n      .icon-filled {\n        font-variation-settings: \"FILL\" 1, \"wght\" 520, \"GRAD\" 0, \"opsz\" 24;\n      }\n    <\/style>\n  <\/head>\n\n  <body\n    class=\"relative flex min-h-screen w-full flex-col bg-background-light dark:bg-background-dark overflow-x-hidden font-display\"\n  >\n    <div class=\"flex-1 px-4 md:px-10 lg:px-40 py-8 flex justify-center\">\n      <div class=\"flex flex-col max-w-[960px] w-full gap-6\">\n        <!-- Header -->\n        <div class=\"flex flex-col gap-4 pt-4\">\n          <div class=\"flex flex-col gap-2\">\n            <h1\n              class=\"text-text-main dark:text-white text-3xl md:text-4xl font-black leading-tight tracking-[-0.033em]\"\n            >\n              MindSpring \u7b2c\u4e8c\u518a \u5f71\u97f3\u8cc7\u6e90\u5eab\n            <\/h1>\n            <p\n              class=\"text-text-secondary dark:text-gray-400 text-s md:text-base font-normal leading-normal max-w-[700px]\"\n            >\n              \u4f9d\u7d19\u672c\u9801\u78bc\u8207\u55ae\u5143\u5f59\u6574\u6559\u5b78\u5f71\u7247\u3001\u6d3b\u52d5\/\u904a\u6232\u8207\u8cc7\u8a0a\u9023\u7d50\u3002\n              <br \/>\n              \u53ef\u7528\u4e0a\u65b9\u6309\u9215\u7be9\u9078\u985e\u578b\uff0c\u4e26\u5c55\u958b\u67e5\u770b\u6bcf\u500b\u55ae\u5143\u7684\u8cc7\u6e90\u6e05\u55ae\u3002\n            <\/p>\n\n            <!-- meta -->\n            <div class=\"mt-2 flex flex-wrap gap-2 items-center\">\n              <div\n                class=\"inline-flex items-center gap-2 rounded-full bg-surface-light dark:bg-surface-dark border border-gray-100 dark:border-[#2a3642] px-3 py-1.5 text-sm\"\n              >\n                <span\n                  class=\"material-symbols-outlined text-[18px] text-text-secondary dark:text-gray-400\"\n                  >database<\/span\n                >\n                <span class=\"text-text-secondary dark:text-gray-400\"\n                  >\u8cc7\u6e90\u7e3d\u6578\uff1a<\/span\n                >\n                <span\n                  id=\"metaTotal\"\n                  class=\"font-semibold text-text-main dark:text-white\"\n                  >&#8211;<\/span\n                >\n              <\/div>\n\n              <div\n                class=\"inline-flex items-center gap-2 rounded-full bg-surface-light dark:bg-surface-dark border border-gray-100 dark:border-[#2a3642] px-3 py-1.5 text-sm\"\n              >\n                <span\n                  class=\"material-symbols-outlined text-[18px] text-text-secondary dark:text-gray-400\"\n                  >view_list<\/span\n                >\n                <span class=\"text-text-secondary dark:text-gray-400\"\n                  >\u55ae\u5143\u6578\uff1a<\/span\n                >\n                <span\n                  id=\"metaUnits\"\n                  class=\"font-semibold text-text-main dark:text-white\"\n                  >&#8211;<\/span\n                >\n              <\/div>\n\n              <!-- \u76ee\u524d\u7be9\u9078\uff1a\u624b\u6a5f\u7f6e\u4e2d \/ \u684c\u6a5f\u4e0d\u8b8a -->\n              <div\n                id=\"metaFilter\"\n                class=\"hidden w-full md:w-auto flex md:inline-flex justify-center md:justify-start mt-4 md:mt-0\"\n              >\n                <div\n                  class=\"inline-flex items-center gap-2 rounded-full bg-primary-weak dark:bg-white\/5 ring-1 ring-inset ring-black\/5 dark:ring-white\/10 px-3 py-1.5 text-sm\"\n                >\n                  <span\n                    class=\"material-symbols-outlined text-[18px]\"\n                    style=\"color: rgb(38, 98, 98)\"\n                    >filter_alt<\/span\n                  >\n                  <span\n                    class=\"font-semibold\"\n                    style=\"color: rgb(38, 98, 98)\"\n                    >\u76ee\u524d\u7be9\u9078\uff1a\u5168\u90e8\u8cc7\u6e90<\/span\n                  >\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <!-- Filters -->\n        <div class=\"flex gap-3 pb-2 flex-wrap items-center\">\n          <button\n            data-filter=\"all\"\n            class=\"filter-btn group flex h-9 shrink-0 items-center justify-center gap-x-2 rounded-full bg-primary pl-3 pr-4 shadow-sm transition-all hover:shadow-md\"\n          >\n            <span class=\"material-symbols-outlined text-white text-[20px]\"\n              >grid_view<\/span\n            >\n            <p class=\"text-white text-sm font-medium\">\u5168\u90e8\u8cc7\u6e90<\/p>\n          <\/button>\n\n          <button\n            data-filter=\"video\"\n            class=\"filter-btn group flex h-9 shrink-0 items-center justify-center gap-x-2 rounded-full bg-surface-light dark:bg-surface-dark border border-transparent hover:border-gray-200 dark:hover:border-gray-700 pl-3 pr-4 transition-all hover:bg-gray-50 dark:hover:bg-[#22303c]\"\n          >\n            <span\n              class=\"material-symbols-outlined text-text-main dark:text-white text-[20px]\"\n              >movie<\/span\n            >\n            <p class=\"text-text-main dark:text-white text-sm font-medium\">\n              \u6559\u5b78\u5f71\u7247\n            <\/p>\n          <\/button>\n\n          <button\n            data-filter=\"game\"\n            class=\"filter-btn group flex h-9 shrink-0 items-center justify-center gap-x-2 rounded-full bg-surface-light dark:bg-surface-dark border border-transparent hover:border-gray-200 dark:hover:border-gray-700 pl-3 pr-4 transition-all hover:bg-gray-50 dark:hover:bg-[#22303c]\"\n          >\n            <span\n              class=\"material-symbols-outlined text-text-main dark:text-white text-[20px]\"\n              >sports_esports<\/span\n            >\n            <p class=\"text-text-main dark:text-white text-sm font-medium\">\n              \u4e92\u52d5\u904a\u6232\n            <\/p>\n          <\/button>\n\n          <button\n            data-filter=\"link\"\n            class=\"filter-btn group flex h-9 shrink-0 items-center justify-center gap-x-2 rounded-full bg-surface-light dark:bg-surface-dark border border-transparent hover:border-gray-200 dark:hover:border-gray-700 pl-3 pr-4 transition-all hover:bg-gray-50 dark:hover:bg-[#22303c]\"\n          >\n            <span\n              class=\"material-symbols-outlined text-text-main dark:text-white text-[20px]\"\n              >link<\/span\n            >\n            <p class=\"text-text-main dark:text-white text-sm font-medium\">\n              \u8cc7\u8a0a\u9023\u7d50\n            <\/p>\n          <\/button>\n\n        <\/div>\n\n        <!-- List -->\n        <div class=\"flex flex-col gap-5\" id=\"unitList\"><\/div>\n\n        <!-- Empty state -->\n        <div\n          id=\"emptyState\"\n          class=\"hidden rounded-xl bg-surface-light dark:bg-surface-dark border border-gray-100 dark:border-[#2a3642] p-6\"\n        >\n          <div class=\"flex items-start gap-3\">\n            <div\n              class=\"size-10 rounded-full bg-primary\/15 flex items-center justify-center\"\n              style=\"color: rgb(38, 98, 98)\"\n            >\n              <span class=\"material-symbols-outlined\">search_off<\/span>\n            <\/div>\n            <div class=\"flex-1\">\n              <p class=\"text-text-main dark:text-white font-bold\">\n                \u6c92\u6709\u7b26\u5408\u689d\u4ef6\u7684\u8cc7\u6e90\n              <\/p>\n              <p class=\"text-text-secondary dark:text-gray-400 text-sm mt-1\">\n                \u8acb\u5207\u63db\u7be9\u9078\u689d\u4ef6\uff08\u4f8b\u5982\u300c\u5168\u90e8\u8cc7\u6e90\u300d\uff09\u6216\u78ba\u8a8d\u8cc7\u6599\u662f\u5426\u5b8c\u6574\u3002\n              <\/p>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <!-- Load more -->\n        <div class=\"mt-4 flex items-center justify-center py-4\">\n          <button\n            id=\"loadMoreBtn\"\n            class=\"text-text-secondary dark:text-gray-400 text-sm font-medium hover:text-primary transition-colors flex items-center gap-2\"\n          >\n            \u986f\u793a\u66f4\u591a\u8cc7\u6e90\n            <span class=\"material-symbols-outlined text-[18px]\"\n              >expand_more<\/span\n            >\n          <\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <script>\n      \/**\n       * \u7b2c\u4e8c\u518a\u8cc7\u6599\uff08\u4f86\u81ea\u4f60\u8cbc\u7684 xlsx \u8868\u683c\uff09\n       *\/\n      const RAW_ROWS = [\n        { page: \"30\", unit: \"\u6d3b\u52d51\uff0d2\u3008\u60c5\u7dd2\u7684\u6cb9\u9580\u8207\u715e\u8eca\u3009\", category: \"\u5f71\u7247\", title: \"\u4eba\u985e\u5fc3\u667a\u7684\u6f14\u5316\", url: \"https:\/\/www.youtube.com\/watch?v=kv6HkipQcfA\", note: \"\" },\n        { page: \"34\", unit: \"\u6d3b\u52d51\uff0d3\u3008\u4eba\u70ba\u4ec0\u9ebc\u8981\u8b80\u66f8\uff1f\u3009\", category: \"\u5f71\u7247\", title: \"\u9752\u6625\u767c\u8a00\u4eba\", url: \"https:\/\/www.youtube.com\/watch?v=jha9Etht3l8\", note: \"\" },\n        { page: \"35\", unit: \"\u6d3b\u52d51\uff0d3\u3008\u4eba\u70ba\u4ec0\u9ebc\u8981\u8b80\u66f8\uff1f\u3009\", category: \"\u5f71\u7247\", title: \"The Case for Curiosity: Mario Livio at TEDxMidAtlantic 2012\", url: \"https:\/\/www.youtube.com\/watch?v=Z_ojyXVVFKA\", note: \"\" },\n        { page: \"47\", unit: \"\u6d3b\u52d51\uff0d6\u3008\u611f\u5b98\u6ce8\u610f\u529b\u3009\", category: \"\u5f71\u72471\", title: \"\u8996\u89ba\u5c08\u6ce8\u529b\u5be6\u9a57\", url: \"https:\/\/www.youtube.com\/watch?v=6E035QRzHbc\", note: \"\" },\n        { page: \"47\", unit: \"\", category: \"\u5f71\u72472\", title: \"\u8996\u89ba\u5c08\u6ce8\u529b\u6e2c\u9a57(\u52302\u520633\u79d2)\", url: \"https:\/\/www.youtube.com\/watch?v=H-cNNxtXLrQ\", note: \"\" },\n        { page: \"47\", unit: \"\u6d3b\u52d51\uff0d6\u3008\u611f\u5b98\u6ce8\u610f\u529b\u3009\", category: \"\u5f71\u7247\", title: \"\u5e03\u7a40\u9ce5\", url: \"https:\/\/www.youtube.com\/watch?v=BH515JI8zhM\", note: \"\" },\n        { page: \"47\", unit: \"\u6d3b\u52d51\uff0d6\u3008\u611f\u5b98\u6ce8\u610f\u529b\u3009\", category: \"\u6d3b\u52d5\/\u904a\u6232\", title: \"\u89f8\u89ba\u5c08\u6ce8\u529b\u904a\u6232\", url: \"https:\/\/www.youtube.com\/live\/R9gmnwHZFK0\", note: \"\" },\n        { page: \"50\", unit: \"\u6d3b\u52d51\uff0d7\u3008\u5c08\u5fc3\u8207\u5206\u5fc3\u3009\", category: \"\u5f71\u7247\", title: \"\u6587\u68ee\u8aaa\u66f8\", url: \"https:\/\/www.youtube.com\/watch?v=TS63ZYfWOU0\", note: \"\" },\n        { page: \"98\", unit: \"\u6d3b\u52d53\uff0d1\u3008\u6b63\u5411\u60c5\u7dd2\u7684\u9b54\u529b\u3009\", category: \"\u5f71\u7247\", title: \"\u96fb\u5f71\u300c\u9b54\u7403\u300d(Best scene from Moneyball)\", url: \"https:\/\/www.youtube.com\/watch?v=o9Q0kp8CMFQ\", note: \"\" },\n        { page: \"108\", unit: \"\u6d3b\u52d53\uff0d3\u3008\u6b61\u7b11\u9032\u5316\u62f3\u3009\", category: \"\u5f71\u7247\", title: \"\u6f14\u54e1\u793a\u7bc4\u4e0d\u540c\u7b49\u7d1a\u7684\u7b11\", url: \"http:\/\/humoref.epc.ntnu.edu.tw:61216\/sharing\/E1oKNULG5\", note: \"\" },\n        { page: \"114\", unit: \"\u6d3b\u52d53\uff0d4\u3008\u6b61\u7b11\u745c\u73c8\u8853\u3009\", category: \"\u5f71\u7247\", title: \"\u6b61\u7b11\u745c\u73c8\u5c0d\u5065\u5eb7\u7684\u5f71\u97ff(\u5f04\u5047\u6210\u771f\u7b11\u745c\u73c8 \u8abf\u6574\u547c\u5438\u7b11\u51fa\u8072\u8b8a\u5feb\u6a02)\", url: \"https:\/\/www.youtube.com\/watch?v=GAU3ODefWF8\", note: \"\" },\n        { page: \"114\", unit: \"\", category: \"\u5f71\u7247\", title: \"\u6253\u62db\u547c\u7684\u7b11 Greeting laughter\", url: \"https:\/\/www.youtube.com\/watch?v=PuXa54ArhlM\", note: \"\" },\n        { page: \"115\", unit: \"\", category: \"\u5f71\u7247\", title: \"\u7345\u5b50\u7684\u7b11 Lion Laughter\", url: \"https:\/\/www.youtube.com\/watch?v=4MEaDg6C-78\", note: \"\" },\n        { page: \"115\", unit: \"\", category: \"\u5f71\u7247\", title: \"\u4e00\u516c\u5c3a\u7684\u7b11 One Meter Laughter\", url: \"https:\/\/www.youtube.com\/watch?v=GPd8pBM1NxA\", note: \"\" },\n        { page: \"115\", unit: \"\", category: \"\u5f71\u7247\", title: \"\u6416\u725b\u5976\u7684\u7b11 Milk Shake Laughter\", url: \"https:\/\/www.youtube.com\/watch?v=kuUaS2tuaJk\", note: \"\" },\n        { page: \"122\", unit: \"\u6d3b\u52d54\uff0d1\u3008\u4e0d\u4e00\u6a23\u53c8\u600e\u6a23\u3009\", category: \"\u8cc7\u8a0a\u9023\u7d50\", title: \"\u5168\u4e16\u754c\u6709\u591a\u5c11\u4eba\uff1f\uff08\u5373\u6642\u7d71\u8a08\u7db2\u7ad9\uff09\", url: \"https:\/\/www.worldometers.info\/tw\/\", note: \"\" },\n        { page: \"122\", unit: \"\u6d3b\u52d54\uff0d1\u3008\u4e0d\u4e00\u6a23\u53c8\u600e\u6a23\u3009\", category: \"\u5f71\u7247\", title: \"\u4f60\u77e5\u9053\u5176\u4ed6\u570b\u5bb6\u7684\u5b69\u5b50\u5982\u4f55\u751f\u6d3b\u55ce\uff1f\", url: \"https:\/\/www.youtube.com\/watch?v=WdsA756dIcA\", note: \"\" },\n        { page: \"132\", unit: \"\u6d3b\u52d54\uff0d3\u3008\u504f\u898b\u504f\u504f\u770b\u4e0d\u898b\u3009\", category: \"\u5f71\u7247\", title: \"\u4e8b\u60c5\u4e26\u975e\u4f60\u60f3\u5f97\u9019\u6a23\", url: \"https:\/\/www.youtube.com\/watch?v=49XGIag9UTA\", note: \"\" },\n        { page: \"137\", unit: \"\u6d3b\u52d54\uff0d4\u3008\u540c\u7406\u4f60\u548c\u6211\u3009\", category: \"\u5f71\u7247\", title: \"\u7ad9\u5728\u4ed6\u4eba\u7acb\u5834\u770b\u4e8b\u60c5\", url: \"https:\/\/www.youtube.com\/watch?v=H0fu5rOqPos&list=PLL4b1tWHPfmRsW_-nmJpO-7ZR1snj3Ymm&index=6\", note: \"\" },\n      ];\n\n      \/\/ \u88dc\u9f4a\u7a7a\u767d unit\uff08\u6cbf\u7528\u4e0a\u4e00\u5217 unit\uff09\n      function fillDownUnit(rows) {\n        let lastUnit = \"\";\n        return rows.map((r) => {\n          const unit = (r.unit || \"\").trim();\n          if (unit) lastUnit = unit;\n          return { ...r, unit: unit || lastUnit };\n        });\n      }\n\n      const FILLED_ROWS = fillDownUnit(RAW_ROWS);\n\n      function normalizeType(category) {\n        const c = (category || \"\").trim();\n        if (c === \"\u5f71\u7247\" || c === \"\u5f71\u72471\" || c === \"\u5f71\u72472\") return \"video\";\n        if (c === \"\u97f3\u6a94\") return \"audio\";\n        if (c === \"\u4e92\u52d5\u904a\u6232\" || c === \"\u6d3b\u52d5\/\u904a\u6232\") return \"game\";\n        if (c === \"\u8cc7\u8a0a\u9023\u7d50\") return \"link\";\n        if (c === \"\u7c21\u5831\" || c === \"\u8ab2\u7a0b\u7c21\u5831\") return \"slides\";\n        return \"other\";\n      }\n\n      function typeUI(type) {\n        switch (type) {\n          case \"video\":\n            return {\n              badge: \"\u5f71\u7247\",\n              badgeClass:\n                \"bg-blue-50 dark:bg-blue-900\/30 text-[rgb(38,98,98)] ring-blue-700\/10 dark:ring-blue-700\/30\",\n              icon: \"play_circle\",\n              iconStyle: \"color: rgb(98,178,178)\",\n              action: \"\u524d\u5f80\u89c0\u770b\",\n              actionIcon: \"arrow_forward\",\n            };\n          case \"audio\":\n            return {\n              badge: \"\u97f3\u6a94\",\n              badgeClass:\n                \"bg-purple-50 dark:bg-purple-900\/30 text-purple-600 dark:text-purple-400 ring-purple-700\/10 dark:ring-purple-700\/30\",\n              icon: \"headphones\",\n              iconStyle: \"color: rgb(98,178,178)\",\n              action: \"\u7acb\u5373\u6536\u807d\",\n              actionIcon: \"headphones\",\n            };\n          case \"game\":\n            return {\n              badge: \"\u4e92\u52d5\u904a\u6232\",\n              badgeClass:\n                \"bg-emerald-50 dark:bg-emerald-900\/30 text-emerald-700 dark:text-emerald-300 ring-emerald-700\/10 dark:ring-emerald-700\/30\",\n              icon: \"sports_esports\",\n              iconStyle: \"color: rgb(98,178,178)\",\n              action: \"\u958b\u555f\u6d3b\u52d5\",\n              actionIcon: \"open_in_new\",\n            };\n          case \"link\":\n            return {\n              badge: \"\u8cc7\u8a0a\u9023\u7d50\",\n              badgeClass:\n                \"bg-amber-50 dark:bg-amber-900\/30 text-amber-800 dark:text-amber-300 ring-amber-700\/10 dark:ring-amber-700\/30\",\n              icon: \"link\",\n              iconStyle: \"color: rgb(98,178,178)\",\n              action: \"\u958b\u555f\u9023\u7d50\",\n              actionIcon: \"open_in_new\",\n            };\n          case \"slides\":\n            return {\n              badge: \"\u8ab2\u7a0b\u7c21\u5831\",\n              badgeClass:\n                \"bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 ring-gray-500\/10 dark:ring-gray-500\/20\",\n              icon: \"description\",\n              iconStyle: \"color: rgb(98,178,178)\",\n              action: \"\u4e0b\u8f09\/\u958b\u555f\",\n              actionIcon: \"download\",\n            };\n          default:\n            return {\n              badge: \"\u5176\u4ed6\",\n              badgeClass:\n                \"bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 ring-gray-500\/10 dark:ring-gray-500\/20\",\n              icon: \"link\",\n              iconStyle: \"color: rgb(98,178,178)\",\n              action: \"\u958b\u555f\u9023\u7d50\",\n              actionIcon: \"open_in_new\",\n            };\n        }\n      }\n\n      function escapeHTML(str) {\n        return String(str)\n          .replaceAll(\"&\", \"&amp;\")\n          .replaceAll(\"<\", \"&lt;\")\n          .replaceAll(\">\", \"&gt;\")\n          .replaceAll('\"', \"&quot;\")\n          .replaceAll(\"'\", \"&#039;\");\n      }\n\n      \/\/ \u2705 \u4f9d\u4f60\u7684\u8981\u6c42\uff1a\u6d3b\u52d5\u6709\u591a\u9801\u6642\uff0c\u53ea\u986f\u793a\u300c\u7b2c\u4e00\u500b\u9801\u78bc\u300d\n      function firstPageText(pagesSet) {\n        const pages = Array.from(pagesSet)\n          .map((p) => String(p).trim())\n          .filter(Boolean)\n          .map((p) => Number(p))\n          .filter((n) => Number.isFinite(n))\n          .sort((a, b) => a - b);\n\n        return pages.length ? String(pages[0]) : \"\";\n      }\n\n      function groupByUnit(rows) {\n        const map = new Map();\n        for (const r of rows) {\n          const key = (r.unit || \"\").trim();\n          if (!key) continue;\n\n          if (!map.has(key)) {\n            map.set(key, { unit: key, pages: new Set(), resources: [] });\n          }\n          const u = map.get(key);\n          u.pages.add(String(r.page || \"\").trim());\n\n          u.resources.push({\n            type: normalizeType(r.category),\n            category: (r.category || \"\").trim(),\n            title: (r.title || \"\").trim(),\n            url: (r.url || \"\").trim(),\n            note: (r.note || \"\").trim(),\n            page: String(r.page || \"\").trim(),\n          });\n        }\n\n        return Array.from(map.values()).map((u) => ({\n          ...u,\n          pageText: firstPageText(u.pages), \/\/ \u2705 \u53ea\u986f\u793a\u7b2c\u4e00\u9801\n        }));\n      }\n\n      const UNITS = groupByUnit(FILLED_ROWS);\n\n      const state = {\n        filter: \"all\",\n        visibleCount: 6,\n        expanded: new Set(),\n      };\n\n      const unitListEl = document.getElementById(\"unitList\");\n      const emptyStateEl = document.getElementById(\"emptyState\");\n      const loadMoreBtn = document.getElementById(\"loadMoreBtn\");\n\n      function computeStats() {\n        document.getElementById(\"metaTotal\").textContent = FILLED_ROWS.length;\n        document.getElementById(\"metaUnits\").textContent = UNITS.length;\n      }\n\n      function setFilterLabel() {\n        const map = {\n          all: \"\u5168\u90e8\u8cc7\u6e90\",\n          video: \"\u6559\u5b78\u5f71\u7247\",\n          audio: \"\u97f3\u983b\u8a2a\u8ac7\",\n          game: \"\u4e92\u52d5\u904a\u6232\",\n          link: \"\u8cc7\u8a0a\u9023\u7d50\",\n          slides: \"\u8ab2\u7a0b\u7c21\u5831\",\n        };\n        const label = map[state.filter] || \"\u5168\u90e8\u8cc7\u6e90\";\n        const meta = document.getElementById(\"metaFilter\");\n        meta.classList.remove(\"hidden\");\n        meta.querySelector(\"span.font-semibold\").textContent = `\u76ee\u524d\u7be9\u9078\uff1a${label}`;\n      }\n\n      function filteredUnits() {\n        if (state.filter === \"all\") return UNITS;\n\n        return UNITS\n          .map((u) => ({\n            ...u,\n            resources: u.resources.filter((res) => res.type === state.filter),\n          }))\n          .filter((u) => u.resources.length > 0);\n      }\n\n      function render() {\n        setFilterLabel();\n\n        const units = filteredUnits();\n        const visibleUnits = units.slice(0, state.visibleCount);\n\n        if (units.length === 0) {\n          unitListEl.innerHTML = \"\";\n          emptyStateEl.classList.remove(\"hidden\");\n          loadMoreBtn.classList.add(\"hidden\");\n          return;\n        } else {\n          emptyStateEl.classList.add(\"hidden\");\n        }\n\n        if (state.visibleCount >= units.length) {\n          loadMoreBtn.classList.add(\"hidden\");\n        } else {\n          loadMoreBtn.classList.remove(\"hidden\");\n        }\n\n        unitListEl.innerHTML = visibleUnits\n          .map((u, idx) => {\n            const unitIndex = idx;\n            const expanded = state.expanded.has(unitIndex);\n            const count = u.resources.length;\n\n            const resourcesHTML = u.resources\n              .map((res) => {\n                const ui = typeUI(res.type);\n\n                const categoryHint =\n                  res.category && res.category !== \"\u5f71\u7247\"\n                    ? `<span class=\"text-text-secondary dark:text-gray-500 text-xs font-medium\">\u00b7 ${escapeHTML(res.category)}<\/span>`\n                    : \"\";\n\n                return `\n                  <a href=\"${escapeHTML(res.url)}\" target=\"_blank\" rel=\"noopener noreferrer\"\n                    class=\"group\/resource flex items-center justify-between gap-3 rounded-lg border border-gray-100 dark:border-[#2a3642] bg-white\/60 dark:bg-transparent px-4 py-3 hover:bg-gray-50 dark:hover:bg-[#22303c] transition-colors\"\n                    title=\"\u958b\u555f\u9023\u7d50\uff08\u65b0\u5206\u9801\uff09\"\n                  >\n                    <div class=\"flex items-start gap-3 min-w-0\">\n                      <div class=\"mt-0.5 size-9 rounded-full bg-primary\/15 dark:bg-white\/5 flex items-center justify-center shrink-0\">\n                        <span class=\"material-symbols-outlined icon-filled text-[20px]\" style=\"${ui.iconStyle}\">${ui.icon}<\/span>\n                      <\/div>\n\n                      <div class=\"min-w-0\">\n                        <div class=\"flex flex-wrap items-center gap-2\">\n                          <span class=\"inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ${ui.badgeClass}\">\n                            ${escapeHTML(ui.badge)}\n                          <\/span>\n                          <span class=\"text-text-secondary dark:text-gray-500 text-xs font-medium\">\n                            \u9801\u78bc ${escapeHTML(res.page)}\n                          <\/span>\n                          ${categoryHint}\n                        <\/div>\n\n                        <p class=\"mt-1 text-text-main dark:text-white text-sm md:text-[15px] font-semibold leading-snug break-words\">\n                          ${escapeHTML(res.title)}\n                        <\/p>\n                      <\/div>\n                    <\/div>\n\n                    <div class=\"shrink-0\">\n                      <span class=\"inline-flex items-center gap-1.5 text-sm font-bold hover:opacity-90 transition-opacity\" style=\"color: rgb(38, 98, 98)\">\n                        <span>${escapeHTML(ui.action)}<\/span>\n                        <span class=\"material-symbols-outlined text-[18px]\">${ui.actionIcon}<\/span>\n                      <\/span>\n                    <\/div>\n                  <\/a>\n                `;\n              })\n              .join(\"\");\n\n            return `\n              <section\n                class=\"group flex flex-col gap-4 rounded-xl bg-surface-light dark:bg-surface-dark p-5 shadow-[0_2px_8px_rgba(0,0,0,0.04)] dark:shadow-none hover:shadow-[0_8px_24px_rgba(0,0,0,0.08)] transition-all duration-300 border border-transparent dark:border-[#2a3642]\"\n                data-unit-index=\"${unitIndex}\"\n              >\n                <div class=\"flex items-start justify-between gap-3\">\n                  <div class=\"min-w-0\">\n                    <p class=\"text-text-main dark:text-white text-lg font-bold leading-tight\">\n                      ${escapeHTML(u.unit)}\n                    <\/p>\n                    <p class=\"mt-1 text-text-secondary dark:text-gray-400 text-sm\">\n                      \u7b2c ${escapeHTML(u.pageText)} \u9801 \u00b7 ${count} \u500b\u8cc7\u6e90\n                    <\/p>\n                  <\/div>\n\n                  <button\n                    class=\"toggle-btn inline-flex items-center justify-center size-10 rounded-full bg-white\/60 dark:bg-white\/5 border border-gray-100 dark:border-[#2a3642] hover:bg-gray-50 dark:hover:bg-[#22303c] transition-colors shrink-0\"\n                    aria-expanded=\"${expanded ? \"true\" : \"false\"}\"\n                    title=\"${expanded ? \"\u6536\u5408\" : \"\u5c55\u958b\"}\"\n                    data-unit-index=\"${unitIndex}\"\n                  >\n                    <span class=\"material-symbols-outlined text-text-main dark:text-white\">\n                      ${expanded ? \"expand_less\" : \"expand_more\"}\n                    <\/span>\n                  <\/button>\n                <\/div>\n\n                <div class=\"${expanded ? \"block\" : \"hidden\"}\" data-unit-body=\"${unitIndex}\">\n                  <div class=\"flex flex-col gap-3\">\n                    ${resourcesHTML}\n                  <\/div>\n                <\/div>\n              <\/section>\n            `;\n          })\n          .join(\"\");\n\n        unitListEl.querySelectorAll(\".toggle-btn\").forEach((btn) => {\n          btn.addEventListener(\"click\", (e) => {\n            e.preventDefault();\n            e.stopPropagation();\n            const i = Number(btn.getAttribute(\"data-unit-index\"));\n            if (state.expanded.has(i)) state.expanded.delete(i);\n            else state.expanded.add(i);\n            render();\n          });\n        });\n      }\n\n      \/\/ filter pills\n      document.querySelectorAll(\".filter-btn\").forEach((btn) => {\n        btn.addEventListener(\"click\", () => {\n          const filter = btn.getAttribute(\"data-filter\");\n\n          state.filter = filter;\n          state.visibleCount = 6;\n          state.expanded = new Set();\n\n          document.querySelectorAll(\".filter-btn\").forEach((b) => {\n            const isActive = b.getAttribute(\"data-filter\") === filter;\n\n            if (isActive) {\n              b.classList.remove(\n                \"bg-surface-light\",\n                \"dark:bg-surface-dark\",\n                \"hover:bg-gray-50\",\n                \"dark:hover:bg-[#22303c]\"\n              );\n              b.classList.add(\"bg-primary\", \"shadow-sm\");\n              b.querySelectorAll(\"p\").forEach((p) => {\n                p.classList.remove(\"text-text-main\", \"dark:text-white\");\n                p.classList.add(\"text-white\");\n              });\n              b.querySelectorAll(\"span.material-symbols-outlined\").forEach((s) => {\n                s.classList.remove(\"text-text-main\", \"dark:text-white\");\n                s.classList.add(\"text-white\");\n              });\n            } else {\n              b.classList.remove(\"bg-primary\", \"shadow-sm\");\n              b.classList.add(\n                \"bg-surface-light\",\n                \"dark:bg-surface-dark\",\n                \"hover:bg-gray-50\",\n                \"dark:hover:bg-[#22303c]\"\n              );\n              b.querySelectorAll(\"p\").forEach((p) => {\n                p.classList.remove(\"text-white\");\n                p.classList.add(\"text-text-main\", \"dark:text-white\");\n              });\n              b.querySelectorAll(\"span.material-symbols-outlined\").forEach((s) => {\n                s.classList.remove(\"text-white\");\n                s.classList.add(\"text-text-main\", \"dark:text-white\");\n              });\n            }\n          });\n\n          render();\n        });\n      });\n\n      loadMoreBtn.addEventListener(\"click\", () => {\n        state.visibleCount += 6;\n        render();\n      });\n\n      computeStats();\n      render();\n    <\/script>\n  <\/body>\n<\/html>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>MindSpring \u7b2c\u4e8c\u518a \u5f71\u97f3\u9023\u7d50 MindSpring \u7b2c\u4e8c\u518a \u5f71\u97f3\u8cc7\u6e90\u5eab \u4f9d\u7d19\u672c\u9801\u78bc\u8207\u55ae\u5143\u5f59\u6574\u6559\u5b78\u5f71\u7247\u3001\u6d3b\u52d5\/\u904a\u6232\u8207\u8cc7\u8a0a\u9023\u7d50\u3002 \u53ef\u7528\u4e0a\u65b9\u6309\u9215\u7be9\u9078\u985e\u578b\uff0c\u4e26\u5c55\u958b\u67e5\u770b\u6bcf\u500b\u55ae\u5143\u7684\u8cc7\u6e90\u6e05\u55ae\u3002 database \u8cc7\u6e90\u7e3d\u6578\uff1a &#8211; view_list \u55ae\u5143\u6578\uff1a &#8211; filter_alt \u76ee\u524d\u7be9\u9078\uff1a\u5168\u90e8\u8cc7\u6e90 grid_view \u5168\u90e8\u8cc7\u6e90 movie \u6559\u5b78\u5f71\u7247 sports_esports \u4e92\u52d5\u904a\u6232 link \u8cc7\u8a0a\u9023\u7d50 search_off \u6c92\u6709\u7b26\u5408\u689d\u4ef6\u7684\u8cc7\u6e90 \u8acb\u5207\u63db\u7be9\u9078\u689d\u4ef6\uff08\u4f8b\u5982\u300c\u5168\u90e8\u8cc7\u6e90\u300d\uff09\u6216\u78ba\u8a8d\u8cc7\u6599\u662f\u5426\u5b8c\u6574\u3002 \u986f\u793a\u66f4\u591a\u8cc7\u6e90 expand_more<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-no-title","meta":{"footnotes":""},"class_list":["post-1058","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/seedcenter.tw\/care.org\/index.php?rest_route=\/wp\/v2\/pages\/1058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/seedcenter.tw\/care.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/seedcenter.tw\/care.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/seedcenter.tw\/care.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/seedcenter.tw\/care.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1058"}],"version-history":[{"count":7,"href":"https:\/\/seedcenter.tw\/care.org\/index.php?rest_route=\/wp\/v2\/pages\/1058\/revisions"}],"predecessor-version":[{"id":1116,"href":"https:\/\/seedcenter.tw\/care.org\/index.php?rest_route=\/wp\/v2\/pages\/1058\/revisions\/1116"}],"wp:attachment":[{"href":"https:\/\/seedcenter.tw\/care.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}