:root{--paper: #faf8f5;--paper-raised: #ffffff;--paper-sunken: #f2eee8;--ink: #2b2724;--ink-soft: #6b6360;--ink-faint: #a39a94;--line: #e6e0d7;--line-strong: #d5ccc0;--accent: #9c5a4a;--accent-soft: #f0e4de;--font-serif: "Source Han Serif SC", "Noto Serif SC", "Songti SC", "STSong", "SimSun", Georgia, serif;--font-sans: system-ui, -apple-system, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", Roboto, sans-serif;--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", monospace;--measure: 68rem;--radius: 3px;--gap: 1.25rem;--timeline-line-color: var(--line-strong);--timeline-dot-color: var(--line-strong);--timeline-dot-active-color: var(--accent);--event-card-bg: var(--paper-raised)}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-sans);font-size:16px;line-height:1.75;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}img{max-width:100%;height:auto;display:block}a{color:inherit;text-decoration:none}a:hover{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}.wrap{width:100%;max-width:var(--measure);margin-inline:auto;padding-inline:1.25rem}main{min-height:60vh;padding-block:3rem 5rem}.site-header{border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--paper) 92%,transparent);backdrop-filter:saturate(1.6) blur(8px);position:sticky;top:0;z-index:50}.site-header .wrap{display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:4rem;flex-wrap:wrap}.brand{font-family:var(--font-serif);font-size:1.125rem;font-weight:600;letter-spacing:.02em;display:inline-flex;align-items:center;gap:.5rem}.brand-mark{width:1.5rem;height:1.5rem;border-radius:50%;border:1.5px solid var(--accent);display:inline-grid;place-items:center;color:var(--accent);font-size:.75rem;font-family:var(--font-serif)}.site-nav{display:flex;align-items:center;gap:1.5rem;font-size:.938rem;flex-wrap:wrap}.site-nav a{color:var(--ink-soft);padding-block:.25rem;border-bottom:1.5px solid transparent;transition:color .15s ease,border-color .15s ease}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--ink);border-bottom-color:var(--accent)}.site-footer{border-top:1px solid var(--line);padding-block:2.5rem 2rem;font-size:.875rem;color:var(--ink-soft);background:var(--paper-sunken)}.site-footer .cols{display:flex;flex-wrap:wrap;gap:1.5rem 3rem;justify-content:space-between}.site-footer a{color:var(--ink-soft)}.icp{margin-top:1.75rem;padding-top:1.25rem;border-top:1px dashed var(--line);font-size:.8125rem;color:var(--ink-faint);display:flex;flex-wrap:wrap;gap:.5rem 1.25rem;align-items:center}.icp a:hover{color:var(--accent)}h1,h2,h3{font-family:var(--font-serif);font-weight:600;line-height:1.35;letter-spacing:.01em}h1{font-size:clamp(1.75rem,4vw,2.5rem);margin:0 0 .75rem}h2{font-size:clamp(1.25rem,2.5vw,1.5rem);margin:3rem 0 1rem}.page-lead{color:var(--ink-soft);max-width:42rem;margin:0 0 2.5rem}.works-grid{columns:1;column-gap:var(--gap)}@media(min-width:40rem){.works-grid{columns:2}}@media(min-width:64rem){.works-grid{columns:3}}.work-card{break-inside:avoid;margin-bottom:var(--gap);display:block}.work-card figure{margin:0}.work-card .thumb{background:var(--paper-sunken);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;transition:border-color .2s ease}.work-card:hover .thumb{border-color:var(--line-strong)}.work-card .thumb img{width:100%;height:auto;transition:opacity .3s ease}.work-card:hover .thumb img{opacity:.92}.work-card figcaption{margin-top:.625rem;font-size:.875rem;color:var(--ink-soft);display:flex;justify-content:space-between;gap:.75rem;align-items:baseline}.work-card .caption-title{color:var(--ink)}.work-card time{font-family:var(--font-mono);font-size:.8125rem;color:var(--ink-faint);white-space:nowrap}.year-group{margin-bottom:3.5rem;scroll-margin-top:5rem}.year-heading{display:flex;align-items:baseline;gap:1rem;border-bottom:1px solid var(--line);padding-bottom:.5rem;margin-bottom:1.75rem}.year-heading h2{margin:0;font-family:var(--font-mono);font-size:1.125rem;letter-spacing:.06em}.year-heading .count{font-size:.8125rem;color:var(--ink-faint);margin-left:auto}.year-nav{display:flex;flex-wrap:wrap;gap:.5rem .75rem;align-items:center;margin-bottom:2.5rem;padding:.875rem 1rem;background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);font-size:.875rem}.year-nav .label{color:var(--ink-faint);font-size:.8125rem}.year-nav a{font-family:var(--font-mono);padding:.125rem .5rem;border-radius:2px;background:var(--paper-sunken);color:var(--ink-soft)}.year-nav a:hover{background:var(--accent-soft);color:var(--accent)}.work-detail{max-width:52rem;margin-inline:auto}.work-detail .detail-image{background:var(--paper-sunken);border:1px solid var(--line);border-radius:var(--radius);padding:.75rem}.work-detail .detail-image img{width:100%;height:auto;margin-inline:auto}.work-meta{margin-top:1.5rem;display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;font-size:.875rem;color:var(--ink-soft);align-items:baseline}.work-meta .k{color:var(--ink-faint);font-size:.8125rem;margin-right:.375rem}.work-meta time{font-family:var(--font-mono)}.series-tag{display:inline-block;padding:.125rem .625rem;border:1px solid var(--line-strong);border-radius:999px;font-size:.8125rem;color:var(--ink-soft)}.work-body{margin-top:2rem;padding-top:1.75rem;border-top:1px solid var(--line);max-width:38rem}.pager{margin-top:3rem;padding-top:1.5rem;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:1rem;font-size:.938rem}.pager a{color:var(--ink-soft);max-width:45%}.pager .dir{display:block;font-size:.75rem;color:var(--ink-faint);font-family:var(--font-mono)}.pager .next{text-align:right;margin-left:auto}.timeline{list-style:none;margin:0;padding:0 0 0 2rem;position:relative}.timeline:before{content:"";position:absolute;left:.4375rem;top:.5rem;bottom:.5rem;width:1px;background:var(--timeline-line-color)}.timeline>li{position:relative;padding-bottom:3rem}.timeline>li:last-child{padding-bottom:0}.timeline>li:before{content:"";position:absolute;left:-2rem;top:.5rem;width:.9375rem;height:.9375rem;border-radius:50%;border:2px solid var(--timeline-dot-color);background:var(--paper);transform:translate(-50%) translate(.4375rem)}.timeline>li.milestone:before{border-color:var(--timeline-dot-active-color);background:var(--timeline-dot-active-color);box-shadow:0 0 0 4px var(--accent-soft)}.timeline .tl-year{font-family:var(--font-mono);font-size:1.375rem;font-weight:600;letter-spacing:.06em;margin:0 0 .5rem}.timeline .tl-card{background:var(--event-card-bg);border:1px solid var(--line);border-radius:var(--radius);padding:1.125rem 1.25rem}.timeline .tl-card h3{margin:0 0 .5rem;font-size:1.0625rem}.timeline .tl-card p{margin:0;color:var(--ink-soft);font-size:.938rem}.timeline .tl-works{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.875rem}.compare{position:relative;user-select:none;touch-action:none;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--paper-sunken);--split: 50}.compare img{width:100%;height:auto;display:block}.compare .layer-after{position:absolute;inset:0;clip-path:inset(0 calc((100 - var(--split)) * 1%) 0 0)}.compare .layer-after img{height:100%;object-fit:cover}.compare .divider{position:absolute;top:0;bottom:0;left:calc(var(--split) * 1%);width:2px;background:var(--paper-raised);box-shadow:0 0 0 1px #0000001f;pointer-events:none}.compare .divider:after{content:"";position:absolute;top:50%;left:50%;width:2.25rem;height:2.25rem;transform:translate(-50%,-50%);border-radius:50%;background:var(--paper-raised);box-shadow:0 0 0 1px #0000001f,0 2px 8px #0000001f}.compare .chip{position:absolute;top:.75rem;padding:.1875rem .625rem;border-radius:999px;background:color-mix(in srgb,var(--paper-raised) 88%,transparent);font-size:.75rem;font-family:var(--font-mono);color:var(--ink-soft);pointer-events:none}.compare .chip-a{right:.75rem}.compare .chip-b{left:.75rem}.img-frame{position:relative;background:var(--paper-sunken)}.reveal{opacity:0;transform:translateY(12px)}@media(prefers-reduced-motion:no-preference){.reveal{animation:reveal-in .6s ease forwards}@supports (animation-timeline: view()){.reveal{animation:reveal-in linear both;animation-timeline:view();animation-range:entry 0% cover 26%}}}@keyframes reveal-in{to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none}}.prose h2{margin-top:2.5rem}.prose ul,.prose ol{padding-left:1.35rem}.prose li{margin-block:.375rem}.prose table{width:100%;border-collapse:collapse;font-size:.938rem;margin-block:1.5rem}.prose th,.prose td{border:1px solid var(--line);padding:.5rem .75rem;text-align:left}.prose th{background:var(--paper-sunken);font-weight:600}.notice{border:1px solid var(--line-strong);border-left:3px solid var(--accent);background:var(--paper-raised);border-radius:var(--radius);padding:1rem 1.25rem;font-size:.938rem}.empty{border:1px dashed var(--line-strong);border-radius:var(--radius);padding:2rem;text-align:center;color:var(--ink-soft);font-size:.938rem}.build-banner{background:var(--accent-soft);color:var(--accent);font-size:.8125rem;text-align:center;padding:.375rem 1rem;border-bottom:1px solid var(--line)}.note-feed{list-style:none;margin:0;padding:0}.note-item{padding-block:1.5rem;border-top:1px solid var(--line)}.note-item:first-child{border-top:none;padding-top:0}.note-head{display:flex;align-items:baseline;gap:1rem;flex-wrap:wrap}.note-head time{font-family:var(--font-mono);font-size:.8125rem;color:var(--ink-faint);white-space:nowrap;min-width:5.5rem}.note-title{font-family:var(--font-serif);font-size:1.125rem;color:var(--ink);transition:color .15s ease}.note-head:hover .note-title{color:var(--accent)}.note-excerpt{margin:.625rem 0 0;padding-left:6.5rem;color:var(--ink-soft);font-size:.938rem;max-width:44rem}.note-more{color:var(--accent);white-space:nowrap}@media(max-width:30rem){.note-excerpt{padding-left:0}.note-head time{min-width:0}}.note-thumb{display:block;margin-top:.875rem;padding-left:6.5rem;max-width:30rem}.note-thumb img{width:100%;height:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper-sunken)}@media(max-width:30rem){.note-thumb{padding-left:0}}.note-images{display:flex;flex-direction:column;gap:1rem;margin-bottom:2rem}.note-images img{width:100%;height:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper-sunken)}
