:root{
  --bg:#F7EFDF;
  --bg-panel:#FDF9F1;
  --bg-panel-2:#EFE5D2;
  --bg-side:#F4ECDB;
  --bg-selected:#EEE6D3;
  --hero-top:#FBF6EA;
  --hero-bottom:#F2E8D6;
  --border:#E2D6C0;
  --border-soft:#EBE1CC;
  --border-strong:#CFC1A5;
  --accent:#1E3C9E;
  --accent-dark:#14296F;
  --accent-soft:#EEF1FB;
  --accent-wash:#E5EAF9;
  --text:#2A2419;
  --text-muted:#6E6455;
  --text-soft:#9A8F7C;
  --success:#2E7D4F;
  --success-soft:#E6F2EA;
  --warning:#C98A1C;
  --warning-dark:#8A5D0E;
  --warning-soft:#FBF1DE;
  --error:#B8352B;
  --teal:#1F7A86;
  --teal-soft:#E3F1F2;
  --slate:#5B6B96;
  --slate-soft:#ECEEF4;
  --white:#FFFFFF;
  --traffic-red:#EC6A5E;
  --traffic-yellow:#F4BF4F;
  --traffic-green:#61C554;
  --flag-red:#D7282F;
  --flag-blue:#0055A4;
  --flag-navy:#3C3B6E;
  --flag-white:#FFFFFF;
  --transparent:transparent;
  --shadow-panel:0 28px 58px -26px rgb(30 60 158 / .20),0 8px 20px -12px rgb(30 60 158 / .10),inset 0 1px 0 rgb(255 255 255 / .86);
  --shadow-soft:0 18px 38px -20px rgb(30 60 158 / .20),inset 0 1px 0 rgb(255 255 255 / .82);
  --shadow-button:0 8px 20px -7px rgb(30 60 158 / .45),inset 0 1px 0 rgb(255 255 255 / .18);
  --radius-xs:6px;
  --radius-s:8px;
  --radius-m:12px;
  --radius-l:14px;
  --radius-xl:28px;
  --radius-round:999px;
  --font-display:'Inter','Noto Sans SC','PingFang SC','Hiragino Sans GB','Microsoft YaHei',system-ui,sans-serif;
  --font-body:'Inter','Noto Sans SC','PingFang SC','Hiragino Sans GB','Microsoft YaHei',system-ui,sans-serif;
  --font-mono:'JetBrains Mono','SFMono-Regular',Menlo,Consolas,'Liberation Mono',monospace;
  --wrap:1160px;
  --reading:760px;
  --gutter:24px;
  --header-height:64px;
  --section-space:96px;
  --focus-ring:0 0 0 3px rgb(30 60 158 / .22);
}
*,
*::before,
*::after{box-sizing:border-box}
html{
  scroll-behavior:smooth;
  scroll-padding-top:calc(var(--header-height) + 16px);
  -webkit-text-size-adjust:100%;
}
html.nav-open{overflow:hidden}
body{
  min-width:0;
  min-height:100vh;
  margin:0;
  color:var(--text);
  background:var(--bg);
  font:400 15px/1.65 var(--font-body);
  -webkit-font-smoothing:antialiased;
  overflow-wrap:break-word;
}
body::before{
  position:fixed;
  z-index:100;
  inset:0;
  pointer-events:none;
  content:"";
  opacity:.04;
  mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size:160px 160px;
}
body,
button,
input,
select,
textarea{font-family:var(--font-body)}
img,
svg,
video{display:block;max-width:100%;height:auto}
svg{flex-shrink:0}
a{color:inherit;text-decoration:none}
button,
input,
select,
textarea{font:inherit}
button{color:inherit}
ul,
ol{margin:0;padding:0}
nav ul,
nav ol,
.list-reset{list-style:none}
p,
h1,
h2,
h3,
h4,
figure,
blockquote,
dl,
dd{margin:0}
h1,
h2,
h3,
h4{
  font-family:var(--font-display);
  color:var(--text);
  text-wrap:balance;
}
h1{
  font-size:clamp(52px,5.55vw,68px);
  line-height:1.1;
  letter-spacing:-.02em;
  font-weight:800;
}
h2{
  font-size:clamp(30px,3.3vw,44px);
  line-height:1.16;
  letter-spacing:-.02em;
  font-weight:800;
}
h3{
  font-size:clamp(20px,2vw,26px);
  line-height:1.3;
  letter-spacing:-.012em;
  font-weight:750;
}
p + p{margin-top:1em}
code,
kbd,
pre{font-family:var(--font-mono)}
code{overflow-wrap:anywhere}
pre{
  max-width:100%;
  overflow-x:auto;
  padding:18px;
  border:1px solid var(--border);
  border-radius:var(--radius-m);
  background:var(--bg-panel-2);
  color:var(--text);
  -webkit-overflow-scrolling:touch;
}
table{border-collapse:collapse}
::selection{background:var(--accent-wash);color:var(--accent-dark)}
:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:3px;
  box-shadow:var(--focus-ring);
}
.wrap{
  width:100%;
  max-width:var(--wrap);
  margin-inline:auto;
  padding-inline:var(--gutter);
}
.reading{
  width:100%;
  max-width:var(--reading);
  margin-inline:auto;
  padding-inline:var(--gutter);
}
.section{
  padding-top:var(--section-space);
  padding-bottom:var(--section-space);
}
.section-sm{
  padding-top:64px;
  padding-bottom:64px;
}
.section-head{
  max-width:760px;
  margin-bottom:36px;
}
.section-head.center{
  margin-inline:auto;
  text-align:center;
}
.section-head p{
  margin-top:12px;
  color:var(--text-muted);
  font-size:17px;
}
.muted{color:var(--text-muted)}
.mono{font-family:var(--font-mono)}
.hl{color:var(--accent)}
.no-break{white-space:nowrap}
.sr-only{
  position:absolute;
  width:1px;
  height:1px;
  padding:0;
  margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
  border:0;
}
.reveal{transition:opacity .65s ease,transform .65s ease}
.reveal.pending{opacity:0;transform:translateY(16px)}
.reveal.shown{opacity:1;transform:none}
.panel,
.card{
  min-width:0;
  border:1px solid var(--border);
  background:var(--bg-panel);
  border-radius:var(--radius-l);
  box-shadow:var(--shadow-soft);
}
.panel{padding:28px}
.card{padding:24px}
.badge,
.kicker,
.status-pill{
  display:inline-flex;
  align-items:center;
  gap:7px;
  max-width:100%;
  min-height:26px;
  padding:4px 10px;
  border:1px solid var(--border);
  border-radius:var(--radius-round);
  background:var(--bg-panel);
  color:var(--text-muted);
  font-size:12.5px;
  font-weight:600;
  line-height:1.2;
}
.badge-dot,
.kicker-dot,
.status-dot{
  width:7px;
  height:7px;
  flex:0 0 7px;
  border-radius:50%;
  background:var(--accent);
}
.badge.success{color:var(--success);background:var(--success-soft);border-color:var(--success-soft)}
.badge.warning{color:var(--warning-dark);background:var(--warning-soft);border-color:var(--warning-soft)}
.badge.accent{color:var(--accent);background:var(--accent-soft);border-color:var(--accent-soft)}
.btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  min-width:24px;
  min-height:46px;
  padding:10px 22px;
  border:1px solid var(--transparent);
  border-radius:var(--radius-s);
  cursor:pointer;
  font-weight:650;
  line-height:1;
  transition:transform .16s ease,box-shadow .16s ease,background-color .16s ease,border-color .16s ease;
}
.btn:hover{transform:translateY(-1px)}
.btn-primary{
  color:var(--white);
  background:linear-gradient(180deg,var(--accent),var(--accent-dark));
  box-shadow:var(--shadow-button);
}
.btn-primary:hover{box-shadow:0 12px 25px -8px rgb(30 60 158 / .52),inset 0 1px 0 rgb(255 255 255 / .18)}
.btn-secondary{
  color:var(--text);
  background:rgb(255 255 255 / .42);
  border-color:var(--border-strong);
}
.btn-secondary:hover{background:var(--bg-panel);border-color:var(--text)}
.btn-small{min-height:38px;padding:8px 15px;font-size:14px}
.icon-button{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:44px;
  height:44px;
  border:0;
  border-radius:var(--radius-s);
  background:var(--transparent);
  cursor:pointer;
}
.site-header{
  position:sticky;
  z-index:80;
  top:0;
  height:var(--header-height);
  border-bottom:1px solid rgb(226 214 192 / .72);
  background:rgb(251 246 234 / .88);
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px);
}
.header-inner{
  position:relative;
  display:flex;
  align-items:center;
  gap:24px;
  height:var(--header-height);
}
.brand{
  display:inline-flex;
  align-items:center;
  gap:10px;
  flex-shrink:0;
  margin-right:auto;
}
.brand img{width:34px;height:34px}
.brand-word{
  color:var(--text);
  font:800 19px/1 var(--font-display);
  letter-spacing:-.02em;
}
.brand-zh{color:var(--text-muted);font-weight:500}
.desktop-nav{
  display:flex;
  align-items:center;
  gap:5px;
}
.nav-link,
.nav-more-trigger{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:5px;
  min-height:36px;
  padding:7px 11px;
  border:0;
  border-radius:var(--radius-s);
  background:var(--transparent);
  color:var(--text-muted);
  cursor:pointer;
  font-size:14px;
  font-weight:520;
}
.nav-link:hover,
.nav-more-trigger:hover,
.nav-link.is-active,
.nav-more.is-active > .nav-more-trigger{
  color:var(--text);
  background:var(--bg-panel);
}
.nav-link.is-active,
.nav-more.is-active > .nav-more-trigger{font-weight:650}
.nav-more{position:relative}
.nav-more-menu,
.lang-menu{
  position:absolute;
  top:calc(100% + 8px);
  min-width:176px;
  padding:6px;
  border:1px solid var(--border);
  border-radius:var(--radius-m);
  background:var(--bg-panel);
  box-shadow:var(--shadow-panel);
  opacity:0;
  visibility:hidden;
  transform:translateY(-4px);
  transition:opacity .15s ease,transform .15s ease,visibility .15s ease;
}
.nav-more-menu{left:0}
.nav-more:hover .nav-more-menu,
.nav-more:focus-within .nav-more-menu,
.lang-picker.is-open .lang-menu{
  opacity:1;
  visibility:visible;
  transform:none;
}
.nav-more-menu a,
.lang-menu a{
  display:flex;
  align-items:center;
  min-height:38px;
  padding:8px 10px;
  border-radius:var(--radius-xs);
  color:var(--text);
  font-size:13.5px;
}
.nav-more-menu a:hover,
.lang-menu a:hover,
.lang-menu a[aria-current="true"]{background:var(--bg-side)}
.header-tools{
  display:flex;
  align-items:center;
  gap:10px;
}
.lang-picker{position:relative}
.lang-trigger{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  min-height:36px;
  padding:7px 9px;
  border:0;
  border-radius:var(--radius-s);
  background:var(--transparent);
  color:var(--text-muted);
  cursor:pointer;
  font-size:13px;
}
.lang-menu{right:0}
.login-link{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:36px;
  padding:8px 16px;
  border-radius:var(--radius-s);
  color:var(--white);
  background:var(--accent);
  box-shadow:0 6px 14px -6px rgb(30 60 158 / .45);
  font-size:14px;
  font-weight:650;
}
.login-link:hover{background:var(--accent-dark)}
.menu-toggle{display:none}
.menu-toggle-lines,
.menu-toggle-lines::before,
.menu-toggle-lines::after{
  display:block;
  width:20px;
  height:2px;
  border-radius:var(--radius-round);
  background:var(--text);
  content:"";
}
.menu-toggle-lines{position:relative}
.menu-toggle-lines::before{position:absolute;top:-6px}
.menu-toggle-lines::after{position:absolute;top:6px}
.mobile-nav{
  display:none;
  position:absolute;
  z-index:3;
  top:var(--header-height);
  left:var(--gutter);
  right:var(--gutter);
  max-height:calc(100dvh - var(--header-height) - 16px);
  overflow-y:auto;
  padding:10px;
  border:1px solid var(--border);
  border-radius:var(--radius-m);
  background:var(--bg-panel);
  box-shadow:var(--shadow-panel);
  overscroll-behavior:contain;
}
.mobile-nav.is-open{display:block}
.mobile-nav a{
  display:flex;
  align-items:center;
  width:100%;
  min-height:44px;
  padding:10px 12px;
  border-radius:var(--radius-s);
  color:var(--text);
}
.mobile-nav a:hover,
.mobile-nav a.is-active{background:var(--bg-side)}
.mobile-lang{
  margin-top:8px;
  padding-top:8px;
  border-top:1px solid var(--border);
}
.mobile-lang-label{padding:8px 12px;color:var(--text-soft);font-size:12px;font-weight:650}
.nav-veil{
  display:none;
  position:fixed;
  z-index:70;
  inset:var(--header-height) 0 0;
  border:0;
  background:rgb(42 36 25 / .18);
}
.nav-veil.is-open{display:block}
.site-footer{
  position:relative;
  z-index:2;
  border-top:1px solid var(--border);
  background:var(--bg-panel-2);
}
.footer-grid{
  display:grid;
  grid-template-columns:1.5fr 1fr 1.2fr .9fr;
  gap:40px;
  padding-top:64px;
  padding-bottom:44px;
}
.footer-brand p{max-width:330px;margin-top:16px;color:var(--text-muted)}
.footer-title{
  margin-bottom:13px;
  color:var(--text);
  font-size:13px;
  font-weight:750;
  letter-spacing:.04em;
}
.footer-links{display:grid;gap:4px}
.footer-links a{
  display:inline-flex;
  align-items:center;
  min-height:30px;
  width:max-content;
  max-width:100%;
  color:var(--text-muted);
  font-size:14px;
}
.footer-links a:hover{color:var(--accent)}
.footer-legal{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  padding-top:20px;
  padding-bottom:24px;
  border-top:1px solid var(--border);
  color:var(--text-muted);
  font-size:13px;
}
.footer-legal-links{display:flex;flex-wrap:wrap;gap:16px}
#server-status{
  position:relative;
  display:block;
  width:100%;
  max-width:100%;
  overflow:hidden;
  margin-bottom:32px;
}
#server-status > *{min-width:0}
.prose{min-width:0;color:var(--text)}
.prose > * + *{margin-top:18px}
.prose h2{margin-top:64px}
.prose h3{margin-top:36px}
.prose ul,
.prose ol{padding-left:1.35em}
.prose li + li{margin-top:8px}
.prose a:not(.btn){color:var(--accent);text-decoration:underline;text-underline-offset:3px}
.prose img{border-radius:var(--radius-m)}
body:has(.toc-tabs) section[id]{scroll-margin-top:132px}
@media (max-width:960px){
  .desktop-nav{display:none}
  .header-tools{margin-left:auto}
  .menu-toggle{display:inline-flex}
  .footer-grid{grid-template-columns:1.4fr 1fr 1fr}
  .footer-grid > :last-child{grid-column:2 / -1}
}
@media (max-width:768px){
  :root{--section-space:72px}
  h1{font-size:clamp(32px,9.2vw,40px);line-height:1.12}
  h2{font-size:clamp(27px,7vw,35px)}
  .footer-grid{grid-template-columns:1fr 1fr;gap:32px}
  .footer-grid > :last-child{grid-column:auto}
}
@media (max-width:640px){
  :root{--gutter:16px;--header-height:60px}
  .no-break{white-space:normal}
  .tilt,
  [data-tilt]{transform:none}
  .section{padding-top:64px;padding-bottom:64px}
  .panel,
  .card{padding:20px}
  .header-inner{gap:8px}
  .brand img{width:30px;height:30px}
  .brand-word{font-size:17px}
  .lang-picker{display:none}
  .login-link{min-height:36px;padding-inline:13px}
  .mobile-nav{left:var(--gutter);right:var(--gutter);max-width:calc(100% - (var(--gutter) * 2))}
  .footer-grid{grid-template-columns:1fr}
  .footer-legal{align-items:flex-start;flex-direction:column}
}
@media (max-width:360px){
  .brand img{width:28px;height:28px}
  .brand-word{font-size:16px}
  .login-link{padding-inline:10px;font-size:13px}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,
  *::before,
  *::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .reveal,
  .reveal.pending{opacity:1;transform:none}
}