:root{
  --bg:#f7f7f5;--surface:#fff;--fg:#1f2328;--fg2:#3d434b;--mut:#6a717a;--bd:#e4e4e0;--bd2:#cfcfca;
  --ac:#0b7a5f;--ac-soft:#e4f3ed;--hover:#f2f5f3;--th:#f5f5f2;
  --note-bg:#fff8e5;--note-fg:#6b5300;--note-bd:#f0dfa8;
  --r:12px;--w:1120px;color-scheme:light dark
}
@media (prefers-color-scheme:dark){:root{
  --bg:#111315;--surface:#181b1e;--fg:#e6e8ea;--fg2:#c4c8cc;--mut:#959ca4;--bd:#2a2e33;--bd2:#41474e;
  --ac:#3ecf9b;--ac-soft:#163128;--hover:#1f2327;--th:#1c1f23;
  --note-bg:#2a2410;--note-fg:#e8d18a;--note-bd:#4a3f17
}}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-padding-top:80px}
body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.7 system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC","Noto Sans SC",sans-serif;-webkit-font-smoothing:antialiased}
a{color:var(--ac);text-decoration:none}
a:hover{text-decoration:underline;text-underline-offset:3px}
:focus-visible{outline:2px solid var(--ac);outline-offset:2px;border-radius:4px}
h1,h2,h3{margin:0;line-height:1.3;letter-spacing:-.01em}
h1{font-size:clamp(1.6rem,1.2rem + 1.6vw,2.2rem);font-weight:700}
h2{font-size:1.3rem;font-weight:650}
h3{font-size:1.05rem;font-weight:600}
p,ul,ol{margin:0}
.wrap{max-width:var(--w);margin:0 auto;padding:0 20px}
.mut{color:var(--mut)}

/* site header */
.top{position:sticky;top:0;z-index:10;border-bottom:1px solid var(--bd);background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:saturate(1.4) blur(10px);backdrop-filter:saturate(1.4) blur(10px)}
.top-in{display:flex;align-items:center;gap:20px;min-height:58px}
.brand{display:flex;align-items:center;gap:8px;flex:none;font-weight:700;font-size:1.06rem;color:var(--fg)}
.brand:hover{text-decoration:none}
.brand svg{width:26px;height:26px;border-radius:7px}
.nav{display:flex;gap:2px;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}
.nav::-webkit-scrollbar{display:none}
.nav a{padding:5px 10px;border-radius:8px;color:var(--fg2);font-size:.93rem;white-space:nowrap}
.nav a:hover{background:var(--hover);color:var(--fg);text-decoration:none}
.nav a[aria-current]{background:var(--ac-soft);color:var(--ac);font-weight:600}
.lang{flex:none;padding:3px 12px;border:1px solid var(--bd2);border-radius:999px;color:var(--fg2);font-size:.86rem}
.lang:hover{border-color:var(--ac);color:var(--ac);text-decoration:none}
@media (max-width:760px){
  .top-in{flex-wrap:wrap;gap:4px 12px;padding-top:10px}
  .lang{margin-left:auto}
  .nav{order:3;flex-basis:100%;margin:0 -20px;padding:0 14px 8px;-webkit-mask-image:linear-gradient(90deg,#000 85%,transparent);mask-image:linear-gradient(90deg,#000 85%,transparent)}
}

/* page */
main.wrap{padding-top:24px;padding-bottom:72px}
time{white-space:nowrap}
.crumbs ol{display:flex;gap:6px;margin:0 0 14px;padding:0;list-style:none;font-size:.87rem;color:var(--mut)}
.crumbs li{flex:none;white-space:nowrap}
.crumbs li:last-child{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}  /* long post titles */
.crumbs li+li::before{content:"/";margin-right:6px;color:var(--bd2)}
.crumbs a{color:var(--mut)}
.page-h h1{margin-bottom:10px}
.lede{max-width:70ch;font-size:1.07rem;color:var(--fg2)}
.meta{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:.87rem;color:var(--mut)}
.page-h .meta{margin-top:10px}
.note{margin:22px 0 0;padding:10px 14px;border:1px solid var(--note-bd);border-radius:10px;background:var(--note-bg);color:var(--note-fg);font-size:.9rem}
section{margin-top:44px}
.sec-h{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 16px;margin-bottom:12px}
.sec-h h2 a{color:var(--fg)}
.sec-h h2 a:hover{color:var(--ac)}
.more{margin-top:10px;font-size:.9rem}

/* tables */
/* right-edge shadow appears only while more columns are hidden (the local cover scrolls over it at the end) */
.tw{overflow-x:auto;border:1px solid var(--bd);border-radius:var(--r);-webkit-overflow-scrolling:touch;
  background:linear-gradient(to left,var(--surface) 40%,transparent) 100% 0/28px 100% no-repeat local,
    radial-gradient(farthest-side at 100% 50%,rgb(0 0 0/.16),transparent) 100% 0/12px 100% no-repeat scroll,var(--surface)}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:.93rem;line-height:1.5}
th,td{padding:10px 14px;border-bottom:1px solid var(--bd);text-align:left;vertical-align:top}
thead th{background:var(--th);color:var(--mut);font-size:.8rem;font-weight:600;white-space:nowrap;vertical-align:bottom}
tbody tr:last-child>*{border-bottom:0}
tbody th{position:sticky;left:0;z-index:1;min-width:10em;background:var(--surface);font-weight:600;box-shadow:inset -1px 0 var(--bd)}
thead th:first-child{position:sticky;left:0;z-index:2;box-shadow:inset -1px 0 var(--bd)}
td{min-width:7em;color:var(--fg2)}
tbody tr:hover>*{background:var(--hover)}
.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
td.num{color:var(--fg);font-weight:500}
.c{min-width:4em;text-align:center}
.nil{color:var(--bd2)}
.yes{color:var(--ac);font-weight:700}
.no{color:var(--mut)}
.sub{display:block;color:var(--mut);font-size:.78rem;font-weight:400}
@media (max-width:760px){
  table{font-size:.88rem}
  th,td{padding:9px 11px}
  tbody th{min-width:8em;max-width:11em}
  td{min-width:9em}
}

/* home */
.hero{padding:20px 0 4px}
.hero h1{font-size:clamp(1.8rem,1.3rem + 2vw,2.6rem)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.card{display:flex;flex-direction:column;gap:8px;padding:18px;border:1px solid var(--bd);border-radius:var(--r);background:var(--surface);color:inherit;transition:border-color .15s,box-shadow .15s}
a.card:hover{border-color:var(--ac);box-shadow:0 6px 20px rgb(0 0 0/.06);text-decoration:none}
.card h3{color:var(--fg)}
.card p{font-size:.9rem}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chips span{padding:1px 9px;border:1px solid var(--bd);border-radius:999px;background:var(--bg);color:var(--fg2);font-size:.78rem}
.card-f{display:flex;justify-content:space-between;margin-top:auto;padding-top:6px;color:var(--mut);font-size:.85rem}
.card-f .go{color:var(--ac)}
.badge{display:inline-block;padding:1px 9px;border-radius:999px;background:var(--ac-soft);color:var(--ac);font-size:.76rem;font-weight:600;vertical-align:middle}

/* blog */
.posts{margin:0;padding:0;list-style:none;border:1px solid var(--bd);border-radius:var(--r);background:var(--surface)}
.posts li{padding:16px 18px}
.posts li+li{border-top:1px solid var(--bd)}
.posts h2,.posts h3{margin:2px 0 6px;font-size:1.08rem}
.posts h2 a,.posts h3 a{color:var(--fg)}
.posts h2 a:hover,.posts h3 a:hover{color:var(--ac)}
.posts .mut{max-width:80ch;font-size:.92rem}
.prose{max-width:72ch;margin-top:32px;color:var(--fg2);font-size:1.02rem;line-height:1.85}
.prose>*+*{margin-top:1em}
.prose h2{margin-top:2.2em;padding-bottom:6px;border-bottom:1px solid var(--bd);color:var(--fg);font-size:1.3rem}
.prose h3{margin-top:1.7em;color:var(--fg);font-size:1.08rem}
.prose h2+*,.prose h3+*{margin-top:.6em}
.prose ul,.prose ol{padding-left:1.3em}
.prose li+li{margin-top:.4em}
.prose li>ul,.prose li>ol{margin-top:.4em}
.prose strong{color:var(--fg);font-weight:650}
.prose a{text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--ac) 35%,transparent);text-underline-offset:3px}
.prose a:hover{text-decoration-color:var(--ac)}
.prose blockquote{margin-left:0;margin-right:0;padding:2px 0 2px 16px;border-left:3px solid var(--bd2);color:var(--mut)}
.prose hr{margin:2.4em 0;border:0;border-top:1px solid var(--bd)}
.prose .tw{margin-top:1.2em}
.prose table{line-height:1.55}
.prose code{padding:1px 5px;border-radius:5px;background:var(--th);font-size:.9em}

/* footer */
.foot{padding:28px 0 44px;border-top:1px solid var(--bd);color:var(--mut);font-size:.85rem}
.foot p{max-width:80ch}
.foot p+p{margin-top:8px}
.foot a{color:var(--mut);text-decoration:underline;text-underline-offset:3px}
