/*
Theme Name: 代码物语 CodeMonogatari
Theme URI: https://www.zhangziyin.xyz
Description: 「二次元程序员」个人博客主题 —— 清新萌系 ACG 配色、终端元素、六位当班角色系统、深浅双主题、响应式三栏布局。
Author: ZiYin
Version: 1.0.0
License: GNU General Public License v2 or later
Text Domain: codemonogatari
*/

:root{
  --bg:#FAF8F3; --surface:#FFFFFF; --text:#1E1E24; --sub:#737378; --faint:#A0A0A5;
  --accent:#F57393; --accent-soft:#FDEBF0; --teal:#53C7B8; --teal-soft:#E0F6F1;
  --border:#EAE6DF; --radius:18px; --radius-sm:12px;
  --shadow:0 6px 24px -8px rgba(224,180,195,.25);
  --shadow-hover:0 14px 32px -8px rgba(224,120,150,.38);
  --mono:"JetBrains Mono","Fira Code",Consolas,monospace;
  --ui:"Noto Sans SC","PingFang SC","Microsoft YaHei",-apple-system,sans-serif;
}
[data-theme="dark"]{
  --bg:#141519; --surface:#1E1F24; --text:#EDEDF2; --sub:#9A9AA3; --faint:#6A6A72;
  --accent:#FA8CA8; --accent-soft:#3A2230; --teal:#59D8C7; --teal-soft:#1E3633;
  --border:#2A2B31; --shadow:0 6px 24px -8px rgba(0,0,0,.5);
  --shadow-hover:0 14px 32px -8px rgba(0,0,0,.65);
}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);font-family:var(--ui);line-height:1.7;
  background-image:radial-gradient(circle at 12% 8%,rgba(245,115,147,.07) 0,transparent 26%),
  radial-gradient(circle at 88% 92%,rgba(83,199,184,.08) 0,transparent 30%);}
a{color:var(--accent);text-decoration:none}
img{max-width:100%}
::selection{background:var(--accent-soft)}

/* ---------- 顶部导航 ---------- */
.cm-nav{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--surface) 88%,transparent);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--border)}
.cm-nav-inner{max-width:1280px;margin:0 auto;padding:0 20px;height:62px;display:flex;align-items:center;gap:24px}
.cm-logo{display:flex;align-items:center;gap:9px;font-weight:800;font-size:19px;color:var(--text)}
.cm-logo-mark{font-family:var(--mono);font-size:12px;font-weight:700;background:var(--accent);color:#fff;
  padding:4px 7px;border-radius:9px;transition:transform .25s}
.cm-logo:hover .cm-logo-mark{transform:rotate(-10deg) scale(1.08)}
.cm-menu{display:flex;gap:6px;margin-left:auto;overflow-x:auto}
.cm-menu a{position:relative;color:var(--sub);font-size:15px;padding:8px 13px;border-radius:10px;white-space:nowrap;transition:color .2s,background .2s}
.cm-menu a::after{content:"";position:absolute;left:13px;right:13px;bottom:4px;height:2px;background:var(--accent);
  border-radius:2px;transform:scaleX(0);transform-origin:left;transition:transform .25s}
.cm-menu a:hover{color:var(--text)}
.cm-menu a:hover::after,.cm-menu a.active::after{transform:scaleX(1)}
.cm-menu a.active{color:var(--accent);font-weight:600}
.cm-theme-btn{width:38px;height:38px;border:1px solid var(--border);border-radius:12px;background:var(--surface);
  color:var(--text);font-size:16px;cursor:pointer;transition:transform .15s,box-shadow .2s}
.cm-theme-btn:hover{box-shadow:var(--shadow);transform:translateY(-1px)}
.cm-theme-btn:active{transform:scale(.9)}

/* ---------- 布局 ---------- */
.cm-grid{max-width:1280px;margin:22px auto 0;padding:0 20px;display:grid;grid-template-columns:262px minmax(0,1fr) 282px;gap:20px;align-items:start}
.cm-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}
.cm-aside{display:flex;flex-direction:column;gap:16px;position:sticky;top:78px}
.cm-aside h3{font-size:15px;padding:14px 18px 0;display:flex;align-items:center;gap:7px}
.cm-aside h3::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--accent)}
.cm-sec{padding:12px 10px 14px}

/* ---------- 终端卡 ---------- */
.cm-term{background:#1E1E28;color:#E6E6EC;border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow)}
.cm-term-bar{display:flex;gap:7px;align-items:center;padding:11px 15px;background:#17171F}
.cm-term-bar i{width:11px;height:11px;border-radius:50%}
.cm-term-bar i:nth-child(1){background:#FF5F57}.cm-term-bar i:nth-child(2){background:#FEBC2E}.cm-term-bar i:nth-child(3){background:#28C840}
.cm-term-bar span{margin-left:6px;font-family:var(--mono);font-size:12px;color:#8A8A94}
.cm-term-body{padding:16px 17px 19px;font-family:var(--mono);font-size:13px;line-height:2}
.cm-term-body .t-cmd{color:#53C7B8}
.cm-term-body .t-out{color:#E6E6EC;word-break:break-all}
.cm-term-body .t-pink{color:#F57393}

/* ---------- 个人资料 ---------- */
.cm-avatar{width:64px;height:64px;border-radius:20px;background:linear-gradient(135deg,var(--accent),var(--teal));
  display:flex;align-items:center;justify-content:center;font-family:var(--mono);color:#fff;font-weight:700;font-size:20px}
.cm-profile{display:flex;gap:13px;align-items:center;padding:16px 16px 10px}
.cm-profile b{font-size:16px}
.cm-profile p{font-size:12px;color:var(--faint)}
.cm-stats{display:flex;justify-content:space-around;padding:10px 8px 14px}
.cm-stats div{text-align:center}
.cm-stats b{font-family:var(--mono);font-size:18px;display:block}
.cm-stats span{font-size:12px;color:var(--faint)}

/* ---------- 侧栏列表 ---------- */
.cm-list a{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:10px;color:var(--sub);font-size:13.5px;transition:background .2s,color .2s,padding-left .2s}
.cm-list a:hover{background:var(--accent-soft);color:var(--accent);padding-left:14px}
.cm-list a i{width:18px;height:18px;flex:none;border-radius:6px;display:inline-block}
.cm-list .hot-n{margin-left:auto;font-family:var(--mono);font-size:12px;color:var(--faint)}

/* ---------- 当班角色卡 ---------- */
.cm-char{margin:6px 12px 14px;border-radius:var(--radius-sm);padding:16px;position:relative;overflow:hidden}
.cm-char::before{content:"";position:absolute;right:-22px;top:-22px;width:88px;height:88px;border-radius:50%;opacity:.16;background:#fff}
.cm-char .c-name{font-size:17px;font-weight:800;color:#fff;display:flex;align-items:baseline;gap:8px}
.cm-char .c-name small{font-size:11px;font-weight:500;opacity:.85}
.cm-char .c-role{font-size:12px;color:#fff;opacity:.92;margin-top:3px}
.cm-char .c-quote{margin-top:10px;font-size:13px;color:#fff;background:rgba(255,255,255,.18);border-radius:9px;padding:7px 11px}
.cm-char .c-work{margin-top:9px;font-family:var(--mono);font-size:11px;color:#fff;opacity:.75}

/* ---------- 标签云 / 书架 ---------- */
.cm-tags{padding:8px 14px 16px;display:flex;flex-wrap:wrap;gap:8px}
.cm-tags a{font-size:13px;color:var(--sub);background:var(--bg);border:1px solid var(--border);padding:4px 11px;border-radius:20px;transition:all .2s}
.cm-tags a:hover{background:var(--accent);border-color:var(--accent);color:#fff;transform:translateY(-2px)}
.cm-search{padding:12px 14px 16px;display:flex;gap:8px}
.cm-search input{flex:1;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:10px;padding:9px 13px;font-size:13.5px;outline:none;transition:border .2s,box-shadow .2s}
.cm-search input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.cm-search button{border:none;background:var(--accent);color:#fff;border-radius:10px;padding:0 15px;cursor:pointer;transition:transform .15s,filter .2s}
.cm-search button:hover{filter:brightness(1.08)}
.cm-search button:active{transform:scale(.92)}
.cm-shelf{padding:6px 16px 18px}
.cm-shelf-row{display:flex;align-items:flex-end;gap:5px;height:80px;border-bottom:5px solid var(--border);padding-bottom:0;overflow:hidden}
.cm-book{width:30px;max-height:74px;border-radius:4px 4px 2px 2px;writing-mode:vertical-rl;display:flex;align-items:center;justify-content:center;
  font-size:10.5px;color:#fff;letter-spacing:0;padding:5px 2px;transition:transform .25s;cursor:default;overflow:hidden;white-space:nowrap}
.cm-book:hover{transform:translateY(-7px) rotate(-3deg)}

/* ---------- 主区文章卡 ---------- */
.cm-main{display:flex;flex-direction:column;gap:20px;min-width:0}
.cm-post{display:flex;gap:20px;padding:18px;transition:transform .25s,box-shadow .25s;animation:cmIn .5s both}
.cm-post:hover{transform:translateY(-4px);box-shadow:var(--shadow-hover)}
@keyframes cmIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.cm-cover{width:216px;height:150px;flex:none;border-radius:var(--radius-sm);overflow:hidden;position:relative}
.cm-cover img{width:100%;height:100%;object-fit:cover;transition:transform .4s}
.cm-post:hover .cm-cover img{transform:scale(1.06)}
.cm-cover .ph{width:100%;height:100%;display:flex;align-items:center;justify-content:center}
.cm-cover .ph span{font-family:var(--mono);color:#fff;font-size:15px;font-weight:700}
.cm-post-body{flex:1;min-width:0;display:flex;flex-direction:column}
.cm-cat{align-self:flex-start;font-size:12px;padding:3px 11px;border-radius:8px;color:#fff;margin-bottom:8px}
.cm-post h2{font-size:19px;line-height:1.45}
.cm-post h2 a{color:var(--text);transition:color .2s}
.cm-post h2 a:hover{color:var(--accent)}
.cm-post .exc{color:var(--sub);font-size:14px;margin-top:7px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cm-meta{margin-top:auto;padding-top:11px;display:flex;gap:15px;font-size:12.5px;color:var(--faint);align-items:center}
.cm-meta .more{margin-left:auto;color:var(--accent);font-weight:600}
.cm-meta .more::after{content:"→";display:inline-block;margin-left:4px;transition:transform .2s}
.cm-post:hover .more::after{transform:translateX(4px)}

/* ---------- Hero ---------- */
.cm-hero{animation:cmIn .5s both}

/* ---------- 分页 ---------- */
.cm-page-nav{display:flex;gap:8px;justify-content:center;padding:6px 0 4px}
.cm-page-nav .page-numbers{min-width:38px;height:38px;display:inline-flex;align-items:center;justify-content:center;
  background:var(--surface);border:1px solid var(--border);border-radius:11px;color:var(--sub);font-size:14px;transition:all .2s}
.cm-page-nav .page-numbers:hover{color:#fff;background:var(--accent);border-color:var(--accent);transform:translateY(-2px)}
.cm-page-nav .current{background:var(--accent);border-color:var(--accent);color:#fff}

/* ---------- 文章详情 ---------- */
.cm-article{max-width:820px;margin:22px auto;padding:34px clamp(20px,5vw,46px)}
.cm-article h1{font-size:26px;line-height:1.5}
.cm-article .art-meta{display:flex;flex-wrap:wrap;gap:14px;color:var(--faint);font-size:13px;margin:13px 0 5px}
.cm-article .art-meta a{color:var(--sub)}
.cm-art-body{margin-top:22px;font-size:15.5px;line-height:1.9;color:var(--text)}
.cm-art-body h2,.cm-art-body h3{margin:26px 0 12px}
.cm-art-body p{margin:12px 0}
.cm-art-body a{border-bottom:1px dashed var(--accent)}
.cm-art-body img{border-radius:var(--radius-sm)}
.cm-art-body code{font-family:var(--mono);font-size:.9em;background:var(--teal-soft);color:#2E9E8E;padding:2px 8px;border-radius:6px}
.cm-art-body pre{background:#1E1E28;color:#E6E6EC;border-radius:var(--radius-sm);padding:18px;overflow-x:auto;margin:16px 0}
.cm-art-body pre code{background:none;color:inherit;padding:0}
.cm-art-body blockquote{border-left:4px solid var(--accent);background:var(--accent-soft);border-radius:0 10px 10px 0;padding:12px 16px;margin:14px 0;color:var(--sub)}
.cm-art-foot{margin-top:30px;padding-top:18px;border-top:1px dashed var(--border);display:flex;justify-content:space-between;gap:12px;font-size:14px}
.cm-art-foot a{color:var(--sub)}.cm-art-foot a:hover{color:var(--accent)}

/* ---------- 学习记录时间轴 ---------- */
.cm-page-head{max-width:1280px;margin:22px auto 0;padding:0 20px}
.cm-page-title{padding:26px 30px;display:flex;align-items:center;gap:15px}
.cm-page-title .ico{width:46px;height:46px;border-radius:14px;background:linear-gradient(135deg,var(--accent),var(--teal));display:flex;align-items:center;justify-content:center}
.cm-page-title h1{font-size:22px}
.cm-page-title p{color:var(--faint);font-size:13px;margin-top:2px}
.cm-timeline{padding:10px 26px 24px}
.cm-month{margin:18px 0 6px;font-family:var(--mono);font-weight:700;color:var(--accent);font-size:15px}
.cm-tl-item{display:flex;gap:14px;padding:10px 2px;border-radius:12px;transition:background .2s}
.cm-tl-item:hover{background:var(--accent-soft)}
.cm-tl-item .d{font-family:var(--mono);font-size:12.5px;color:var(--faint);flex:none;width:56px;padding-top:3px}
.cm-tl-item .t a{color:var(--text);font-size:15px;font-weight:600}
.cm-tl-item .t a:hover{color:var(--accent)}

/* ---------- 项目展示 ---------- */
.cm-proj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(272px,1fr));gap:18px;padding:20px 26px 28px}
.cm-proj{border:1px solid var(--border);border-radius:var(--radius);padding:20px;position:relative;overflow:hidden;transition:transform .25s,box-shadow .25s}
.cm-proj::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;background:var(--c,var(--accent))}
.cm-proj:hover{transform:translateY(-5px);box-shadow:var(--shadow-hover)}
.cm-proj h3{font-size:16.5px}
.cm-proj h3 a{color:var(--text)}.cm-proj h3 a:hover{color:var(--accent)}
.cm-proj p{color:var(--sub);font-size:13.5px;margin-top:9px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.cm-proj .tags{margin-top:13px;display:flex;flex-wrap:wrap;gap:7px}
.cm-proj .tags span{font-size:11.5px;font-family:var(--mono);color:var(--sub);background:var(--bg);border:1px solid var(--border);border-radius:7px;padding:2px 9px}
.cm-empty{padding:44px 26px;text-align:center;color:var(--faint)}
.cm-empty b{display:block;color:var(--text);font-size:16px;margin-bottom:7px}

/* ---------- 页脚 ---------- */
.cm-footer{margin-top:34px;border-top:1px solid var(--border);padding:26px 20px 34px;text-align:center;color:var(--faint);font-size:13px}
.cm-footer .credits{margin-top:5px;font-size:12px}
.cm-top-btn{position:fixed;right:26px;bottom:26px;width:44px;height:44px;border-radius:14px;border:none;background:var(--accent);
  color:#fff;font-size:18px;cursor:pointer;box-shadow:var(--shadow-hover);opacity:0;pointer-events:none;transition:opacity .3s,transform .2s;z-index:60}
.cm-top-btn.show{opacity:1;pointer-events:auto}
.cm-top-btn:hover{transform:translateY(-3px)}
.cm-top-btn:active{transform:scale(.9)}

/* ---------- 响应式 ---------- */
@media(max-width:1120px){
  .cm-grid{grid-template-columns:250px minmax(0,1fr)}
  .cm-right{grid-column:1/-1;position:static;flex-direction:row;flex-wrap:wrap}
  .cm-right .cm-card{flex:1 1 260px}
}
@media(max-width:760px){
  .cm-grid{grid-template-columns:1fr}
  .cm-aside{position:static}
  .cm-post{flex-direction:column}
  .cm-cover{width:100%;height:170px}
  .cm-nav-inner{gap:12px}
  .cm-logo span.cm-logo-txt{display:none}
}
