<?php
require 'config.php';

// ═══════════════════════════════════════════════════════════
// UC / 夸克浏览器特判（iOS 版 UC、夸克会拦截页面内 fetch/XHR 探测）
// 识别后跳过浏览器端二次确认：按钮点击 → ?v=token → 服务端轮换选
// 目标域名直接 302 跳转。调试：URL 加 &uc=1 可强制走该通道。
// ═══════════════════════════════════════════════════════════
$ua       = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
$force_uc = isset($_GET['uc']);
$is_uc    = $force_uc || (stripos($ua, 'UCBrowser') !== false) || (stripos($ua, 'Quark') !== false);

function make_token_val($time, $salt) {
    return hash_hmac('sha256', $time . '|' . $salt, SECRET_KEY) . '.' . dechex($time);
}

function verify_token($t) {
    $parts = explode('.', $t);
    if (count($parts) !== 2) return false;
    list($hmac, $hex_time) = $parts;
    $req_time = hexdec($hex_time);
    if (time() - $req_time > TOKEN_TTL) return false;
    $salts = unserialize(TOKEN_SALTS);
    foreach ($salts as $salt) {
        $expected = hash_hmac('sha256', $req_time . '|' . $salt, SECRET_KEY);
        if (hash_equals($expected, $hmac)) return true;
    }
    return false;
}

// ═══════════════════════════════════════════════════════════
// 跳转前「二次确认」核心脚本（用户浏览器视角，不是服务器视角）
// 规则：对目标域名做 2 次独立可达性探测（走用户本机 DNS/TCP/TLS/HTTP 全链路，
//       等价于用户自己打开），2 次都成功才算「活」，才允许跳转；
//       任何一次不通过都拦截并提示，绝不允许自动跳转到用户打不开的域名。
// ═══════════════════════════════════════════════════════════
$VERIFY_JS = <<<'VERIFYJS'
window.Verify = (function(){
  'use strict';

  function hostOf(url){
    try { return new URL(url).host; }
    catch (e) { return String(url).replace(/^https?:\/\//i,'').split('/')[0].split('?')[0]; }
  }

  // ── 单次可达性探测（用户本机视角：DNS / TCP / TLS / HTTP 全链路） ──
  function probe(url, timeout){
    return new Promise(function(resolve){
      var settled = false;
      var timer = setTimeout(function(){ if (!settled) { settled = true; resolve(false); } }, timeout);
      function ok(){ if (!settled) { settled = true; clearTimeout(timer); resolve(true); } }
      function fail(){ if (!settled) { settled = true; clearTimeout(timer); resolve(false); } }
      try {
        if (typeof fetch === 'function') {
          fetch(url, { mode:'no-cors', cache:'no-store', redirect:'follow' }).then(ok, fail);
        } else {
          // 老浏览器兜底：用图片加载探测
          var img = new Image();
          img.onload = ok;
          img.onerror = fail;
          img.src = url + (url.indexOf('?') >= 0 ? '&' : '?') + '_ck=' + Date.now();
        }
      } catch (e) { fail(); }
    });
  }

  // ── 站点真实性校验（服务器视角状态码，走同源 check.php） ──
  // no-cors fetch 读不到状态码，会把 403/404/502/停放页等误判为活；
  // 这里要求服务器确认域名返回 200-399 才放行。服务器自身连不上（conn_err）
  // 时无法给出结论，为不误杀，按「未知=放行」处理（仍受用户视角探测约束）。
  var _srvCache = {};
  function serverOk(url){
    var now = Date.now();
    var c = _srvCache[url];
    if (c && now - c.ts < 60000) return Promise.resolve(c.ok);
    var ctrl = (typeof AbortController === 'function') ? new AbortController() : null;
    var timer = ctrl ? setTimeout(function(){ ctrl.abort(); }, 7000) : null;
    var p = fetch('check.php?u=' + encodeURIComponent(url), {
        cache: 'no-store',
        signal: ctrl ? ctrl.signal : undefined
      })
      .then(function(r){ return r.json(); })
      .then(function(j){
        var unknown = !!(j && j.err && j.err.indexOf('conn_err') === 0);
        var ok = !!(j && (j.ok === true || unknown));
        _srvCache[url] = { ts: Date.now(), ok: ok };
        return ok;
      })
      .catch(function(){ _srvCache[url] = { ts: Date.now(), ok: true }; return true; });
    if (timer) {
      p = p.then(function(v){ clearTimeout(timer); return v; }, function(e){ clearTimeout(timer); throw e; });
    }
    return p;
  }

  // ── 二次确认：用户连通（fetch） + 站点真实性（check.php 状态码），2 项都通过才算「活」 ──
  function confirm2(url, timeout){
    return Promise.all([probe(url, timeout), serverOk(url)]).then(function(rs){
      return rs[0] && rs[1];
    });
  }

  // ── UI ──
  var tipEl = null;
  var busy = false;

  function ensureTip(){
    if (tipEl) return tipEl;
    tipEl = document.createElement('div');
    tipEl.id = 'wb-tip';
    document.body.appendChild(tipEl);
    return tipEl;
  }
  function showTip(msg, kind){
    // 首页：检测信息直接显示在线路提示行（前面带转圈图标）
    var row = document.getElementById('lineTipText');
    if (row) {
      row.textContent = msg;
      var sp = document.getElementById('lineTipSpinner');
      if (sp) sp.classList.toggle('hidden', kind === 'ok' || kind === 'warn');
      var tipRow = row.closest ? row.closest('.line-tip') : row.parentNode;
      if (tipRow) tipRow.classList.toggle('warn', kind === 'warn');
      return;
    }
    // 兜底（如守卫页）：浮动提示
    var el = ensureTip();
    el.textContent = msg;
    el.className = 'wb-tip ' + (kind || 'info');
    el.style.display = 'block';
  }

  function setBusy(state, btn){
    busy = state;
    var btns = document.querySelectorAll('.line-btn');
    for (var i = 0; i < btns.length; i++) btns[i].classList.toggle('disabled', state);
    if (btn) btn.classList.toggle('active-probing', state);
  }

  // ── 主流程：并行探测，发现可用域名立即做第 2 次确认（不等其他慢域名）→ 通过才跳转 ──
  function go(opts){
    if (busy) return;
    var urls = opts.urls || [];
    var t = opts.timeout || 3500;
    setBusy(true, opts.btn || null);
    showTip('正在检测可用线路…');

    // 候选队列：每个域名第 1 次探测成功即入队，立即进入第 2 次确认，不必等全部探测完
    return new Promise(function(resolve){
      var pending = urls.length;
      var queue = [];
      var inConfirm = false;
      var finished = false;

      function tryConfirm(){
        if (finished || inConfirm) return;
        if (!queue.length) {
          // 探测全部结束且无候选 → 无可用线路
          if (pending <= 0) { finished = true; resolve({ url: null }); }
          return;
        }
        inConfirm = true;
        var u = queue.shift();
        showTip('正在检测可用线路…');
        confirm2(u, t).then(function(ok){
          inConfirm = false;
          if (ok) { finished = true; resolve({ url: u }); }
          else tryConfirm(); // 第 2 次确认失败：换下一个候选
        });
      }

      if (!pending) { resolve({ url: null }); return; }
      urls.forEach(function(u){
        probe(u, t).then(function(ok){
          pending--;
          if (ok) { queue.push(u); tryConfirm(); }
          else if (pending <= 0) { tryConfirm(); }
        });
      });
    }).then(function(out){
      setBusy(false);
      if (out.url) {
        showTip('✅ 检测通过，正在进入 ' + hostOf(out.url) + ' …', 'ok');
        setTimeout(function(){
          location.href = '?v=' + encodeURIComponent(opts.token) + '&to=' + encodeURIComponent(out.url);
        }, 150);
      } else {
        // 无可用线路：状态行显示提示，按钮已恢复可点击，可再次点击重试
        showTip('没有可用线路！', 'warn');
      }
    });
  }

  return { go: go };
})();
VERIFYJS;

function render_guard_page($token, $urls) {
    global $VERIFY_JS;
    header('Content-Type: text/html; charset=utf-8');
    $t = json_encode($token);
    $u = json_encode($urls);
    echo '<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>线路检测中</title>
<style>
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;background:#f4f6f9;color:#2c3e50;}
.guard-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px;}
.guard-card{background:#fff;border-radius:14px;padding:36px 42px;text-align:center;box-shadow:0 6px 24px rgba(0,0,0,.06);max-width:460px;width:100%;}
.guard-spin{width:34px;height:34px;border:4px solid #d6e4f5;border-top-color:#3498db;border-radius:50%;margin:0 auto 18px;animation:wb-rot .8s linear infinite;}
@keyframes wb-rot{to{transform:rotate(360deg);}}
.guard-title{font-size:16px;font-weight:700;}
.guard-sub{margin-top:8px;font-size:13px;color:#7f8c8d;line-height:1.8;}
</style>
</head>
<body>
<div class="guard-wrap"><div class="guard-card">
<div class="guard-spin"></div>
<div class="guard-title">正在检测线路连通性…</div>
<div class="guard-sub">将从您当前的网络对目标域名进行 2 次连通确认，<br>确认可访问后才进入目标站点。</div>
</div></div>
<script>' . $VERIFY_JS . '</script>
<script>Verify.go({ token: ' . $t . ', urls: ' . $u . ' });</script>
</body>
</html>';
}

// ── 验证接口（?v=token） ──
if (isset($_GET['v'])) {
    $token = $_GET['v'];
    if (verify_token($token)) {
        setcookie('_verified', '1', time() + COOKIE_TTL, '/', '', false, true);
        $urls = unserialize(TARGET_URLS);
        // 客户端已通过「用户视角二次确认」后携带 to 到达 → 只跳转该已确认域名
        if (!empty($_GET['to'])) {
            $to = $_GET['to'];
            foreach ($urls as $u) {
                if (strpos($u, $to) !== false) {
                    header('Location: ' . $u);
                    exit;
                }
            }
        }
        // 未携带 to / to 不匹配 → 不做服务器视角盲跳，输出守卫页，由用户浏览器二次确认后再跳
        // UC/夸克：浏览器端探测会被拦截，改为服务端轮换选目标域名直接 302
        if ($is_uc) {
            $rotFile = __DIR__ . '/.uc_rot';
            $cnt = (int) @file_get_contents($rotFile);
            if ($cnt < 0) $cnt = 0;
            $pick = $urls[$cnt % count($urls)];
            @file_put_contents($rotFile, (string) ($cnt + 1), LOCK_EX);
            header('Location: ' . $pick);
            exit;
        }
        render_guard_page($token, $urls);
        exit;
    }
    http_response_code(403);
    exit;
}

// 线路令牌
$salts = unserialize(TOKEN_SALTS);
$now = time();
$tokens = [
    'yd' => make_token_val($now, 'yd'),
    'lt' => make_token_val($now, 'lt'),
    'dx' => make_token_val($now, 'dx'),
];

// 文章数据
$articles = [
  ['title' => '人生没有白走的路，每一步都算数', 'date' => '2024-06-15', 'views' => 2341, 'comments' => 47, 'cat' => '励志', 'tags' => ['成长', '坚持', '人生'],
   'excerpt' => '人生就像一场长途跋涉，有时候我们会迷茫、会疲惫、会怀疑自己。但请相信，每一段经历都是财富，每一次跌倒都是成长。',
   'content' => '<p>人生就像一场没有地图的远行。我们总是在出发之前期待一帆风顺，却在半路发现遍地荆棘。但回头看看，那些曾让你崩溃的弯路，如今都成了你最坚实的铠甲。</p><p>二十岁的时候，你为一场考试焦虑得彻夜难眠；二十五岁的时候，你为一段感情哭得撕心裂肺；三十岁的时候，你为一份工作愁眉不展。多年以后再看，那些你以为过不去的坎，都成了云淡风轻的往事。</p><p>人生最大的智慧，不是避免走弯路，而是明白每一条弯路都有它存在的意义。没有那些跌跌撞撞，你不会知道平坦的可贵；没有那些彻夜难眠，你不会懂得安宁的珍贵。</p><p><strong>请相信，你所经历的一切，都在悄悄塑造着未来的你。</strong>你今天的付出，明天的收获会替你记得；你今天的坚持，未来的你会由衷感谢。所以，别怕，继续走，每一步都算数。</p>'],
  ['title' => '心态决定状态：学会与自己和解', 'date' => '2024-06-12', 'views' => 1876, 'comments' => 32, 'cat' => '感悟', 'tags' => ['心态', '和解', '自我'],
   'excerpt' => '我们常常对自己太过苛刻，总觉得自己不够好。但其实，学会接纳不完美的自己，才是真正的强大。',
   'content' => '<p>你是不是也常常这样：照镜子时，只看到自己的缺点；完成一件事时，只注意到自己的不足；和别人比较时，总是觉得自己差了一大截。</p><p>我们从小被教育要不断进步，却很少有人告诉我们：<strong>接纳自己比超越自己更难，也更重要。</strong></p><p>与自己和解，不是放弃努力，而是承认自己并不完美。你可以有情绪，可以有失误，可以偶尔不想努力。真正的强大，是接纳自己的脆弱之后，依然选择微笑面对生活。</p><p>从今天开始，对自己好一点。允许自己休息，允许自己失败，允许自己不如别人。你会发现，当你不再和自己较劲，整个世界都变得温柔了。</p>'],
  ['title' => '三十而立，立的不是年龄是心态', 'date' => '2024-06-08', 'views' => 3120, 'comments' => 58, 'cat' => '人生', 'tags' => ['三十岁', '成熟', '责任'],
   'excerpt' => '三十岁意味着什么？不是焦虑，不是妥协，而是一种从容。你开始明白什么是真正重要的，学会了取舍。',
   'content' => '<p>三十岁是一个微妙的分水岭。二十多岁时，你觉得三十岁好遥远，仿佛到了那个年纪就应该什么都有了。可真正到了三十岁，你发现世界依然充满不确定性。</p><p>但三十岁的你，已经和二十岁不一样了。你不再为一句话辗转反侧，不再为一点小事愤怒不已。你开始学会沉默，学会隐忍，学会在独处中获得力量。</p><p><strong>三十而立，立的是一份从容。</strong>你知道自己是谁，要去哪里，不需要谁的认可。年龄只是数字，内心的笃定才是真正的成熟。</p>'],
  ['title' => '生活不易，但请记得温柔待己', 'date' => '2024-06-05', 'views' => 4512, 'comments' => 73, 'cat' => '情感', 'tags' => ['温柔', '生活', '自爱'],
   'excerpt' => '在这个快节奏的时代，我们习惯了对自己说"再坚持一下"。但别忘了，你也需要被温柔以待。',
   'content' => '<p>你有没有发现，你对待别人的方式，往往比对待自己温柔多了。朋友迟到你会说没关系，但自己迟到五分钟就自责半天。</p><p>我们总把善意留给世界，却忘了留一份给自己。你不是机器，不需要永远高效运转。你可以累，可以倦，可以什么也不做地发呆一下午。</p><p><strong>今晚，泡一杯热茶，听一首喜欢的歌，对自己轻轻说一声：辛苦了，你已经做得很好了。</strong></p>'],
  ['title' => '慢下来，才能看到沿途的风景', 'date' => '2024-06-01', 'views' => 3890, 'comments' => 65, 'cat' => '感悟', 'tags' => ['慢生活', '风景', '当下'],
   'excerpt' => '我们总是急着赶路，急着到达目的地，却忘了欣赏沿途的风景。幸福往往藏在那些被忽略的瞬间里。',
   'content' => '<p>这是一个凡事都讲究"快"的时代。我们活得越来越快，却越来越不快乐。</p><p>你有没有试过，在一个阳光正好的午后，什么都不做，就坐在窗前看云？那种静谧的美好，是刷一百条短视频也换不来的。</p><p><strong>幸福不在终点，而在路上。</strong>不要只顾着低头赶路，抬起头来看看吧。路边的那朵花，枝头的那片叶，街角的那只猫，都是生活赠予你的礼物。慢下来，你才能听见自己的心跳。</p>'],
  ['title' => '所有遗憾，都是未来惊喜的铺垫', 'date' => '2024-05-28', 'views' => 2058, 'comments' => 41, 'cat' => '励志', 'tags' => ['遗憾', '希望', '未来'],
   'excerpt' => '错过了末班车，也许是为了让你遇见下一站的星空。每一次遗憾，都是命运在为你准备更大的惊喜。',
   'content' => '<p>你有没有过这样的经历：错过了一趟车，烦躁不已，后来才知道那辆车在路上出了事故；失恋了痛不欲生，几年后回头看，庆幸当初没有将就。</p><p>命运就是这样，它以你暂时无法理解的方式，保护着你。</p><p><strong>每一次遗憾，都是一次温柔的转折。</strong>那道关上的门背后，有一扇更大的窗正在为你打开。你现在经历的所有不如意，都在为未来的惊喜做铺垫。</p>'],
  ['title' => '独处是一种能力，更是一种享受', 'date' => '2024-05-25', 'views' => 1520, 'comments' => 28, 'cat' => '感悟', 'tags' => ['独处', '内心', '安静'],
   'excerpt' => '害怕独处的人，往往也害怕面对自己。但其实，独处是最好的增值期。热闹是别人的，安静才是自己的。',
   'content' => '<p>很多人害怕独处，把独处等同于孤独，于是拼命社交。但其实，独处和孤独是两回事。孤独是你想融入却融不进去；独处是你主动选择和自己待在一起。</p><p><strong>能享受独处的人，内心往往更强大。</strong>因为他们不需要依赖外界来确认自己的存在。一个人看书、写字、做饭、散步——这些看似平淡的时光，恰恰是灵魂最好的养分。</p>'],
  ['title' => '最好的关系，是彼此舒服', 'date' => '2024-05-20', 'views' => 2760, 'comments' => 52, 'cat' => '情感', 'tags' => ['关系', '舒服', '相处'],
   'excerpt' => '真正好的关系不需要刻意维系。相处不累，久处不厌，这才是人与人之间最舒服的状态。',
   'content' => '<p>什么样的关系才是最好的？不是轰轰烈烈的激情，不是时时刻刻的腻在一起，而是四个字：相处舒服。</p><p>和舒服的人在一起，你不用费尽心思找话题，沉默也不尴尬；不用刻意表现自己，做真实的自己就好。这种关系，像一杯温水，不烫不凉，却能暖到心底。</p><p>如果一段关系让你觉得累、觉得焦虑、觉得需要不断讨好，那它可能不是对的关系。真正好的关系，是自然而然的。</p>'],
  ['title' => '努力的意义：不是为了感动谁', 'date' => '2024-05-18', 'views' => 1890, 'comments' => 34, 'cat' => '励志', 'tags' => ['努力', '目标', '自我'],
   'excerpt' => '努力不是为了证明给谁看。努力是为了当有一天你回头看时，可以坦然地说：我尽力了。',
   'content' => '<p>努力的意义是什么？有人说是为了出人头地，有人说是为了给父母争光。但我认为，努力的意义从不是为了感动谁。</p><p>不是为了发一条凌晨加班的朋友圈博取同情，不是为了在同学会上扬眉吐气。努力是为了你自己。为了多年以后，当你回头看时，可以无愧于心地说：我尽力了。那个曾经拼尽全力的自己，值得所有的掌声。</p>'],
  ['title' => '放下手机，去感受真实的世界', 'date' => '2024-05-15', 'views' => 3340, 'comments' => 89, 'cat' => '生活', 'tags' => ['手机', '真实', '体验'],
   'excerpt' => '我们每天花数小时盯着屏幕，刷着别人的生活，却忘了过好自己的日子。真实的世界远比屏幕精彩。',
   'content' => '<p>你有没有算过，一天有多少时间在看手机？我们活在一个六寸的屏幕里，看到的都是别人精心剪辑过的生活。</p><p>但别人的生活再精彩，也是别人的。放下手机的那一刻，你才会发现：窗外的夕阳真的很美，妈妈做的饭真的很香，孩子的笑声真的很动听。</p><p><strong>今天，试着放下手机一小时。你会发现，真实的世界，远比屏幕精彩得多。</strong></p>'],
  ['title' => '你若盛开，蝴蝶自来', 'date' => '2024-05-10', 'views' => 1430, 'comments' => 22, 'cat' => '人生', 'tags' => ['自我提升', '吸引力', '成长'],
   'excerpt' => '不要急着去追逐，先让自己变得更好。当你活成了一束光，美好的人和事会自然而然地被你吸引而来。',
   'content' => '<p>有一句话说得好：<strong>花若盛开，蝴蝶自来；你若精彩，天自安排。</strong></p><p>很多人把时间花在追逐上——追逐机会、追逐人脉。却忘了最值得投资的，其实是你自己。当你足够优秀，机会会主动来找你；当你足够温暖，对的人会自然靠近。</p><p>所以，与其焦虑为什么还没有遇到伯乐，不如静下心来打磨自己。读书、锻炼、学一门新技能。当你把自己变成一道光，黑暗自然会退散。</p>'],
  ['title' => '感恩生命中的每一次相遇', 'date' => '2024-05-05', 'views' => 2150, 'comments' => 44, 'cat' => '情感', 'tags' => ['感恩', '相遇', '缘分'],
   'excerpt' => '人与人之间的相遇，都是久别重逢。每一段相遇都值得感恩。感谢你来过，让我变得更好。',
   'content' => '<p>人生是一趟列车，有人上车，有人下车，没有人能陪你从起点坐到终点。但每一个出现在你生命中的人，都不是偶然。</p><p>有些人教会你爱，有些人教会你坚强，有些人教会你放手。感谢那个曾经陪伴你的人，感谢那个曾经伤害你的人，感谢那个还在你身边的人。</p><p><strong>每一段相遇，都值得被温柔铭记。</strong></p>'],
  ['title' => '别让焦虑偷走你的快乐', 'date' => '2024-05-02', 'views' => 1980, 'comments' => 37, 'cat' => '感悟', 'tags' => ['焦虑', '快乐', '心态'],
   'excerpt' => '焦虑是现代人的通病。但仔细想想，你焦虑的事情，有多少真正发生了？大多数恐惧都只存在于想象中。',
   'content' => '<p>现代人好像什么都有了，唯独少了快乐。焦虑像一张无形的网，把我们牢牢捆住。焦虑工作、焦虑收入、焦虑年龄、焦虑未来。</p><p>但你知道吗？你担心的事情，90% 都不会发生。剩下的 10%，你也有能力应对。<strong>焦虑解决不了任何问题，只会偷走你当下的快乐。</strong></p><p>试着把注意力拉回此时此刻。此刻你呼吸平稳，此刻你还健康，此刻一切都还好。活在当下，才是对抗焦虑最好的方式。</p>'],
  ['title' => '做一个温暖的人，但不必讨好所有人', 'date' => '2024-04-28', 'views' => 2560, 'comments' => 51, 'cat' => '情感', 'tags' => ['温暖', '讨好型人格', '边界'],
   'excerpt' => '善良是一种选择，但讨好不是。你可以温暖如春，但不必委屈自己去迎合每一个人。',
   'content' => '<p>你是不是一个"讨好型人格"？不好意思拒绝别人，怕别人不高兴；明明很忙却帮别人做额外的事；别人一个不满的眼神，你就忐忑一整天。</p><p>但讨好别人，往往换不来尊重，只会换来更多索取。<strong>真正的关系不需要讨好，真正的朋友不需要你委屈自己。</strong>做一个温暖的人，但请守住自己的边界。</p>'],
  ['title' => '你有多久没有好好睡觉了？', 'date' => '2024-04-25', 'views' => 3120, 'comments' => 68, 'cat' => '生活', 'tags' => ['睡眠', '健康', '休息'],
   'excerpt' => '熬夜成了现代人的标配。但你透支的每一分钟睡眠，身体都会记得。好好睡觉，就是爱自己最好的方式。',
   'content' => '<p>深夜十二点，你还在刷手机；凌晨一点，你还在追剧；凌晨两点，你想睡却睡不着了。第二天闹钟响起，你拖着疲惫的身躯开始新的一天。</p><p>你有多久没有在十点前躺下，安安稳稳地睡足八个小时了？<strong>睡眠不是浪费时间，而是给身体充电。</strong>透支的觉，迟早要还的。从今晚开始，试试放下手机，早点睡吧。</p>'],
  ['title' => '真正的成熟：不轻易评判他人', 'date' => '2024-04-22', 'views' => 1640, 'comments' => 29, 'cat' => '人生', 'tags' => ['成熟', '尊重', '包容'],
   'excerpt' => '年轻时总喜欢对别人指指点点。慢慢才明白，每个人都有自己的不容易。不轻易评判，是成年人最大的修养。',
   'content' => '<p>你有没有发现，越年轻的时候，越喜欢对别人评头论足。这个人太懒了，那个人眼光太差，这个人格局太小。但当你看过更多的人，经历更多的事，你会慢慢学会闭嘴。</p><p>因为你开始明白，<strong>每个人都有自己的困境和不得已。</strong>那个看起来懒散的人，可能正在与抑郁斗争；那个斤斤计较的人，可能正在为生计发愁。不轻易评判，是一种慈悲。</p>'],
  ['title' => '允许一切发生，允许一切如其所是', 'date' => '2024-04-20', 'views' => 1450, 'comments' => 25, 'cat' => '感悟', 'tags' => ['接纳', '顺其自然', '心境'],
   'excerpt' => '当我们不再试图控制一切，允许事情按照它本来的样子发生，内心反而获得了前所未有的平静。',
   'content' => '<p>人生大部分的痛苦，都来源于"想要控制"。想要控制别人的想法，想要控制事情的走向，想要控制生活的节奏。但世界不会按照你的剧本运转。</p><p>当你学会放下控制欲，<strong>允许一切发生，允许一切如其所是</strong>，你会发现内心变得无比轻盈。河水自有它的流向，花朵自有它的花期。你只需要做好自己，其余的，交给时间。</p>'],
  ['title' => '父母在，人生尚有来处', 'date' => '2024-04-18', 'views' => 4320, 'comments' => 96, 'cat' => '情感', 'tags' => ['亲情', '父母', '珍惜'],
   'excerpt' => '父母在，人生尚有来处；父母去，人生只剩归途。趁还来得及，多陪陪他们吧。',
   'content' => '<p>有一句话说得好：父母在，人生尚有来处；父母去，人生只剩归途。小时候觉得家是港湾，长大了才发现，有父母在的地方才是家。</p><p>上次回家是什么时候？上次给爸妈打电话是什么时候？你有多久没认真听他们唠叨了？<strong>世间最遗憾的事，不是来不及说再见，而是来得及的时候没有好好说。</strong>趁子欲养而亲还在，多回去看看吧。</p>'],
  ['title' => '人生需要一些"无用"的时光', 'date' => '2024-04-15', 'views' => 1780, 'comments' => 33, 'cat' => '生活', 'tags' => ['闲适', '无用之用', '放松'],
   'excerpt' => '我们习惯了把每分每秒都安排得满满当当。但生命中那些最好的时光，往往都是"无用"的。',
   'content' => '<p>我们生活在一个追求效率的时代。每做一件事都要问"有什么用"。读书要读有用的，学习要学能赚钱的，连休息都带着负罪感。</p><p>但生命中那些最好的时光，往往都是"无用"的。一个无所事事的午后，一次漫无目的的散步，一场毫无意义的聊天。<strong>这些"无用"的时刻，恰恰是生活最本真的样子。</strong>偶尔让自己"浪费"一下时间，你会发现内心前所未有地安宁。</p>'],
  ['title' => '善良要带点锋芒', 'date' => '2024-04-12', 'views' => 2890, 'comments' => 54, 'cat' => '人生', 'tags' => ['善良', '底线', '原则'],
   'excerpt' => '没有底线的善良是一种软弱。真正的善良，是温柔但有力量，是可以拒绝的，是有原则的。',
   'content' => '<p>我们从小被教育要善良。但没有人告诉我们，善良也是需要底线的。一味地退让，换来的往往不是感激，而是得寸进尺。</p><p><strong>真正的善良，是带刺的。</strong>我可以对你好，但不会无条件纵容你；我可以帮忙，但不会牺牲自己成全你。善良如果不带锋芒，就成了软弱。请把你的善意，留给值得的人。</p>'],
  ['title' => '今天的不开心就止于此吧', 'date' => '2024-04-10', 'views' => 3670, 'comments' => 72, 'cat' => '励志', 'tags' => ['情绪', '放下', '重生'],
   'excerpt' => '不管今天经历了什么，都让它过去。明天又是崭新的一天，你也是崭新的你。',
   'content' => '<p>今天你可能被老板批评了，可能跟伴侣吵架了，可能错过了一趟重要的班车。今天的一切都不太顺利，你已经尽力了。</p><p><strong>今天的不开心，就止于此吧。</strong>关上灯，躺在床上，告诉自己：这一天已经结束了。那些糟糕的情绪，和这一天的日历一起翻过去。明天太阳照常升起，而你，也是崭新的你。</p>'],
  ['title' => '真正的自由，是做自己的勇气', 'date' => '2024-04-08', 'views' => 2010, 'comments' => 38, 'cat' => '人生', 'tags' => ['自由', '勇气', '自我'],
   'excerpt' => '我们以为自由是财务自由、时间自由。但真正的自由，是有勇气做自己，不在意别人的目光。',
   'content' => '<p>我们常常把自由挂在嘴边：财富自由、时间自由、行动自由。但很少人提到另一种自由——做自己的自由。</p><p>你敢不敢穿自己想穿的衣服？敢不敢追求自己真正喜欢的事？敢不敢在人群中表达不同的观点？<strong>真正的自由不是想做什么就做什么，而是不想做什么就可以不做什么。</strong>有勇气做自己的人，才是真正的自由人。</p>'],
  ['title' => '简单一点，快乐就多一点', 'date' => '2024-04-05', 'views' => 2230, 'comments' => 42, 'cat' => '感悟', 'tags' => ['简单', '快乐', '断舍离'],
   'excerpt' => '我们总是把生活搞得太复杂。复杂的人际关系、复杂的目标、复杂的烦恼。试着简单一点，快乐会多很多。',
   'content' => '<p>你有没有发现，小时候明明什么都没有，却每天都很快乐。一个沙堆能玩一整天，一根冰棍能甜一下午。现在什么都有了，反而越来越难开心。</p><p>因为我们把生活搞得太复杂了。背负了太多人的期待，设定了太高的目标，塞满了太多的欲望。<strong>试着做减法吧。</strong>少买一件衣服，少加一个群，少接一个任务。简单一点，快乐就多一点。</p>'],
  ['title' => '坚持是一件很酷的事', 'date' => '2024-04-02', 'views' => 1560, 'comments' => 27, 'cat' => '励志', 'tags' => ['坚持', '习惯', '自律'],
   'excerpt' => '拉开人与人差距的，不是天赋，不是运气，而是日复一日的坚持。哪怕每天只进步一点点，时间会给你答案。',
   'content' => '<p>很多人问我，怎样才能变得更好？我的答案很简单：<strong>找到一件值得做的事，然后日复一日地坚持。</strong>不是三天打渔两天晒网，而是哪怕再忙再累，也每天抽出十分钟。</p><p>每天读十页书，一年就是十多本；每天写三百字，一年就是一本书；每天运动二十分钟，一年后你会感谢现在的自己。坚持，就是最朴素也最强大的力量。</p>'],
  ['title' => '不要用别人的错误惩罚自己', 'date' => '2024-03-30', 'views' => 1870, 'comments' => 35, 'cat' => '感悟', 'tags' => ['情绪', '释怀', '放下'],
   'excerpt' => '别人伤害了你，你可以难过，但不要一直难过。用别人的错误来惩罚自己，是最不值得的事情。',
   'content' => '<p>你被别人伤害了，你很生气、很委屈，这很正常。但如果几个月、甚至几年过去了，你还在为同一件事耿耿于怀，那你就是在用别人的错误惩罚自己。</p><p>那个人可能早就忘了，正开开心心过自己的日子。而你却把自己困在过去的伤害里，一遍遍地重温痛苦。<strong>释怀不是原谅别人，而是放过自己。</strong>你的快乐，不值得为任何人的错误买单。</p>'],
  ['title' => '你的身体比你想象的更爱你', 'date' => '2024-03-28', 'views' => 2780, 'comments' => 56, 'cat' => '生活', 'tags' => ['健康', '身体', '自爱'],
   'excerpt' => '当你熬夜时，你的心脏在努力帮你供血；当你受伤时，你的细胞在拼命自我修复。你的身体一直在默默爱你。',
   'content' => '<p>你熬夜追剧的时候，你的肝脏在默默排毒；你暴饮暴食的时候，你的胃在艰难消化；你焦虑失眠的时候，你的心脏仍然忠诚地跳动着。</p><p><strong>你的身体是全世界最爱你的人。</strong>它从不抱怨，从不罢工，用尽全力维持着你的生命。答应我，从今天开始，好好对待它。早睡、运动、健康饮食，不辜负它每天的守护。</p>'],
  ['title' => '人到中年，学会给自己松绑', 'date' => '2024-03-25', 'views' => 3210, 'comments' => 63, 'cat' => '人生', 'tags' => ['中年', '压力', '减负'],
   'excerpt' => '人到中年，上有老下有小，工作有压力生活有重担。但别忘了，绷得太紧的弦容易断。学会偶尔给自己松松绑。',
   'content' => '<p>中年人的世界里，没有"容易"二字。房贷、车贷、孩子的学费、父母的医药费，每一项都像一座小山压在肩上。但你知道吗，绷得太紧的弦，最容易断。</p><p><strong>偶尔也给自己放个假吧。</strong>哪怕只是一个下午，放下所有的责任，做一件纯粹让自己开心的事。你不是超人，你也会累。给自己松松绑，才能走更远的路。</p>'],
  ['title' => '你配得上这世间所有的美好', 'date' => '2024-03-22', 'views' => 2340, 'comments' => 48, 'cat' => '励志', 'tags' => ['自信', '配得感', '美好'],
   'excerpt' => '很多人内心深处都有一种"不配得感"。觉得自己不够好、不值得被爱、配不上好东西。但我想告诉你：你值得。',
   'content' => '<p>你是不是也常常这样：别人对你好，你受宠若惊；得到一份好工作，你觉得自己运气好；有人喜欢上你，你怀疑自己哪里值得。这种"不配得感"，像一堵无形的墙，把你和幸福隔开。</p><p><strong>你配得上这世间所有的美好。</strong>你不用做到一百分才值得被爱。你现在的样子，就已经足够了。从今天开始，练习接受别人的善意，练习相信自己的价值。</p>'],
  ['title' => '风雨人生，自己撑伞', 'date' => '2024-03-20', 'views' => 1680, 'comments' => 31, 'cat' => '励志', 'tags' => ['独立', '坚强', '成长'],
   'excerpt' => '没有人能一直为你遮风挡雨。总有一天你会明白，最可靠的伞，是自己手中的那一把。',
   'content' => '<p>小时候，父母是我们的伞；工作后，公司是我们的伞；恋爱时，另一半是我们的伞。但总有一天你会发现，没有一把伞能替你遮一辈子雨。</p><p><strong>风雨人生，终究要学会自己撑伞。</strong>这不是悲观，而是成长。当你学会靠自己，你就不再害怕任何风雨。因为你清楚地知道，即使全世界都离开，你还有自己。</p>'],
  ['title' => '安静，是一个人的繁华', 'date' => '2024-03-18', 'views' => 1420, 'comments' => 24, 'cat' => '感悟', 'tags' => ['安静', '内心', '丰富'],
   'excerpt' => '真正的丰富不是喧嚣，而是安静的内心世界。一个人安静的时候，才是离自己最近的时候。',
   'content' => '<p>我们常常害怕安静。一安静下来，就觉得空虚，就想打开手机、打开电视、找人聊天。但真正的丰富，恰恰藏在安静里。</p><p>安静的时候，你才能听见内心的声音。安静的时候，你才能看清楚自己真正想要什么。<strong>安静，是一个人的繁华。</strong>不必害怕独处的安静，那是你与自己的对话，是灵魂最好的休憩。</p>'],
  ['title' => '把期待降低，把依赖变少', 'date' => '2024-03-15', 'views' => 1950, 'comments' => 36, 'cat' => '感悟', 'tags' => ['期待', '独立', '幸福'],
   'excerpt' => '很多失望都来源于过高的期待。对别人、对生活、对自己，期待少一点，惊喜就会多一点。',
   'content' => '<p>你有没有发现，让你失望的往往不是别人，而是你自己的期待。期待伴侣记住每一个纪念日，期待朋友随叫随到，期待生活一帆风顺。当这些期待落空，受伤的只有你。</p><p><strong>试着把期待降低一点。</strong>对别人宽容一点，对自己温柔一点。当你不再依赖外界给你幸福，幸福反而会不期而至。期望越低，惊喜越多。</p>'],
  ['title' => '时间是最好的良药', 'date' => '2024-03-12', 'views' => 2870, 'comments' => 55, 'cat' => '情感', 'tags' => ['时间', '治愈', '放下'],
   'excerpt' => '那些你以为永远过不去的坎，那些你以为一辈子忘不掉的人，终将在时间里慢慢淡去。时间不说话，却回答了所有问题。',
   'content' => '<p>你有没有过这样的经历？失恋时觉得天都塌了，以为自己再也走不出来。但过了一年半载再回头看，那段撕心裂肺的过去，已经变得云淡风轻。</p><p><strong>时间不说话，却比任何语言都有力量。</strong>它不会帮你解决问题，但它会让你渐渐不在意那些问题。给时间一点时间，它会还你一个释怀的答案。</p>'],
  ['title' => '取悦自己，是终身浪漫的开始', 'date' => '2024-03-10', 'views' => 3560, 'comments' => 71, 'cat' => '生活', 'tags' => ['热爱', '生活', '取悦'],
   'excerpt' => '我们花了太多时间去取悦别人，却忘了最该取悦的人是自己。对自己好一点，是终身浪漫的开始。',
   'content' => '<p>你有多久没有纯粹为自己做一件事了？不是为了让别人满意，不是为了迎合什么标准，只是单纯地让自己开心。</p><p>买一束花放在桌上，去一家想了很久的餐厅，看一场一个人也能享受的电影。<strong>取悦自己，不是自私，而是自爱。</strong>当你学会让自己开心，你散发出的光芒，才能照亮身边的人。</p>'],
  ['title' => '活在当下，是最顶级的智慧', 'date' => '2024-03-08', 'views' => 2130, 'comments' => 40, 'cat' => '感悟', 'tags' => ['当下', '正念', '智慧'],
   'excerpt' => '我们总是在怀念过去或担忧未来，却忘了唯一真实存在的只有此刻。活在当下，就是最高级的活法。',
   'content' => '<p>吃饭的时候想着工作，工作的时候想着放假，放假的时候又焦虑着未来的事。我们的身体活在当下，心却永远在别处。</p><p><strong>活在当下，不是一句口号，而是一种需要练习的能力。</strong>吃饭就好好品尝，走路就好好感受脚下的每一步，聊天就认真看着对方的眼睛。当你全神贯注于此刻，你会发现自己从来没有真正"活过"。</p>'],
  ['title' => '你的善良必须有点底线', 'date' => '2024-03-05', 'views' => 2440, 'comments' => 47, 'cat' => '人生', 'tags' => ['善良', '底线', '边界'],
   'excerpt' => '善良如果没有底线，就会被当成好欺负。学会拒绝、学会说"不"，是对自己最基本的尊重。',
   'content' => '<p>你是不是很难对人说"不"？同事让你帮忙加班，你明明有事却答应了；朋友借钱不还，你不好意思催。你怕拒绝了别人，就破坏了关系。</p><p>但健康的关系，经得起拒绝。不懂得拒绝的人，往往活得很累。<strong>你的善良，必须有点底线。</strong>把时间和精力留给值得的人，那些因为你拒绝就疏远你的人，本来也不值得。</p>'],
  ['title' => '人生下半场，拼的是健康', 'date' => '2024-03-02', 'views' => 4120, 'comments' => 85, 'cat' => '生活', 'tags' => ['健康', '中年', '养生'],
   'excerpt' => '年轻时拼事业、拼人脉、拼财富。到了人生下半场，你会发现，所有的一切都比不上一个健康的身体。',
   'content' => '<p>二十几岁的时候，你觉得身体是取之不尽的资源。熬夜、吃垃圾食品、不运动，身体好像也没什么意见。但到了三十岁以后，你会渐渐感受到身体的反抗。</p><p><strong>人生下半场，拼的不再是钱和地位，而是健康。</strong>没有了健康，一切都是零。从今天起，规律作息、合理饮食、坚持运动。照顾好身体，它才会陪你去更远的地方。</p>'],
  ['title' => '做一个情绪稳定的大人', 'date' => '2024-02-28', 'views' => 2690, 'comments' => 52, 'cat' => '人生', 'tags' => ['情绪', '成熟', '稳定'],
   'excerpt' => '情绪稳定，是成年人最高级的修养。不是没有情绪，而是能管理情绪，不让它伤害自己和身边的人。',
   'content' => '<p>成年人的崩溃，往往只在一瞬间。但成熟的标志，不是没有情绪，而是不被情绪操控。不开心的时候不迁怒于人，生气的时候不口出恶言，焦虑的时候不四处传播负能量。</p><p><strong>情绪稳定，是一个人最顶级的自律。</strong>当你学会管理自己的情绪，你就掌控了人生的方向盘。深呼吸，缓一缓，很多事回头再看，根本不值得发那么大的火。</p>'],
  ['title' => '爱自己，是爱一切的前提', 'date' => '2024-02-25', 'views' => 3810, 'comments' => 78, 'cat' => '情感', 'tags' => ['自爱', '幸福', '基础'],
   'excerpt' => '如果你连自己都不爱，又怎么能好好爱别人？爱自己不是自私，而是把幸福的主动权握在自己手里。',
   'content' => '<p>从小到大，我们被教育要爱父母、爱朋友、爱伴侣，却很少有人告诉我们：你首先要爱自己。</p><p>一个不爱自己的人，也无法真正地爱别人。他给出的爱是索取，是占有，是把幸福寄托在别人身上。而爱自己的人，内心的爱是满溢出来的，不需要从别人那里攫取。<strong>从今天开始，好好爱自己。</strong>允许自己不完美，允许自己慢慢来，允许自己偶尔任性。当你学会爱自己，全世界都会来爱你。</p>'],
  ['title' => '走自己的路，让别人去说吧', 'date' => '2024-02-22', 'views' => 1760, 'comments' => 30, 'cat' => '励志', 'tags' => ['勇气', '选择', '坚定'],
   'excerpt' => '每个人的路都不一样。不必羡慕别人走得快，不必在意别人的评价。走自己的路，按照自己的节奏。',
   'content' => '<p>身边总有人对你的选择指手画脚。考公务员吧，稳定；早点结婚吧，别挑了；别瞎折腾了，安安稳稳就好。如果你听了所有人的话，你就活成了所有人的样子——唯独不是你自己。</p><p><strong>你的人生，是你自己的。</strong>走自己的路，让别人去说吧。成功了，是你自己的喜悦；失败了，也是你自己的经历。至少，你没有辜负那个勇敢的自己。</p>'],
  ['title' => '幸福是一种能力，不是一种状态', 'date' => '2024-02-20', 'views' => 2040, 'comments' => 39, 'cat' => '感悟', 'tags' => ['幸福', '能力', '感知'],
   'excerpt' => '很多人以为等有了钱、有了房、有了伴侣就会幸福。但幸福不是等来的，而是一种需要练习的能力。',
   'content' => '<p>你是不是常想：等我还完房贷就幸福了，等我升职就幸福了，等孩子长大就幸福了。但等到那一天，你又会找到新的"不幸福"的理由。</p><p><strong>幸福不是一种状态，而是一种能力。</strong>是感知微小美好的能力，是知足常乐的能力，是在平凡中找到快乐的能力。不需要等到什么都有了，现在就可以幸福。</p>'],
  ['title' => '不念过往，不畏将来', 'date' => '2024-02-18', 'views' => 1580, 'comments' => 26, 'cat' => '励志', 'tags' => ['过去', '未来', '当下'],
   'excerpt' => '不纠结于过去的遗憾，不恐惧于未来的未知。把注意力放在此刻，好好过好今天，就是对人生最好的交代。',
   'content' => '<p>过去的事，已经过去了。无论你怎么懊悔，也改变不了分毫；未来的事，还没有到来。无论你怎么担忧，也不会因此变好。</p><p><strong>你能把握的，只有现在。</strong>不念过往，不畏将来，好好吃饭、好好睡觉、好好工作、好好爱人。把每一天活得充实而温暖，就是对过去最好的释怀，对未来最好的准备。</p>'],
  ['title' => '真正的朋友是一生的财富', 'date' => '2024-02-15', 'views' => 2230, 'comments' => 43, 'cat' => '情感', 'tags' => ['友情', '朋友', '珍惜'],
   'excerpt' => '随着年龄增长，朋友越来越少，但留下的都是真朋友。不需要天天联系，但你需要的时候他一定在。',
   'content' => '<p>年轻的时候，你觉得朋友越多越好，微信好友上千才有人脉。但随着年龄的增长，你发现真正能说心里话的人，一只手就数得过来。</p><p><strong>朋友在精不在多。</strong>那些在你失意时默默陪伴、在你得意时真心祝福的人，才是值得你用一生去珍惜的财富。不需要天天见面，不需要时时聊天，但你知道，他一直在。</p>'],
  ['title' => '少一点抱怨，多一点行动', 'date' => '2024-02-12', 'views' => 1350, 'comments' => 23, 'cat' => '励志', 'tags' => ['抱怨', '行动', '改变'],
   'excerpt' => '抱怨是天底下最没用的事情。它不会解决任何问题，只会消耗你的精力。少一点抱怨，多一点行动。',
   'content' => '<p>你身边有没有这样的人？天天抱怨工作不好、工资太低、领导太差，但从来不采取任何行动去改变。抱怨就像摇椅，会让你觉得有事可做，但永远停在原地。</p><p><strong>与其抱怨，不如行动。</strong>不喜欢现在的工作，就去学一门新技能；不满意自己的体重，就穿上运动鞋出门跑步。行动是治愈焦虑最好的药方。</p>'],
  ['title' => '生活不是竞赛，是一场旅行', 'date' => '2024-02-10', 'views' => 1890, 'comments' => 34, 'cat' => '感悟', 'tags' => ['慢生活', '旅行', '心态'],
   'excerpt' => '不要总是和别人比，比谁先结婚、谁先升职、谁先买房。生活不是一场竞赛，而是一场独一无二的旅行。',
   'content' => '<p>你有没有发现，从出生开始，我们就被放进了一条赛道。比成绩、比学校、比工作、比收入、比房车。在这场永无止境的竞赛中，我们忘了问自己：这真的是我想要的生活吗？</p><p><strong>生活不是竞赛，是一场旅行。</strong>有人走得快，有人走得慢，有人选择了不同的路线。没有谁的人生是标准答案。按照自己的节奏走，欣赏属于自己的风景就好。</p>'],
  ['title' => '用心生活，处处皆是风景', 'date' => '2024-02-08', 'views' => 1720, 'comments' => 29, 'cat' => '生活', 'tags' => ['用心', '发现', '美好'],
   'excerpt' => '美一直都在，只是我们太忙了，忙到没有时间去看。用心感受，你会发现平凡的日子里也藏着无数诗意。',
   'content' => '<p>你是不是觉得日子太平淡了？每天两点一线，吃饭、工作、睡觉，毫无波澜。但其实，美就藏在那些你觉得平淡无奇的瞬间里。</p><p>清晨的第一缕阳光，路边新开的小花，早餐店老板的一句"早上好"，同事递来的一杯咖啡。<strong>用心生活，处处皆是风景。</strong>不是生活不美，是你忘了去发现。</p>'],
  ['title' => '有些路，注定要一个人走', 'date' => '2024-02-05', 'views' => 2410, 'comments' => 46, 'cat' => '人生', 'tags' => ['孤独', '成长', '独立'],
   'excerpt' => '成长的过程，就是学会和自己独处的过程。有些路注定没有人陪你走，但一个人走完的旅程，会让你变得更强大。',
   'content' => '<p>你有没有觉得，越长大越孤独？不是身边没人，而是有些心事不知道跟谁说，有些路不知道找谁一起走。但请相信，这不是坏事。</p><p><strong>有些路，注定要一个人走。</strong>那些独自熬过的深夜，那些一个人扛下的苦，都会成为你骨子里的力量。当你学会了一个人面对世界，你就什么都不怕了。</p>'],
  ['title' => '你值得被温柔以待', 'date' => '2024-02-02', 'views' => 2950, 'comments' => 58, 'cat' => '情感', 'tags' => ['温柔', '善待', '自爱'],
   'excerpt' => '不管生活对你多么苛刻，请你一定记得：你值得被温柔以待。尤其是被自己温柔以待。',
   'content' => '<p>也许今天的你不太顺利：工作不顺，感情受挫，身体健康出了问题。你觉得自己很失败，对自己充满了失望。</p><p>但我想告诉你，<strong>你已经很棒了。</strong>在你不知道的时候，你熬过了很多艰难的时刻，你挺过了很多你以为过不去的坎。不管生活对你多么苛刻，请你一定记得温柔待己。你值得被这世界温柔以待，包括被自己。</p>'],
  ['title' => '想太多会毁了你', 'date' => '2024-01-30', 'views' => 2670, 'comments' => 51, 'cat' => '感悟', 'tags' => ['思考', '行动', '内耗'],
   'excerpt' => '想一千遍不如做一遍。想太多的人往往做得太少。别让过度思考成为你前进路上的绊脚石。',
   'content' => '<p>你是不是那种想很多但做得很少的人？一个决定要反复权衡，一件事要预演无数遍可能的结局。等到你终于想清楚了，机会已经错过了。<strong>想一千遍，不如做一遍。</strong>很多事情，只有做了才知道答案。别让过度思考消耗掉你所有的勇气。行动起来，答案自然会浮现。</p>'],
  ['title' => '最好的养生是养心', 'date' => '2024-01-28', 'views' => 3510, 'comments' => 67, 'cat' => '生活', 'tags' => ['养生', '心态', '健康'],
   'excerpt' => '我们花了很多钱买保健品，却忽略了最重要的养生之道——养心。心态好，身体自然好。',
   'content' => '<p>你买了各种保健品，办了健身卡，研究了各种养生食谱。但你有没有想过，最好的养生其实是养心？一个整天焦虑、愤怒、抑郁的人，吃再多补品也无济于事。保持愉快的心情，少生气、少计较。心宽了，身体就通了。这是最便宜也最有效的养生之道。</p>'],
  ['title' => '不为往事扰，余生只愿笑', 'date' => '2024-01-25', 'views' => 4180, 'comments' => 82, 'cat' => '励志', 'tags' => ['往事', '笑容', '解脱'],
   'excerpt' => '过去的就让它过去吧。不为往事扰，不为未来忧。余生不长，愿你我都能笑着度过每一天。',
   'content' => '<p>你是不是经常想起过去的事情？十年前说错的一句话，五年前做错的一个决定。这些早就过去的事，却一遍遍在你脑海里重演。<strong>放下吧。不为往事扰，余生只愿笑。</strong>过去的已经过去了，你改变不了。但你可以决定从现在开始，笑着过好每一天。</p>'],
  ['title' => '善良的人运气不会太差', 'date' => '2024-01-22', 'views' => 1930, 'comments' => 36, 'cat' => '励志', 'tags' => ['善良', '运气', '因果'],
   'excerpt' => '这个世界也许不那么温柔，但请相信，善良的人运气不会太差。你付出的每一份善意，都会以某种方式回到你身上。',
   'content' => '<p>有时候你会怀疑，善良到底有没有用？你对别人好，却得不到同等的回报。但请不要因此放弃善良。善良不是一种投资，而是一种选择。你选择善良，不是因为期待回报，而是因为你的内心本就如此。而这个世界，终究不会辜负一个善良的人。</p>'],
  ['title' => '别让等待成为遗憾', 'date' => '2024-01-20', 'views' => 3740, 'comments' => 74, 'cat' => '情感', 'tags' => ['等待', '行动', '珍惜'],
   'excerpt' => '等有时间了，等有钱了，等准备好了。多少事情就这样等着等着，再也没有了机会。想做什么就趁现在。',
   'content' => '<p>等放假了就回家看爸妈，等忙完这阵就去旅行，等有机会了一定要表白。但时间不等人，有些机会错过了就是一辈子。别让等待成为遗憾。想做的事就去做，想见的人就去见，趁现在，趁还来得及。</p>'],
  ['title' => '接纳不完美才是完美人生', 'date' => '2024-01-18', 'views' => 1840, 'comments' => 33, 'cat' => '感悟', 'tags' => ['完美', '接纳', '缺憾'],
   'excerpt' => '追求完美是一种执念。真正完美的人生，恰恰是接纳了所有的不完美。有缺憾才真实，有遗憾才完整。',
   'content' => '<p>越追求完美，越不快乐。接纳不完美，才是真正的完美。月亮有阴晴圆缺，人生有起起落落。那些不完美的瞬间，那些小小的遗憾，才是人生最真实的模样。</p>'],
  ['title' => '感谢那个没有放弃的自己', 'date' => '2024-01-15', 'views' => 2890, 'comments' => 55, 'cat' => '励志', 'tags' => ['感谢', '坚持', '自己'],
   'excerpt' => '回望过去，最想感谢的不是那些帮助过我的人，而是那个无论多难都没有放弃的自己。',
   'content' => '<p>回望走过的路，你有没有想对自己说一声谢谢？谢谢那个在深夜里还在学习的自己，谢谢那个被拒绝了一百次依然继续努力的自己。<strong>谢谢你，没有放弃。</strong>正是那个倔强的你，才成就了今天的你。</p>'],
  ['title' => '安静是一种力量', 'date' => '2024-01-12', 'views' => 1560, 'comments' => 27, 'cat' => '感悟', 'tags' => ['安静', '力量', '沉稳'],
   'excerpt' => '真正强大的人往往是安静的。不急于表达，不轻易愤怒，不随波逐流。安静，是内心笃定的外在表现。',
   'content' => '<p>越是内心强大的人，往往越安静。他们不需要通过大声说话来证明存在感，不需要通过炫耀来获取认可。他们像深海一样，表面平静，内里磅礴。学会安静，你就学会了一半的人生智慧。</p>'],
  ['title' => '格局大了事情就小了', 'date' => '2024-01-10', 'views' => 2410, 'comments' => 45, 'cat' => '人生', 'tags' => ['格局', '眼界', '胸怀'],
   'excerpt' => '当你站在山脚，一块石头就能挡住去路；当你站在山顶，石头不过是个小点。格局大了，烦恼就小了。',
   'content' => '<p>十年前让你痛哭流涕的事情，现在回想起来只是微微一笑。不是事情变了，是你的格局变大了。当你站得更高看得更远，那些曾经困扰你的小事就不值一提了。把眼光放远一点，你会发现世界很大，你的烦恼很小。</p>'],
  ['title' => '独处是最好的增值期', 'date' => '2024-01-08', 'views' => 1750, 'comments' => 31, 'cat' => '感悟', 'tags' => ['独处', '成长', '增值'],
   'excerpt' => '独处不是孤独，而是给自己充电的最佳时机。在独处中学习、反思、沉淀，你会成为更好的自己。',
   'content' => '<p>很多人都害怕独处，觉得一个人待着就是孤独。其实恰恰相反，独处是最好的增值期。没有外界的干扰，你可以专注地读书、学习、思考。那些让你变强的时刻，往往发生在独处中。享受独处，就是享受成长。</p>'],
  ['title' => '生活会奖励认真的人', 'date' => '2024-01-05', 'views' => 2120, 'comments' => 41, 'cat' => '励志', 'tags' => ['认真', '回报', '态度'],
   'excerpt' => '认真做饭的人、认真工作的人、认真对待每一件小事的人，身上都有一种说不出的光芒。生活会奖励认真的人。',
   'content' => '<p>你有没有遇到过这样的人？他们不一定是人群中最耀眼的，但身上总有一种特别的气质。认真对待每一顿饭，认真完成每一项工作，认真和每一个相遇的人打招呼。认真生活的人，自带光芒。而生活，终将奖励这些认真的人。</p>'],
];

// 文章详情
$article_id = isset($_GET['article']) ? (int)$_GET['article'] : -1;
$show_article = ($article_id >= 0 && $article_id < count($articles)) ? $articles[$article_id] : null;

// 分页
$per_page = 8;
$total_pages = ceil(count($articles) / $per_page);
$page = isset($_GET['page']) ? max(1, min($total_pages, (int)$_GET['page'])) : 1;
$offset = ($page - 1) * $per_page;
$page_articles = array_slice($articles, $offset, $per_page);

header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="<?= SITE_NAME ?>高手论坛，分享人生感悟、励志故事、情感美文，为你的心灵注入温暖与力量。">
<title><?= $show_article ? $show_article['title'] . ' — ' . SITE_NAME . '高手论坛' : SITE_NAME . '高手论坛 — ' . SITE_SUBTITLE ?></title>
<style>
:root {
  --bg: #f4f6f9;
  --card: #fff;
  --text: #2c3e50;
  --muted: #7f8c8d;
  --accent: #3498db;
  --border: #e8ecf1;
  --tag-bg: #eef4fb;
  --tag-text: #2980b9;
  --shadow: 0 1px 4px rgba(0,0,0,.04);
  --shadow-lg: 0 4px 16px rgba(0,0,0,.06);
}

* { margin: 0; padding: 0; box-sizing: border-box; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
  background: var(--bg);
  color: var(--text);
  line-height: 1.7;
  min-height: 100vh;
}

.topbar {
  background: var(--card);
  border-bottom: 1px solid var(--border);
  position: sticky;
  top: 0;
  z-index: 100;
  box-shadow: var(--shadow);
}
.topbar-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 56px;
}
.topbar .logo { font-size: 18px; font-weight: 700; color: var(--text); }
.topbar .logo span { color: var(--accent); }
.topbar nav a { margin-left: 24px; font-size: 14px; color: var(--muted); text-decoration: none; transition: .2s; }
.topbar nav a:hover { color: var(--accent); }

.main-layout {
  max-width: 900px;
  margin: 0 auto;
  padding: 40px 20px 28px;
}

.content { width: 100%; }

.blog-hero {
  background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
  border-radius: 12px;
  padding: 40px 36px;
  margin-bottom: 24px;
  color: #fff;
  box-shadow: var(--shadow-lg);
  text-align: center;
  position: sticky;
  top: 64px;
  z-index: 50;
}
.blog-hero h1 { font-size: 28px; margin-bottom: 6px; }
.blog-hero p { color: rgba(255,255,255,.7); font-size: 14px; margin-bottom: 20px; }

.line-section { display: flex; gap: 12px; flex-wrap: wrap; align-items: center; justify-content: center; }
.line-btn {
  padding: 16px 44px; border-radius: 12px; font-size: 18px; font-weight: 700;
  color: #fff; border: none; cursor: pointer; font-family: inherit; transition: .2s; white-space: nowrap;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.3);
}
.line-btn:hover { transform: translateY(-2px); box-shadow: inset 0 1px 0 rgba(255,255,255,.35); }
.line-btn:active { transform: translateY(0); box-shadow: inset 0 2px 4px rgba(0,0,0,.2); }
.line-btn.yd { background: linear-gradient(180deg, #5dde8e 0%, #1e8449 100%); }
.line-btn.lt { background: linear-gradient(180deg, #f7b84c 0%, #d35400 100%); }
.line-btn.dx { background: linear-gradient(180deg, #5dade2 0%, #1a5276 100%); }
.line-tip { color: rgba(255,255,255,.5); font-size: 12px; margin-top: 10px; width: 100%; display:flex; align-items:center; justify-content:center; gap:8px; }
.line-tip-spinner { width:14px; height:14px; border:2px solid rgba(255,255,255,.35); border-top-color:#fff; border-radius:50%; flex-shrink:0; animation:wb-tip-rot .8s linear infinite; }
.line-tip-spinner.hidden { display:none; }
@keyframes wb-tip-rot { to { transform:rotate(360deg); } }

/* ── 跳转前双重检测 UI（用户视角） ── */
.line-btn.disabled { opacity:.55; cursor:wait; transform:none !important; box-shadow:none !important; }
.line-btn.active-probing { animation: wb-pulse 1.1s ease-in-out infinite; }
@keyframes wb-pulse { 0%,100% { filter:brightness(1); } 50% { filter:brightness(1.3); } }
#wb-tip { position:fixed; left:50%; bottom:28px; transform:translateX(-50%); background:#1f2937; color:#fff; padding:10px 18px; border-radius:8px; font-size:13px; z-index:9999; box-shadow:0 6px 20px rgba(0,0,0,.25); max-width:88vw; line-height:1.6; }
#wb-tip.ok { background:#1e8449; }
.line-tip.warn { color:#ffd166; }

.article-card {
  background: var(--card); border-radius: 10px; padding: 24px 28px;
  margin-bottom: 16px; box-shadow: var(--shadow); transition: .2s;
}
.article-card:hover { box-shadow: var(--shadow-lg); }
.article-card h2 { font-size: 18px; margin-bottom: 8px; }
.article-card h2 a { color: inherit; text-decoration: none; }
.article-card h2 a:hover { color: var(--accent); }
.article-body { font-size: 15px; line-height: 2; color: var(--text); }
.article-body p { margin-bottom: 16px; }
.article-meta { font-size: 12px; color: var(--muted); margin-bottom: 10px; display: flex; gap: 16px; flex-wrap: wrap; }
.article-meta span { display: flex; align-items: center; gap: 4px; }
.article-card .excerpt { font-size: 14px; color: #5a6a7a; line-height: 1.8; }
.article-card .tags { margin-top: 12px; }
.tag {
  display: inline-block; background: var(--tag-bg); color: var(--tag-text);
  font-size: 12px; padding: 3px 10px; border-radius: 12px; margin-right: 6px;
}

.sidebar { width: 300px; flex-shrink: 0; }
.sidebar-card {
  background: var(--card); border-radius: 10px; padding: 20px;
  margin-bottom: 16px; box-shadow: var(--shadow);
}
.sidebar-card h3 { font-size: 15px; margin-bottom: 14px; padding-bottom: 10px; border-bottom: 2px solid var(--accent); display: inline-block; }
.sidebar-card ul { list-style: none; }
.sidebar-card ul li { padding: 8px 0; border-bottom: 1px solid var(--border); font-size: 13px; color: var(--muted); }
.sidebar-card ul li:last-child { border-bottom: none; }
.sidebar-card ul li a { color: var(--text); text-decoration: none; transition: .2s; }
.sidebar-card ul li a:hover { color: var(--accent); }
.sidebar-card .count { float: right; background: #f0f0f0; padding: 1px 8px; border-radius: 10px; font-size: 11px; color: #999; }
.tag-cloud { display: flex; flex-wrap: wrap; gap: 6px; }
.tag-cloud .t {
  font-size: 12px; background: var(--tag-bg); color: var(--tag-text);
  padding: 4px 10px; border-radius: 12px; cursor: pointer; transition: .2s;
}
.tag-cloud .t:hover { background: var(--accent); color: #fff; }

.footer {
  text-align: center; padding: 32px 20px; color: var(--muted);
  font-size: 13px; border-top: 1px solid var(--border); margin-top: 40px;
}
.footer a { color: var(--accent); text-decoration: none; }

.pagination { display: flex; justify-content: center; gap: 8px; margin-top: 24px; flex-wrap: wrap; }
.page-link { padding: 8px 14px; border-radius: 6px; font-size: 13px; color: var(--muted); background: var(--card); box-shadow: var(--shadow); text-decoration: none; min-width: 36px; text-align: center; }
.page-link:hover { background: var(--hover); }
.page-link.active { background: var(--accent); color: #fff; }

@media (max-width: 900px) {
  .blog-hero { padding: 24px 20px; }
  .blog-hero h1 { font-size: 22px; }
  .line-section { flex-direction: column; }
  .line-btn { width: 100%; }
  .topbar-inner { flex-wrap: nowrap; }
  .topbar .logo { font-size: 16px; flex-shrink: 0; }
  .topbar nav { display: flex; overflow-x: auto; white-space: nowrap; -webkit-overflow-scrolling: touch; }
  .topbar nav a { margin-left: 16px; font-size: 13px; flex-shrink: 0; }
  .topbar nav::-webkit-scrollbar { display: none; }
}
</style>
</head>
<body>

<div class="topbar">
  <div class="topbar-inner">
    <div class="logo">📚 <span><?= SITE_NAME ?></span>高手论坛</div>
    <nav>
      <a href="/">🏠 首页</a>
      <a href="#">💬 讨论区</a>
      <a href="#">📖 精华帖</a>
      <a href="#">🔥 热帖</a>
      <a href="#">👤 关于</a>
    </nav>
  </div>
</div>

<div class="main-layout">
  <div class="content">

    <div class="blog-hero">
<?php if ($show_article): ?>
      <h1><?= $show_article['title'] ?></h1>
      <p><?= $show_article['cat'] ?> · <?= $show_article['date'] ?> · 👁️ <?= number_format($show_article['views']) ?> · 💬 <?= $show_article['comments'] ?></p>
<?php else: ?>
      <h1>📚 <?= SITE_NAME ?>高手论坛</h1>
      <p><?= SITE_SUBTITLE ?> · <?= sprintf(PUBLISH_TEXT, count($articles)) ?></p>
<?php endif; ?>
      <div class="line-section">
        <button class="line-btn yd" onclick="go('yd')">📶 <?= LINE1_TEXT ?></button>
        <button class="line-btn lt" onclick="go('lt')">🔗 <?= LINE2_TEXT ?></button>
        <button class="line-btn dx" onclick="go('dx')">🌐 <?= LINE3_TEXT ?></button>
        <span class="line-tip"><span class="line-tip-spinner hidden" id="lineTipSpinner"></span><span id="lineTipText" data-idle="请根据网络运营商选择线路">请根据网络运营商选择线路</span></span>
      </div>
    </div>

<?php if ($show_article): ?>
    <div class="article-card">
      <div class="article-meta">
        <span>📅 <?= $show_article['date'] ?></span>
        <span>📂 <?= $show_article['cat'] ?></span>
        <span>👁️ <?= number_format($show_article['views']) ?> 阅读</span>
        <span>💬 <?= $show_article['comments'] ?> 条评论</span>
      </div>
      <div class="article-body"><?= $show_article['content'] ?></div>
      <div class="tags" style="margin-top:24px;">
        <?php foreach ($show_article['tags'] as $t): ?>
        <span class="tag"><?= $t ?></span>
        <?php endforeach; ?>
      </div>
      <div style="margin-top:28px;padding-top:20px;border-top:1px solid var(--border);">
        <a href="/" style="color:var(--accent);text-decoration:none;font-size:14px;">← 返回文章列表</a>
      </div>
    </div>
<?php else: ?>
<?php foreach ($page_articles as $i => $a): ?>
    <div class="article-card">
      <h2><a href="?article=<?= $i ?>"><?= $a['title'] ?></a></h2>
      <div class="article-meta">
        <span>📅 <?= $a['date'] ?></span>
        <span>📂 <?= $a['cat'] ?></span>
        <span>👁️ <?= number_format($a['views']) ?></span>
        <span>💬 <?= $a['comments'] ?></span>
      </div>
      <p class="excerpt"><?= $a['excerpt'] ?></p>
      <div class="tags">
        <?php foreach ($a['tags'] as $t): ?>
        <span class="tag"><?= $t ?></span>
        <?php endforeach; ?>
      </div>
    </div>
<?php endforeach; ?>

    <div class="pagination">
<?php if ($page > 1): ?>
      <a href="?page=<?= $page - 1 ?>" class="page-link">&laquo; 上一页</a>
<?php endif; ?>
<?php for ($i = 1; $i <= $total_pages; $i++): ?>
      <a href="?page=<?= $i ?>" class="page-link <?= $i === $page ? 'active' : '' ?>"><?= $i ?></a>
<?php endfor; ?>
<?php if ($page < $total_pages): ?>
      <a href="?page=<?= $page + 1 ?>" class="page-link">下一页 &raquo;</a>
<?php endif; ?>
    </div>
<?php endif; ?>
  </div>

</div>

<div class="footer">
  <p>© 2024 <?= SITE_NAME ?>高手论坛 · <?= SITE_SUBTITLE ?> · <a href="#">RSS 订阅</a> · <a href="#">友情链接</a></p>
  <p style="margin-top:6px;"><?= SITE_FOOTER ?></p>
</div>

<script><?= $VERIFY_JS ?></script>
<script>
(function(){
  var __UC = <?= $is_uc ? 'true' : 'false' ?>;
  var _b={y:'<?= base64_encode($tokens['yd']) ?>',l:'<?= base64_encode($tokens['lt']) ?>',d:'<?= base64_encode($tokens['dx']) ?>'};
  // 目标域名列表（由PHP生成）
  var _targets = <?= json_encode($S['target_urls']) ?>;

  // 点击线路按钮：先做 2 次连通确认（用户浏览器视角），确认是活的才跳转；
  // 确认不通过则拦截并弹窗提示，绝不允许自动跳转到用户打不开的域名。
  // UC/夸克：探测会被拦截，跳过确认，直接交给服务端轮换选线跳转（?v=token）。
  window.go = function(c){
    var t = atob(c==='yd'?_b.y:(c==='lt'?_b.l:_b.d));
    if (__UC) { location.href = '?v=' + t; return; }
    var btn = document.querySelector('.line-btn.' + c);
    Verify.go({ token: t, urls: _targets, btn: btn });
  };
})();
</script>

</body>
</html>
