:root{--bg: #faf9f6;--text: #26241f;--muted: #8a8578;--faint: #c9c4bb;--hairline: #e8e5de;--accent: #b3541e;--accent-soft: rgba(179, 84, 30, .08);--card: rgba(255, 255, 255, .6);--card-border: #e3dfd5;--card-shadow: 0 8px 22px rgba(60, 50, 30, .08);--song: "Noto Serif SC", "Source Han Serif SC", "方正书宋", "FZShuSong", "FZShuSong-Z01", "Songti SC", "STSong", "SimSun", serif;--kai: "LXGW WenKai", "霞鹜文楷", "Kaiti SC", "STKaiti", "KaiTi", var(--song);--mono: ui-monospace, "SF Mono", "JetBrains Mono", Consolas, "Noto Sans Mono CJK SC", monospace}[data-theme=dark]{--bg: #121110;--text: #e8e6e1;--muted: #8f8b82;--faint: #4a473f;--hairline: #262421;--accent: #d07a52;--accent-soft: rgba(208, 122, 82, .12);--card: #191815;--card-border: #262421;--card-shadow: 0 8px 22px rgba(0, 0, 0, .35)}*{margin:0;padding:0;box-sizing:border-box}a{color:inherit;text-decoration:none}html{scroll-behavior:smooth}body{font-family:var(--song);background-color:var(--bg);color:var(--text);line-height:1.85;transition:background-color .3s ease,color .3s ease;-webkit-font-smoothing:antialiased}::selection{background:var(--accent);color:#fff}#progress{position:fixed;top:0;left:0;height:3px;width:0;background:var(--accent);z-index:99;transition:width .1s linear}.wrap{max-width:1120px;margin:0 auto;padding:0 28px}.wrap-narrow{max-width:760px;margin:0 auto;padding:0 28px}.topbar{display:flex;align-items:center;justify-content:space-between;padding:26px 0 0;margin-bottom:56px}.topbar .links{display:flex;gap:20px;font-size:15px;overflow-x:auto;scrollbar-width:none}.topbar .links::-webkit-scrollbar{display:none}.topbar .links a{color:var(--muted);transition:color .2s;white-space:nowrap}.topbar .links a:hover{color:var(--accent)}.topbar .links a.back{color:var(--faint);font-size:13.5px}#themeBtn{background:none;border:none;cursor:pointer;color:var(--muted);font-size:16px;padding:4px;flex:none;transition:color .2s,transform .3s}#themeBtn:hover{color:var(--accent);transform:rotate(15deg)}.sec-title{font-family:var(--kai);font-size:13px;font-weight:400;letter-spacing:.28em;color:var(--muted);margin-bottom:6px;display:flex;align-items:baseline;justify-content:space-between;gap:12px}.sec-title a{font-size:12px;letter-spacing:.1em;color:var(--faint);transition:color .2s}.sec-title a:hover{color:var(--accent)}.post-list{list-style:none}.post-list li{border-bottom:1px solid var(--hairline)}.post-list a{display:flex;align-items:baseline;justify-content:space-between;gap:18px;padding:18px 0}.post-title{font-size:17.5px;font-weight:600;line-height:1.7;transition:color .18s ease,transform .18s ease}.post-list a:hover .post-title{color:var(--accent);transform:translate(3px)}.post-desc{display:block;font-family:var(--kai);font-size:12.5px;color:var(--faint);letter-spacing:.04em;margin-top:2px}.post-date{font-family:var(--kai);font-size:12.5px;color:var(--faint);white-space:nowrap;font-variant-numeric:tabular-nums;letter-spacing:.05em}.post-list a:hover .post-date{color:var(--muted)}.more-link{display:inline-block;margin-top:14px;font-size:13.5px;color:var(--muted);font-family:var(--kai);letter-spacing:.06em}.more-link:hover{color:var(--accent)}@media(max-width:560px){.post-list .post-desc{display:none}}.year{font-family:var(--kai);font-size:13px;color:var(--faint);letter-spacing:.12em;margin:30px 0 4px}.year:first-of-type{margin-top:10px}.tag-chips{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 6px}.tag-chip{font-family:var(--kai);font-size:12px;color:var(--muted);border:1px solid var(--hairline);border-radius:999px;padding:2px 12px;transition:color .2s,border-color .2s}.tag-chip:hover,.tag-chip.on{color:var(--accent);border-color:var(--accent)}.proj-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:12px}@media(max-width:620px){.proj-grid{grid-template-columns:1fr}}.pcard{background:var(--card);border:1px solid var(--card-border);border-radius:10px;padding:16px 18px;display:flex;flex-direction:column;transition:transform .22s ease,border-color .22s ease,box-shadow .22s ease}.pcard:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--accent) 40%,var(--card-border));box-shadow:var(--card-shadow)}.pcard .p-top{display:flex;align-items:baseline;gap:9px}.pcard .p-name{font-weight:700;font-size:15px;letter-spacing:.02em;font-family:var(--mono)}.pcard .p-name a:hover{color:var(--accent)}.pcard .p-ext{margin-left:auto;color:var(--faint);font-size:12px;display:flex;gap:10px;transition:color .2s}.pcard:hover .p-ext{color:var(--accent)}.pcard p{margin-top:6px;font-family:var(--kai);font-size:12.5px;color:var(--muted);line-height:1.8;flex:1}.pcard .p-tech{margin-top:10px;display:flex;flex-wrap:wrap;gap:6px 12px;font-family:var(--kai);font-size:11px;color:var(--faint)}.rail{position:sticky;top:28px;display:flex;flex-direction:column;gap:18px}.widget{background:var(--card);border:1px solid var(--card-border);border-radius:12px;padding:20px}.widget-title{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px;font-size:15px;font-weight:700;letter-spacing:.14em}.widget-title .en{font-family:var(--kai);font-size:10px;font-weight:400;letter-spacing:.3em;color:var(--faint)}.host{display:flex;align-items:center;gap:14px}.seal{width:44px;height:44px;flex:none;background:var(--accent);color:#faf9f6;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;border-radius:8px;outline:2px solid var(--bg);outline-offset:-5px;font-family:var(--kai)}[data-theme=dark] .seal{color:#121110}.host h3{font-size:18px;font-weight:700;letter-spacing:.04em}.host .role{font-family:var(--kai);font-size:11.5px;color:var(--muted);letter-spacing:.16em;margin-top:1px}.widget .bio{margin-top:13px;font-family:var(--kai);font-size:13px;color:var(--muted);line-height:2}.w-links{display:flex;gap:13px;margin-top:13px;font-family:var(--kai);font-size:12px;letter-spacing:.05em;flex-wrap:wrap}.u-dot{color:var(--muted);border-bottom:1px dotted var(--faint);padding-bottom:1px;transition:color .2s,border-color .2s}.u-dot:hover{color:var(--accent);border-bottom-color:var(--accent)}.js-hm{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,1fr);gap:3px}.js-hm i{aspect-ratio:1;border-radius:2px;background:var(--hairline)}.js-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;font-family:var(--kai);font-size:11px;text-align:center}.js-cal .wd{color:var(--faint)}.js-cal .day{padding:4px 0;border-radius:5px;color:var(--muted)}.js-cal .day.pad{visibility:hidden}.js-cal .day.today{background:var(--accent);color:#fff;font-weight:700}.typeline{margin-top:14px;font-size:clamp(17px,2.4vw,22px);font-weight:600;color:var(--text);min-height:1.8em;letter-spacing:.03em}.tw-cursor{display:inline-block;width:2px;height:1.05em;background:var(--accent);vertical-align:-.12em;margin-left:4px;animation:blink 1s step-end infinite}@keyframes blink{50%{opacity:0}}.site-foot{margin-top:72px;padding:26px 0 52px;border-top:1px solid var(--hairline);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;font-family:var(--kai);font-size:13px;color:var(--faint)}.site-foot .links{display:flex;gap:16px}.site-foot a{color:var(--muted)}.site-foot a:hover{color:var(--accent)}.hero{padding-top:8px}h1.site-title{font-size:clamp(30px,5vw,42px);font-weight:900;letter-spacing:.02em;line-height:1.35}.intro{margin-top:16px;font-size:15.5px;color:var(--muted);max-width:56ch;font-family:var(--kai)}.intro a{color:var(--text);border-bottom:1px dotted var(--faint);padding-bottom:1px;transition:color .2s,border-color .2s}.intro a:hover{color:var(--accent);border-bottom-color:var(--accent)}.page-head{padding-top:8px;margin-bottom:30px}.page-head h1{font-size:clamp(26px,4vw,34px);font-weight:900;letter-spacing:.02em}.page-head .sub{margin-top:10px;font-family:var(--kai);font-size:13.5px;color:var(--muted)}.post-head h1{font-size:clamp(26px,4.4vw,36px);font-weight:900;line-height:1.5;letter-spacing:.02em}.post-head .meta{margin-top:12px;font-family:var(--kai);font-size:13px;color:var(--faint);letter-spacing:.06em;display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}.post-head .meta a:hover{color:var(--accent)}.post-head hr{border:none;border-top:1px solid var(--hairline);margin:26px 0 8px}.post-nav{display:flex;justify-content:space-between;gap:16px;margin-top:44px;padding-top:20px;border-top:1px solid var(--hairline);font-family:var(--kai);font-size:13.5px}.post-nav a{color:var(--muted);transition:color .2s}.post-nav a:hover{color:var(--accent)}.prose{margin-top:10px}.prose p{margin:16px 0;font-size:15.5px}.prose h2,.prose h3,.prose h4{font-weight:700;line-height:1.6;margin:34px 0 12px;letter-spacing:.03em}.prose h2{font-size:21px;padding-bottom:8px;border-bottom:1px solid var(--hairline)}.prose h3{font-size:17.5px}.prose h4{font-size:15.5px;color:var(--muted)}.prose ul,.prose ol{padding-left:1.6em;margin:14px 0}.prose li{margin:6px 0}.prose li::marker{color:var(--accent)}.prose blockquote{margin:20px 0;padding:10px 18px;border-left:3px solid var(--accent);background:var(--accent-soft);font-family:var(--kai);font-size:14px;color:var(--muted);border-radius:0 8px 8px 0}.prose blockquote p{margin:4px 0}.prose a{color:var(--accent);border-bottom:1px dotted var(--accent);padding-bottom:1px}.prose a:hover{border-bottom-style:solid}.prose img{max-width:100%;border-radius:8px;border:1px solid var(--hairline);margin:18px 0}.prose hr{border:none;border-top:1px solid var(--hairline);margin:32px 0}.prose table{width:100%;border-collapse:collapse;margin:18px 0;font-size:13.5px}.prose th,.prose td{border:1px solid var(--hairline);padding:8px 12px;text-align:left}.prose th{font-family:var(--kai);font-weight:400;color:var(--muted);background:var(--card)}.prose :not(pre)>code{font-family:var(--mono);font-size:.85em;background:var(--accent-soft);border:1px solid var(--hairline);border-radius:4px;padding:1px 6px;color:var(--accent)}.prose pre{margin:20px 0;padding:16px 18px;border-radius:10px;border:1px solid var(--hairline);overflow-x:auto;font-size:13px;line-height:1.8}.prose pre code{font-family:var(--mono)}.astro-code span{color:var(--shiki-light)!important}.astro-code{background-color:var(--shiki-light-bg)!important}[data-theme=dark] .astro-code span{color:var(--shiki-dark)!important}[data-theme=dark] .astro-code{background-color:var(--shiki-dark-bg)!important}.about-block{margin-top:34px}.about-block .ab-label{font-family:var(--kai);font-size:12.5px;letter-spacing:.28em;color:var(--muted);margin-bottom:10px}.skill-row{display:flex;flex-wrap:wrap;gap:9px}.skill-row span{font-family:var(--kai);font-size:12.5px;color:var(--accent);background:var(--accent-soft);border-radius:999px;padding:3px 14px}.timeline{border-left:1px solid var(--hairline);margin-left:5px;padding-left:22px}.timeline .tl{position:relative;padding-bottom:22px}.timeline .tl:last-child{padding-bottom:4px}.timeline .tl:before{content:"";position:absolute;left:-27.5px;top:11px;width:9px;height:9px;border-radius:50%;background:var(--bg);border:2px solid var(--accent)}.timeline .tl-when{font-family:var(--kai);font-size:12px;color:var(--accent);letter-spacing:.08em}.timeline .tl h3{font-size:16px;font-weight:700;margin-top:2px}.timeline .tl p{font-family:var(--kai);font-size:13px;color:var(--muted);margin-top:4px}.friend-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:12px}@media(max-width:620px){.friend-grid{grid-template-columns:1fr}}.friend-card{background:var(--card);border:1px solid var(--card-border);border-radius:10px;padding:16px 18px;transition:transform .22s ease,border-color .22s ease,box-shadow .22s ease}.friend-card:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--accent) 40%,var(--card-border));box-shadow:var(--card-shadow)}.friend-card h3{font-size:15.5px;font-weight:700;display:flex;align-items:baseline;gap:8px}.friend-card h3 .f-url{font-family:var(--mono);font-size:11px;color:var(--faint);font-weight:400}.friend-card:hover h3{color:var(--accent)}.friend-card p{margin-top:5px;font-family:var(--kai);font-size:12.5px;color:var(--muted)}.notice{margin-top:28px;padding:14px 18px;border:1px dashed var(--card-border);border-radius:10px;font-family:var(--kai);font-size:13px;color:var(--muted);line-height:2}.notice b{color:var(--accent);font-weight:400}#search :is(input,.pagefind-ui__search-input){width:100%;font-family:var(--song);font-size:16px;background:var(--card);border:1px solid var(--card-border);border-radius:10px;padding:12px 16px;color:var(--text);outline:none}#search :is(input,.pagefind-ui__search-input):focus{border-color:var(--accent)}.pagefind-ui__results{margin-top:10px;list-style:none}.pagefind-ui__result{border-bottom:1px solid var(--hairline);padding:14px 0}.pagefind-ui__result-title a{font-size:16.5px;font-weight:600}.pagefind-ui__result-title a:hover{color:var(--accent)}.pagefind-ui__result-excerpt{font-family:var(--kai);font-size:13px;color:var(--muted);margin-top:4px}.pagefind-ui__message{font-family:var(--kai);font-size:13px;color:var(--faint);margin-top:12px}.mark,.pagefind-ui__result mark{background:var(--accent-soft);color:var(--accent);border-radius:3px;padding:0 2px}.nf{text-align:center;padding:90px 0 60px}.nf h1{font-size:64px;font-weight:900;color:var(--accent);font-family:var(--kai)}.nf p{margin-top:12px;font-family:var(--kai);color:var(--muted)}.nf a{display:inline-block;margin-top:22px;font-family:var(--kai);font-size:14px;color:var(--accent);border-bottom:1px dotted var(--accent)}.admin-topbar{display:flex;align-items:center;gap:22px;padding:20px 0;border-bottom:1px solid var(--hairline);margin-bottom:34px}.admin-topbar nav a{color:var(--muted);transition:color .2s}.admin-topbar nav a:hover{color:var(--accent)}.a-field{margin-bottom:16px}.a-label{display:block;font-family:var(--kai);font-size:12.5px;letter-spacing:.1em;color:var(--muted);margin-bottom:6px}.a-input,.a-textarea{width:100%;background:var(--card);border:1px solid var(--card-border);border-radius:8px;padding:9px 12px;color:var(--text);font-family:var(--song);font-size:14.5px;outline:none;transition:border-color .2s}.a-input:focus,.a-textarea:focus{border-color:var(--accent)}.a-textarea{resize:vertical;line-height:1.8}.a-mono{font-family:var(--mono);font-size:13px}.a-btn{display:inline-flex;align-items:center;gap:6px;background:var(--accent);color:#fff;border:none;border-radius:8px;padding:9px 18px;font-family:var(--kai);font-size:14px;cursor:pointer;transition:opacity .2s,transform .15s;text-decoration:none}.a-btn:hover{opacity:.9;transform:translateY(-1px)}.a-btn.ghost{background:transparent;color:var(--muted);border:1px solid var(--card-border)}.a-btn.ghost:hover{color:var(--accent);border-color:var(--accent);opacity:1}.a-btn.danger{background:transparent;color:var(--accent);border:1px solid var(--accent)}.a-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.a-table{width:100%;border-collapse:collapse;font-size:14px}.a-table th{font-family:var(--kai);font-weight:400;color:var(--muted);text-align:left;padding:8px 10px;border-bottom:1px solid var(--card-border)}.a-table td{padding:10px;border-bottom:1px solid var(--hairline)}.a-badge{font-family:var(--kai);font-size:11px;padding:1px 9px;border-radius:999px;background:var(--accent-soft);color:var(--accent)}.a-stat{background:var(--card);border:1px solid var(--card-border);border-radius:10px;padding:14px 18px}.a-stat b{font-size:22px;font-weight:800}.a-stat span{display:block;font-family:var(--kai);font-size:12px;color:var(--muted);margin-top:2px}.hm-sub{margin-top:10px;font-family:var(--kai);font-size:11.5px;color:var(--faint);letter-spacing:.06em}.cover-banner{width:100%;max-height:420px;object-fit:cover;border-radius:12px;border:1px solid var(--hairline);margin-top:22px}.home-grid{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:64px;align-items:start}@media(max-width:1080px){.home-grid{grid-template-columns:1fr;gap:40px}.rail{position:static}}section.block{margin-top:56px}@media(max-width:640px){.wrap,.wrap-narrow{padding:0 20px}.topbar{margin-bottom:40px}}
