:root{
  --bg:#f7f5ef;
  --surface:#fffdf7;
  --surface-2:#efece1;
  --text:#1b1a17;
  --text-muted:#5d584d;
  --accent:#2c5548;
  --accent-ink:#f7f5ef;
  --border:#dcd6c7;
  --border-strong:#b9b09c;
  --ring:#2c5548;
  --space-1:4px;
  --space-2:8px;
  --space-3:12px;
  --space-4:16px;
  --space-5:24px;
  --space-6:32px;
  --space-7:48px;
  --space-8:64px;
  --radius-sm:4px;
  --radius-md:8px;
  --radius-lg:14px;
  --shadow-1:0 1px 0 rgba(27,26,23,.05);
  --shadow-2:0 2px 10px rgba(27,26,23,.06);
  --container:1040px;
  --narrow:720px;
  --font-sans:"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Source Han Sans SC",system-ui,sans-serif;
  --font-mono:ui-monospace,"SFMono-Regular",Consolas,"Liberation Mono",monospace;
  --h1:34px;
  --h2:22px;
  --h3:18px;
  --body:17px;
  --small:14px;
  --ease:cubic-bezier(.2,.6,.3,1);
  --dur:160ms;
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font-family:var(--font-sans);
  font-size:var(--body);
  line-height:1.7;
  letter-spacing:0;
  padding-bottom:calc(var(--space-8) + var(--space-6));
  overflow-wrap:anywhere;
}
img{max-width:100%;height:auto}
a{color:var(--accent);text-decoration:none;border-bottom:1px solid rgba(44,85,72,.28)}
a:hover{border-bottom-color:var(--accent)}
a:focus-visible,button:focus-visible{outline:2px solid var(--ring);outline-offset:3px}
.skip{position:absolute;left:-9999px;top:0;background:var(--surface);padding:var(--space-2) var(--space-3);z-index:60}
.skip:focus{left:var(--space-3);top:var(--space-2)}

.wrap{max-width:var(--container);margin:0 auto;padding:0 var(--space-5)}
.wrap-narrow{max-width:var(--narrow)}
@media (max-width:639px){.wrap{padding:0 var(--space-4)}}

/* header */
.topbar{background:var(--surface);border-bottom:1px solid var(--border)}
.topbar-inner{max-width:var(--container);margin:0 auto;padding:var(--space-3) var(--space-5);display:flex;align-items:center;gap:var(--space-5);flex-wrap:wrap}
.brand{display:inline-flex;align-items:center;gap:var(--space-2);border-bottom:0;color:var(--text)}
.brand-mark{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-ink);font-size:16px;line-height:1}
.brand-name{font-size:22px;font-weight:700;letter-spacing:.02em}
.nav{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);margin-left:auto}
.nav a{font-size:15px;color:var(--text-muted);border-bottom:1px solid transparent;padding:var(--space-1) 0}
.nav a:hover{color:var(--text);border-bottom-color:var(--border-strong)}
.nav-toggle{display:none;margin-left:auto;min-height:44px;padding:0 var(--space-3);background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-sm);font:inherit;font-size:15px;cursor:pointer}
.nav-toggle-bars{display:inline-block;width:14px;height:2px;background:var(--text);margin-right:var(--space-2);vertical-align:middle;box-shadow:0 5px 0 var(--text),0 -5px 0 var(--text)}
@media (max-width:859px){
  .nav-toggle{display:inline-flex;align-items:center}
  .nav{display:none;flex-basis:100%;flex-direction:column;gap:0;margin:0;border-top:1px solid var(--border);padding-top:var(--space-2)}
  .nav.is-open{display:flex}
  .nav a{padding:var(--space-3) 0;min-height:44px;display:flex;align-items:center;border-bottom:1px solid var(--border)}
}

/* typography */
h1,h2,h3{line-height:1.35;margin:0;letter-spacing:0}
h1{font-size:var(--h1);font-weight:700}
h2{font-size:var(--h2);font-weight:700}
h3{font-size:var(--h3);font-weight:600}
p{margin:0 0 var(--space-4)}
.sec-h{font-size:var(--small);font-family:var(--font-mono);letter-spacing:0;color:var(--text-muted);font-weight:600;margin-bottom:var(--space-4)}

/* intro */
.intro{padding:var(--space-7) 0 var(--space-6);border-bottom:1px solid var(--border)}
.intro-h{font-size:clamp(30px,5vw,44px);line-height:1.2}
.intro-lead{font-size:19px;max-width:44em;margin-top:var(--space-4);margin-bottom:var(--space-3)}
.intro-note{color:var(--text-muted);font-size:15px;max-width:46em;margin-bottom:0}

/* index */
.index{padding:var(--space-7) 0 var(--space-6)}
.idx-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--border)}
.idx{display:grid;grid-template-columns:56px minmax(0,1fr) auto;gap:var(--space-4);align-items:baseline;padding:var(--space-4) 0;border-bottom:1px solid var(--border);border-left:0;color:var(--text)}
.idx:hover{background:var(--surface)}
.idx-num{font-family:var(--font-mono);font-size:15px;color:var(--accent);letter-spacing:.06em}
.idx-body{display:block}
.idx-name{display:block;font-size:19px;font-weight:600;margin-bottom:var(--space-1)}
.idx-note{display:block;color:var(--text-muted);font-size:15px}
.idx-count{font-family:var(--font-mono);font-size:13px;color:var(--text-muted);white-space:nowrap}
@media (max-width:639px){
  .idx{grid-template-columns:40px minmax(0,1fr);gap:var(--space-3)}
  .idx-count{grid-column:2;font-size:13px}
}

/* reminder */
.reminder{padding:var(--space-6) 0 var(--space-7);border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border)}
.rem-list{margin:0;padding-left:1.4em}
.rem-list li{margin-bottom:var(--space-3)}
.rem-list strong{font-weight:700}

/* cards */
.latest,.list,.related{padding:var(--space-7) 0 var(--space-6)}
.cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-4)}
@media (min-width:1024px){.cards{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:639px){.cards{grid-template-columns:1fr}}
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-1)}
.card-link{display:block;padding:var(--space-4) var(--space-4) var(--space-5);border-bottom:0;color:var(--text);height:100%}
.card-col{font-size:12px;color:var(--accent);margin-bottom:var(--space-2);letter-spacing:0}
.card-title{font-size:17px;line-height:1.45;margin-bottom:var(--space-2)}
.card-dek{color:var(--text-muted);font-size:15px;margin:0}
.more{margin-top:var(--space-5);font-size:15px}
.sep{color:var(--border-strong);padding:0 var(--space-2)}

/* tags */
.tagcloud{padding:var(--space-6) 0 var(--space-8);border-top:1px solid var(--border)}
.tag-list{list-style:none;display:flex;flex-wrap:wrap;gap:var(--space-2);margin:0;padding:0}
.tag-list a{display:inline-flex;align-items:center;min-height:40px;padding:0 var(--space-4);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);font-size:15px}

/* page head + crumbs */
.crumbs{font-size:14px;color:var(--text-muted);padding:var(--space-4) 0 0;display:flex;flex-wrap:wrap;gap:var(--space-1);align-items:baseline}
.crumbs a{color:var(--text-muted)}
.crumbs span[aria-current]{color:var(--text)}
.page-head{padding:var(--space-4) 0 var(--space-5);border-bottom:1px solid var(--border)}
.page-head h1{font-size:clamp(26px,4vw,34px)}
.page-lead{color:var(--text-muted);margin-top:var(--space-3);margin-bottom:0;max-width:46em}
.col-intro{padding:var(--space-5) 0 var(--space-2);max-width:46em}
.groups{padding:var(--space-4) 0 var(--space-6)}
.group{padding:var(--space-4) 0;border-top:1px solid var(--border)}
.group:first-child{border-top:0}
.group h2{font-size:19px;margin-bottom:var(--space-2)}
.group p{color:var(--text-muted);margin:0;max-width:46em}

/* article */
.article{padding:var(--space-4) 0 var(--space-5)}
.article h1{margin-bottom:var(--space-3)}
.meta{font-size:14px;color:var(--text-muted);border-bottom:1px solid var(--border);padding-bottom:var(--space-3);margin-bottom:var(--space-5)}
.meta a{color:var(--accent)}
.meta-tags a{margin-right:var(--space-2)}
.prose p{margin-bottom:var(--space-4)}
.prose p:first-child{font-size:18px}
.backline{border-top:1px solid var(--border);padding-top:var(--space-4);font-size:15px;color:var(--text-muted)}

/* footer */
.foot{background:var(--surface);border-top:1px solid var(--border);margin-top:var(--space-7)}
.foot-inner{max-width:var(--container);margin:0 auto;padding:var(--space-6) var(--space-5) var(--space-7);display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1.4fr);gap:var(--space-6)}
.foot-name{font-weight:700;font-size:18px;margin-bottom:var(--space-2)}
.foot-about{color:var(--text-muted);font-size:15px;max-width:32em}
.foot-copy{font-size:13px;color:var(--text-muted);font-family:var(--font-mono);margin:0}
.foot-groups{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-4)}
.foot-h{font-size:13px;color:var(--text-muted);margin-bottom:var(--space-2);letter-spacing:0}
.foot-groups ul{list-style:none;margin:0;padding:0}
.foot-groups li{margin-bottom:var(--space-1)}
.foot-groups a{font-size:15px}
@media (max-width:859px){
  .foot-inner{grid-template-columns:1fr;gap:var(--space-5)}
  .foot-groups{grid-template-columns:repeat(2,minmax(0,1fr))}
}

@media (prefers-reduced-motion:reduce){
  *{transition:none !important;animation:none !important}
}
