:root{
  --bg:#F6EFE2;
  --bg-hero-top:#FBF6EC;
  --bg-hero-bottom:#F1E7D6;
  --panel:#FFFCF6;
  --panel-2:#EFE5D3;
  --panel-3:#F7F0E4;
  --border:#E2D6C1;
  --border-soft:#EDE3D2;
  --border-strong:#CBBBA1;
  --text:#2A2119;
  --text-muted:#6E6152;
  --text-faint:#9A8B77;
  --ink:#1E1812;
  --on-ink:#FBF6EC;
  --on-ink-muted:rgba(251,246,236,.66);
  --on-ink-hover:rgba(251,246,236,.12);
  --on-accent:#FFFFFF;
  --accent:#3F4FD8;
  --accent-dark:#2B37A6;
  --accent-2:#6C7BEA;
  --accent-soft:rgba(63,79,216,.09);
  --accent-ring:rgba(63,79,216,.45);
  --accent-2-band:rgba(108,123,234,.26);
  --bubble:#E7E8F8;
  --bubble-text:#2B37A6;
  --success:#2F8A57;
  --success-soft:rgba(47,138,87,.13);
  --success-halo:rgba(47,138,87,.28);
  --warn:#C98A1B;
  --warn-soft:rgba(201,138,27,.15);
  --warn-ink:#8A5C0F;
  --error:#C2412F;
  --error-soft:rgba(194,65,47,.1);
  --hl:rgba(255,255,255,.8);
  --hl-soft:rgba(255,255,255,.35);
  --steam:rgba(255,253,248,.96);
  --steam-mid:rgba(255,253,248,.55);
  --steam-0:rgba(255,253,248,0);
  --glow:rgba(63,79,216,.085);
  --glow-warm:rgba(255,251,243,.9);
  --glow-warm-0:rgba(255,251,243,0);
  --grain:rgba(74,48,24,.03);
  --flag-red:#C8333B;
  --flag-blue:#2F3B7A;
  --flag-white:#FFFFFF;
  --flag-edge:rgba(42,33,25,.16);
  --veil:rgba(30,24,18,.34);
  --shadow-window:0 44px 90px -26px rgba(63,79,216,.15),0 16px 36px -14px rgba(63,79,216,.10);
  --shadow-card:0 1px 2px rgba(63,79,216,.05),0 8px 18px -12px rgba(63,79,216,.12);
  --shadow-float:0 22px 44px -14px rgba(63,79,216,.22),0 6px 14px -6px rgba(63,79,216,.12);
  --shadow-cta:0 12px 26px -12px rgba(63,79,216,.6),0 2px 4px rgba(43,55,166,.18);
  --ds-float:drop-shadow(0 16px 18px rgba(63,79,216,.16)) drop-shadow(0 3px 5px rgba(63,79,216,.10));
  --mask-solid:#000000;
  --r-xs:4px;
  --r-sm:6px;
  --r:8px;
  --r-md:10px;
  --r-pill:999px;
  --r-round:50%;
  --font-display:"Inter","Noto Sans SC","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  --font-body:"Inter","Noto Sans SC","PingFang SC","Hiragino Sans","Microsoft YaHei",system-ui,sans-serif;
  --font-mono:"JetBrains Mono",ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
  --weight-normal:400;
  --weight-medium:500;
  --weight-semibold:600;
  --weight-bold:700;
  --weight-display:800;
  --text-xs:12px;
  --text-sm:14px;
  --text-base:16px;
  --text-lead:20px;
  --text-h3:24px;
  --text-h2:36px;
  --text-display:64px;
  --leading-body:1.7;
  --leading-heading:1.15;
  --tracking-display:-.03em;
  --tracking-cjk:-.02em;
  --space-1:8px;
  --space-2:16px;
  --space-3:24px;
  --space-4:32px;
  --space-5:40px;
  --space-6:48px;
  --space-7:56px;
  --space-8:64px;
  --space-9:72px;
  --space-12:96px;
  --gutter:32px;
  --container:1200px;
  --container-wide:1280px;
  --reading:800px;
  --head-height:64px;
  --announcement-height:40px;
  --drawer-top:104px;
  --anchor-offset:120px;
  --toc-offset:176px;
  --ease-quick:.16s ease;
  --ease-reveal:.35s ease;
  --grain-img:radial-gradient(var(--grain) .55px,transparent .95px),radial-gradient(var(--grain) .5px,transparent .9px),radial-gradient(var(--grain) .6px,transparent 1px);
  --grain-size:5px 5px,7px 7px,13px 13px;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:var(--anchor-offset)}
html.nav-open{overflow:hidden}
html.ann-dismissed{--drawer-top:64px}
body{margin:0;background-color:var(--bg);background-image:var(--grain-img);background-size:var(--grain-size);color:var(--text);font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
[hidden]{display:none!important}
img{max-width:100%;height:auto}
svg{flex-shrink:0}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
button,a,input,summary,select,textarea{-webkit-tap-highlight-color:var(--accent-soft)}
button{border:0}
a{color:inherit;text-decoration:none}
a:hover{color:var(--accent-dark)}
a,button,summary{touch-action:manipulation}
:where(a,button,summary,input,select,textarea,[tabindex]):focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--r-sm)}
ul,ol{padding-left:1.5em}
p,h1,h2,h3,h4,figure,blockquote{margin:0}
h1,h2,h3,h4{font-family:var(--font-display);font-weight:var(--weight-display);line-height:var(--leading-heading);text-wrap:balance;overflow-wrap:break-word}
h1{font-size:clamp(52px,4.5vw,72px);letter-spacing:var(--tracking-display)}
h2{font-size:var(--text-h2);letter-spacing:var(--tracking-cjk)}
h3{font-size:var(--text-h3)}
:lang(zh-CN) h1,:lang(zh-TW) h1,:lang(ja) h1,:lang(ko) h1{letter-spacing:var(--tracking-cjk)}
small{font-size:var(--text-xs)}
strong{font-weight:var(--weight-bold)}
code,kbd,pre{font-family:var(--font-mono)}
code{overflow-wrap:anywhere;background:var(--panel-2);border-radius:var(--r-xs);padding:2px 5px;font-size:.88em}
pre{max-width:100%;overflow-x:auto;padding:var(--space-3);background:var(--panel-2);border:1px solid var(--border);border-radius:var(--r);font-size:var(--text-sm)}
pre code{padding:0;background:none;overflow-wrap:normal;white-space:pre}
hr{border:0;border-top:1px solid var(--border);margin-block:var(--space-4)}
.wrap,.wrap-wide,.reading-wrap{width:100%;max-width:calc(var(--container) + var(--gutter)*2);margin-inline:auto;padding-inline:var(--gutter)}
.wrap-wide{max-width:calc(var(--container-wide) + var(--gutter)*2)}
.reading-wrap{max-width:calc(var(--reading) + var(--gutter)*2)}
:where(main,section,article,aside,div,li){min-width:0}
.section{padding-top:var(--space-9);padding-bottom:var(--space-9)}
.section-head{margin-bottom:var(--space-4);max-width:var(--reading)}
.section-head p{margin-top:var(--space-2);color:var(--text-muted)}
.stack{display:flex;flex-direction:column;gap:var(--space-3)}
.grid-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-3)}
.grid-three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-3)}
.muted{color:var(--text-muted)}
.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}
.no-break{white-space:nowrap}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.si{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
.fi{fill:currentColor;flex:none}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:50px;padding:10px 26px;border-radius:var(--r-md);font-size:var(--text-base);font-weight:var(--weight-bold);letter-spacing:.01em;line-height:1.4;white-space:nowrap;flex-shrink:0;transition:transform var(--ease-quick),box-shadow var(--ease-quick)}
.btn:hover{transform:translateY(-1px)}
.btn:active,.btn.is-pressed{transform:translateY(1px)}
.btn-primary{color:var(--on-accent);background:linear-gradient(180deg,var(--accent-2) 0%,var(--accent) 52%,var(--accent-dark) 100%);box-shadow:var(--shadow-cta),inset 0 1px 0 var(--hl-soft)}
.btn-primary:hover,.btn-primary.is-hover{color:var(--on-accent);background:linear-gradient(180deg,var(--accent) 0%,var(--accent-dark) 100%)}
.btn-ghost,.btn-secondary{color:var(--text);background:transparent;box-shadow:inset 0 0 0 1.5px var(--text)}
.btn-ghost:hover,.btn-secondary:hover{background:var(--panel-2);color:var(--text)}
.btn-small{min-height:36px;padding:7px 14px;font-size:var(--text-sm);border-radius:var(--r)}
.btn:disabled,.btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}
.text-link{display:inline-flex;align-items:center;gap:8px;min-height:24px;color:var(--accent-dark);font-weight:var(--weight-semibold)}
.cta-row{display:flex;flex-wrap:wrap;gap:14px;margin-top:22px}
.panel,.paper-card{padding:var(--space-3);background:var(--panel);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--shadow-card),inset 0 1px 0 var(--hl)}
.tray{padding:var(--space-3);background:var(--panel-2);border:1px solid var(--border);border-radius:var(--r-md)}
.prose{overflow-wrap:break-word}
.prose p,.prose ul,.prose ol,.prose pre,.prose blockquote,.prose .table-scroll{margin-block:var(--space-3)}
.prose h2{margin-top:var(--space-7);margin-bottom:var(--space-3)}
.prose h3{margin-top:var(--space-4);margin-bottom:var(--space-2)}
.prose a:not(.btn){text-decoration:underline;text-underline-offset:4px;color:var(--accent-dark)}
.prose li+li{margin-top:var(--space-1)}
.reveal{transition:opacity var(--ease-reveal),transform var(--ease-reveal)}
.reveal.pending{opacity:0;transform:translateY(16px)}
.reveal.shown{opacity:1;transform:none}
#server-status{position:relative;display:block;min-height:80px;max-width:100%;overflow:hidden;margin-block:var(--space-3)}
#server-status+*{margin-top:var(--space-3)}
#site-header{position:sticky;top:0;z-index:60}
.announce{position:relative;z-index:10;background:var(--ink);color:var(--on-ink);font-size:var(--text-sm);line-height:1.4}
.announce-inner{min-height:var(--announcement-height);display:flex;align-items:center;justify-content:center;gap:14px;padding:6px 64px}
.announce-text strong{font-weight:var(--weight-bold)}
.ann-dim{color:var(--on-ink-muted)}
.ann-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:26px;padding:3px 12px;border-radius:var(--r-sm);background:var(--accent);color:var(--on-accent);font-size:13px;font-weight:var(--weight-semibold);white-space:nowrap}
.ann-btn:hover{color:var(--on-accent);background:var(--accent-dark)}
.ann-close{position:absolute;right:20px;top:50%;width:28px;height:28px;margin-top:-14px;display:grid;place-items:center;color:var(--on-ink-muted);cursor:pointer;border-radius:var(--r-sm);background:transparent;font-size:var(--text-lead)}
.ann-close:hover{background:var(--on-ink-hover);color:var(--on-ink)}
.site-head{position:relative;z-index:9;background-color:var(--bg-hero-top);background-image:var(--grain-img);background-size:var(--grain-size)}
.head-inner{height:var(--head-height);display:flex;align-items:center;gap:36px;flex-wrap:nowrap}
.brand{display:inline-flex;align-items:center;gap:10px;flex:none;color:var(--text)}
.brand-mark{display:block;width:28px;height:32px;object-fit:contain;flex:none}
.brand-en{font-family:var(--font-display);font-weight:var(--weight-display);font-size:19px;letter-spacing:-.02em;line-height:1}
.brand-zh{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-muted);padding-left:10px;border-left:1px solid var(--border)}
.nav{display:flex;align-items:center;flex:1;min-width:0;font-size:15px;line-height:1}
.nav ul{display:flex;align-items:center;list-style:none;margin:0;padding:0;gap:26px}
.nav a{display:inline-flex;align-items:center;min-height:32px;color:var(--text-muted);font-weight:var(--weight-medium);white-space:nowrap}
.nav a:hover,.nav a[aria-current="page"]{color:var(--text)}
.nav a[aria-current="page"]{font-weight:var(--weight-bold)}
.head-tools{margin-left:auto;display:flex;align-items:center;gap:20px;flex-shrink:0}
.lang-wrap{position:relative}
.lang{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:none;border:0;padding:6px 2px;font-size:var(--text-sm);color:var(--text-muted);cursor:pointer;min-height:32px;min-width:44px;width:auto;white-space:nowrap}
.lang span{white-space:nowrap}
.lang-caret{font-size:11px}
.lang-panel{position:absolute;z-index:85;right:0;top:calc(100% + 8px);min-width:176px;padding:6px;background:var(--panel);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow-float)}
.lang-panel a{display:flex;align-items:center;min-height:44px;padding:8px 12px;border-radius:var(--r-sm);white-space:nowrap}
.lang-panel a:hover,.lang-panel a[aria-current="true"]{background:var(--panel-2);color:var(--text)}
.btn-login{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:8px 20px;border-radius:var(--r);background:var(--text);color:var(--panel);font-size:var(--text-sm);font-weight:var(--weight-semibold);line-height:1.3;white-space:nowrap;box-shadow:inset 0 1px 0 var(--hl-soft)}
.btn-login:hover{background:var(--ink);color:var(--panel)}
.menu-toggle{display:none;align-items:center;justify-content:center;flex-direction:column;gap:5px;min-width:44px;min-height:44px;padding:10px;background:transparent;border-radius:var(--r);color:var(--text)}
.menu-line{display:block;width:20px;height:2px;background:currentColor;transition:transform var(--ease-quick),opacity var(--ease-quick)}
.menu-toggle[aria-expanded="true"] .menu-line:first-child{transform:translateY(7px) rotate(45deg)}
.menu-toggle[aria-expanded="true"] .menu-line:nth-child(2){opacity:0}
.menu-toggle[aria-expanded="true"] .menu-line:last-child{transform:translateY(-7px) rotate(-45deg)}
.nav-drawer{position:fixed;top:var(--drawer-top);right:0;width:min(100%,440px);height:calc(100dvh - var(--drawer-top));max-height:calc(100dvh - var(--drawer-top));z-index:8;padding:var(--space-3);overflow-y:auto;overscroll-behavior:contain;background:var(--panel);border-left:1px solid var(--border);box-shadow:var(--shadow-float)}
.nav-drawer ul{list-style:none;margin:0;padding:0}
.nav-drawer a{display:flex;align-items:center;width:100%;min-height:48px;padding:12px 16px;border-radius:var(--r);font-weight:var(--weight-medium)}
.nav-drawer a:hover,.nav-drawer a[aria-current]{background:var(--panel-2);color:var(--text)}
.drawer-languages{margin-top:var(--space-3);padding-top:var(--space-2);border-top:1px solid var(--border)}
.nav-veil{position:fixed;inset:var(--drawer-top) 0 0;z-index:7;background:var(--veil)}
.site-footer{padding-top:var(--space-8);padding-bottom:var(--space-4);background:var(--panel-2);border-top:1px solid var(--border)}
.footer-grid{display:grid;grid-template-columns:1.25fr 1fr 1.2fr .8fr;gap:var(--space-6)}
.footer-brand p{margin-top:var(--space-2);max-width:30em;color:var(--text-muted);font-size:var(--text-sm)}
.footer-title{font-size:var(--text-sm);font-weight:var(--weight-bold);margin-bottom:var(--space-2)}
.footer-links{display:flex;flex-direction:column;align-items:flex-start;gap:6px;list-style:none;margin:0;padding:0;font-size:var(--text-sm)}
.footer-links a{display:inline-flex;align-items:center;min-height:28px;color:var(--text-muted)}
.footer-links a:hover{color:var(--text)}
.footer-bottom{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--space-2);border-top:1px solid var(--border-strong);margin-top:var(--space-6);padding-top:var(--space-3);font-size:var(--text-xs);color:var(--text-muted)}
.footer-legal{display:flex;flex-wrap:wrap;gap:var(--space-3)}
.footer-legal a{display:inline-flex;align-items:center;min-height:24px}
@media(min-width:1101px){.nav-drawer,.nav-veil{display:none!important}}
@media(max-width:1200px){.head-inner{gap:24px}.nav ul{gap:18px}.head-tools{gap:14px}}
@media(max-width:1100px){.nav{display:none}.menu-toggle{display:flex}.head-tools{margin-left:auto}.footer-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:768px){
  :root{--gutter:24px;--text-h2:30px;--text-h3:22px}
  h1{font-size:clamp(28px,6vw,40px);line-height:1.15}
  .grid-three{grid-template-columns:1fr}.section{padding-top:var(--space-6);padding-bottom:var(--space-6)}
  .head-inner{gap:var(--space-2)}.head-tools{gap:12px;margin-left:auto}
  .announce-inner{padding-inline:40px;font-size:var(--text-xs);gap:8px}
  .ann-close{right:8px}.ann-dim{display:none}
}
@media(max-width:640px){
  :root{--gutter:16px}
  .no-break{white-space:normal}
  .grid-two,.footer-grid{grid-template-columns:1fr}
  .head-inner{gap:8px}.brand{gap:5px}.brand-mark{width:23px;height:28px}.brand-en{font-size:16px}
  .head-tools{gap:6px;margin-left:auto}.btn-login{min-height:36px;padding:7px 12px;font-size:13px}
  .lang{font-size:var(--text-xs);gap:3px}.lang-caret{font-size:9px}
  .announce-inner{padding-inline:36px}.announce-text{font-size:11px}.ann-btn{font-size:11px;padding-inline:8px}
  .footer-grid{gap:var(--space-4)}.footer-bottom{align-items:flex-start}
  .tilt,[data-tilt],.ticket-wrap,.signup-chip{transform:none}
  .decor-region,.hero,.stripe-region{overflow-x:clip;max-width:100%}
  .stripe-halo,[data-parallax-decor]{max-width:100%}
}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .reveal,.reveal.pending{opacity:1;transform:none}
}