:root {
  --color-surface: #f8f8f9;
  --color-surface-alt: #efeff1;
  --color-surface-deep: #e3e3e5;
  --color-ink: #4a4554;
  --color-ink-soft: #6f697c;
  --color-ink-muted: #7c7689;
  --color-line: #d9d8db;
  --color-primary: #735da2;
  --color-primary-ink: #ffffff;
  --color-primary-soft: #e5e2ed;
  --color-accent: #4770b8;
  --color-accent-ink: #ffffff;
  --color-highlight: #d8e0ed;
  --color-focus: #3a6dc5;
  --color-contrast-surface: #141318;
  --color-contrast-ink: #e5e4e7;
  --color-contrast-line: #424146;
  --color-contrast-accent: #597fbf;
  --overlay-scrim: linear-gradient(180deg, rgba(20, 19, 24, 0.35) 0%, rgba(20, 19, 24, 0.72) 55%, rgba(20, 19, 24, 0.92) 100%);
  --font-heading: "Hiragino Sans GB", "PingFang SC", "Microsoft YaHei", sans-serif;
  --font-body: "Hiragino Sans GB", "PingFang SC", "Microsoft YaHei", sans-serif;
  --font-mono: ui-monospace, Menlo, Consolas, monospace;
  --text-xs: 12.9px;
  --text-sm: 16.1px;
  --text-base: 18px;
  --text-lg: 22.5px;
  --text-xl: 28.1px;
  --text-2xl: 35.2px;
  --text-3xl: 43.9px;
  --text-4xl: 54.9px;
  --text-display: clamp(34px, 6.7vw, 86px);
  --text-figure: clamp(28px, 4.8vw, 62px);
  --weight-heading: 678;
  --weight-body: 400;
  --leading-body: 1.79;
  --leading-heading: 1.27;
  --tracking-heading: -0.005em;
  --radius-sm: 18px;
  --radius-md: 20px;
  --radius-lg: 21px;
  --radius-pill: 999px;
  --border-thin: 1px;
  --border-thick: 1px;
  --shadow-1: 0 6px 18px rgba(74, 69, 84, 0.08);
  --shadow-2: 0 18px 44px rgba(74, 69, 84, 0.14);
  --space-1: 8px;
  --space-2: 16px;
  --space-3: 24px;
  --space-4: 32px;
  --space-6: 48px;
  --space-8: 64px;
  --container: 1200px;
  --measure: 69ch;
  --gutter: 32px;
  --section-y: 84px;
  --section-y-lg: 118px;
}

/* ============ reset ============ */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;font-family:var(--font-body);font-size:var(--text-base);font-weight:var(--weight-body);line-height:var(--leading-body);color:var(--color-ink);background:var(--color-surface);-webkit-font-smoothing:antialiased}
img,svg,video{display:block;max-width:100%;height:auto}
button{font:inherit;color:inherit}
a{color:var(--color-accent);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3,h4,h5,h6{margin:0 0 var(--space-3);font-family:var(--font-heading);font-weight:var(--weight-heading);line-height:var(--leading-heading);letter-spacing:var(--tracking-heading);color:var(--color-ink)}
h1{font-size:var(--text-3xl)}
h2{font-size:var(--text-2xl)}
h3{font-size:var(--text-xl)}
h4{font-size:var(--text-lg)}
p{margin:0 0 var(--space-3)}
hr{border:0;border-top:var(--border-thin) solid var(--color-line);margin:var(--space-6) 0}
::selection{background:var(--color-primary);color:var(--color-primary-ink)}
:focus-visible{outline:2px solid var(--color-focus);outline-offset:3px;border-radius:6px}
.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* ============ layout ============ */
.container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:var(--gutter)}
.section{padding-block:var(--section-y)}
.section--lg{padding-block:var(--section-y-lg)}
.section--surface{background:var(--color-surface)}
.section--alt{background:var(--color-surface-alt)}
.section--deep{background:var(--color-surface-deep)}
.band-contrast{background:var(--color-contrast-surface);color:var(--color-contrast-ink);padding-block:var(--section-y)}
.band-contrast h1,.band-contrast h2,.band-contrast h3,.band-contrast h4{color:var(--color-contrast-ink)}
.band-contrast a{color:var(--color-contrast-accent)}
.panel-contrast{background:var(--color-contrast-surface);color:var(--color-contrast-ink);border-radius:var(--radius-lg);padding:var(--space-6);box-shadow:var(--shadow-2)}
.panel-contrast h1,.panel-contrast h2,.panel-contrast h3{color:var(--color-contrast-ink)}
.grid{display:grid;gap:var(--gutter)}
.grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}
.grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid--4{grid-template-columns:repeat(4,minmax(0,1fr))}
.grid--12{grid-template-columns:repeat(12,minmax(0,1fr))}
.col-3{grid-column:span 3}
.col-4{grid-column:span 4}
.col-5{grid-column:span 5}
.col-6{grid-column:span 6}
.col-7{grid-column:span 7}
.col-8{grid-column:span 8}
.col-9{grid-column:span 9}
.col-12{grid-column:span 12}

/* ============ typography helpers ============ */
.display{font-family:var(--font-heading);font-size:var(--text-display);font-weight:var(--weight-heading);line-height:0.98;letter-spacing:-0.03em;color:var(--color-ink);margin:0 0 var(--space-3)}
.band-contrast .display,.panel-contrast .display{color:var(--color-contrast-ink);text-shadow:0 0 32px color-mix(in srgb, var(--color-contrast-accent) 45%, transparent)}
.figure-value{font-family:var(--font-mono);font-size:var(--text-figure);font-weight:600;line-height:1;letter-spacing:-0.02em;font-variant-numeric:tabular-nums;color:var(--color-primary)}
.band-contrast .figure-value,.panel-contrast .figure-value{color:var(--color-contrast-accent)}
.lead{max-width:var(--measure);font-size:var(--text-lg);color:var(--color-ink-soft);margin:0 0 var(--space-4)}
.band-contrast .lead,.panel-contrast .lead{color:color-mix(in srgb, var(--color-contrast-ink) 82%, transparent)}
.prose{max-width:var(--measure)}
.prose p{margin:0 0 var(--space-3)}
.prose h3{margin-top:var(--space-6)}
.mono-num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:0.01em}
.eyebrow{display:inline-flex;align-items:center;gap:var(--space-1);padding:6px 14px;border-radius:var(--radius-pill);background:var(--color-primary-soft);color:color-mix(in srgb, var(--color-primary) 78%, var(--color-ink));font-size:var(--text-xs);letter-spacing:0.16em;margin-bottom:var(--space-2)}
.chip{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;border-radius:var(--radius-pill);border:var(--border-thin) solid transparent;background:var(--color-primary-soft);color:color-mix(in srgb, var(--color-primary) 80%, var(--color-ink));font-size:var(--text-xs);line-height:1.6}
.chip--accent{background:color-mix(in srgb, var(--color-accent) 16%, var(--color-surface));color:color-mix(in srgb, var(--color-accent) 76%, var(--color-ink))}
.chip--line{background:transparent;border-color:var(--color-line);color:var(--color-ink-soft)}
.chip--on-dark{background:color-mix(in srgb, var(--color-contrast-accent) 24%, transparent);border-color:var(--color-contrast-line);color:var(--color-contrast-ink)}
.tag-row{display:flex;flex-wrap:wrap;gap:var(--space-1)}
.badge{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:34px;padding:0 8px;border-radius:var(--radius-sm);background:var(--color-surface-alt);border:var(--border-thin) solid var(--color-line);color:var(--color-ink-soft)}
.badge-num{font-family:var(--font-mono);font-size:var(--text-sm);font-weight:600}

/* ============ rules / dividers ============ */
.rule-double{height:6px;border-top:3px solid var(--color-primary);border-bottom:var(--border-thin) solid var(--color-line);border-radius:var(--radius-pill);margin-block:var(--space-6)}
.rule-double--on-dark{border-top-color:var(--color-contrast-accent);border-bottom-color:var(--color-contrast-line)}

/* ============ buttons ============ */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:13px 26px;border:var(--border-thin) solid transparent;border-radius:var(--radius-pill);font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;line-height:1.4;text-decoration:none;cursor:pointer;transition:background-color .18s ease,color .18s ease,transform .18s ease,box-shadow .18s ease}
.btn:hover{text-decoration:none;transform:translateY(-1px)}
.btn--primary{background:var(--color-primary);color:var(--color-primary-ink);box-shadow:var(--shadow-1)}
.btn--primary:hover{background:color-mix(in srgb, var(--color-primary) 86%, var(--color-contrast-surface))}
.btn--accent{background:var(--color-accent);color:var(--color-accent-ink);box-shadow:var(--shadow-1)}
.btn--accent:hover{background:color-mix(in srgb, var(--color-accent) 86%, var(--color-contrast-surface))}
.btn--ghost{background:var(--color-surface);border-color:var(--color-line);color:var(--color-ink)}
.btn--ghost:hover{background:var(--color-highlight)}
.btn--contrast{background:var(--color-contrast-accent);color:var(--color-primary-ink)}
.btn--contrast:hover{background:color-mix(in srgb, var(--color-contrast-accent) 82%, var(--color-contrast-ink))}
.cta-row{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-4)}

/* ============ breadcrumb ============ */
.breadcrumb{font-size:var(--text-xs);color:var(--color-ink-muted);margin-bottom:var(--space-3)}
.breadcrumb ol{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0;padding:0;list-style:none}
.breadcrumb li{display:flex;align-items:center;gap:8px}
.breadcrumb li+li::before{content:"/";color:var(--color-line)}
.breadcrumb a{color:var(--color-ink-soft);text-decoration:none}
.breadcrumb a:hover{color:var(--color-accent);text-decoration:underline}
.breadcrumb [aria-current="page"]{color:var(--color-ink)}

/* ============ section head / cards ============ */
.section-head{max-width:var(--measure);margin-bottom:var(--space-6)}
.section-head h2{margin-bottom:var(--space-2)}
.card{background:var(--color-surface);border:var(--border-thin) solid var(--color-line);border-radius:var(--radius-lg);padding:var(--space-4);box-shadow:var(--shadow-1)}
.card--alt{background:var(--color-surface-alt)}
.card h3{margin-bottom:var(--space-2)}
.card-grid{display:grid;gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}

/* ============ media ============ */
.media-frame{position:relative;overflow:hidden;border-radius:var(--radius-lg);border:var(--border-thin) solid var(--color-line);background:var(--color-surface-deep)}
.media-frame>img{width:100%;height:100%;object-fit:cover}
.media-frame--16x9{aspect-ratio:16/9}
.media-frame--4x3{aspect-ratio:4/3}
.media-frame--1x1{aspect-ratio:1/1}
.media-frame--3x4{aspect-ratio:3/4}
.media-overlay{position:absolute;inset:0;display:flex;align-items:flex-end;padding:var(--space-3);background:var(--overlay-scrim);color:var(--color-contrast-ink);font-size:var(--text-sm)}
.media-caption{margin:var(--space-1) 0 0;font-size:var(--text-xs);color:var(--color-ink-muted)}

/* ============ filter ============ */
.filter-bar{display:flex;flex-wrap:wrap;gap:6px;padding:6px;margin-bottom:var(--space-4);background:var(--color-surface-alt);border:var(--border-thin) solid var(--color-line);border-radius:var(--radius-pill)}
.filter-btn{appearance:none;border:0;background:transparent;color:var(--color-ink-soft);font-size:var(--text-sm);padding:9px 18px;border-radius:var(--radius-pill);cursor:pointer;transition:background-color .18s ease,color .18s ease}
.filter-btn:hover{background:var(--color-highlight);color:var(--color-ink)}
.filter-btn[aria-pressed="true"]{background:var(--color-primary);color:var(--color-primary-ink)}
[data-filter-item][hidden]{display:none}
.filter-empty{margin:0;padding:var(--space-4);border-radius:var(--radius-lg);background:var(--color-surface-alt);color:var(--color-ink-muted);font-size:var(--text-sm)}
.filter-empty[hidden]{display:none}

/* ============ reveal ============ */
.has-js [data-reveal]{opacity:0;transform:translateY(18px);transition:opacity .5s ease,transform .5s ease}
.has-js [data-reveal].is-visible{opacity:1;transform:none}

/* ============ header ============ */
.site-header{position:sticky;top:0;z-index:80;isolation:isolate;background:color-mix(in srgb, var(--color-surface) 91%, transparent);border-bottom:var(--border-thin) solid var(--color-line);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.site-header::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(140% 190% at 6% -70%, color-mix(in srgb, var(--color-primary) 22%, transparent), transparent 62%),radial-gradient(120% 180% at 94% -78%, color-mix(in srgb, var(--color-accent) 20%, transparent), transparent 64%)}
.site-header::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;pointer-events:none;background-image:repeating-linear-gradient(90deg, color-mix(in srgb, var(--color-accent) 60%, transparent) 0 2px, transparent 2px 24px);opacity:.55}
.skip-link{position:absolute;left:var(--space-2);top:-64px;z-index:120;padding:11px 20px;border-radius:var(--radius-pill);background:var(--color-contrast-surface);color:var(--color-contrast-ink);font-size:var(--text-sm);text-decoration:none;transition:top .2s ease}
.skip-link:focus{top:12px;text-decoration:none}
.header-bar{position:relative;display:flex;align-items:center;gap:var(--space-3);min-height:80px;padding-block:var(--space-1)}
.brand{flex:0 0 auto}
.brand-mark{display:flex;flex-direction:column;gap:2px;text-decoration:none}
.brand-mark:hover{text-decoration:none}
.brand-name{font-family:var(--font-heading);font-size:var(--text-xl);font-weight:var(--weight-heading);line-height:1.1;letter-spacing:0.02em;background:linear-gradient(94deg,var(--color-primary),var(--color-accent));background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
.brand-sub{font-size:var(--text-xs);color:var(--color-ink-muted);letter-spacing:0.08em}
.primary-nav{margin-inline:auto}
.nav-list{display:flex;align-items:center;gap:4px;margin:0;padding:6px;list-style:none;background:color-mix(in srgb, var(--color-surface-alt) 88%, transparent);border:var(--border-thin) solid var(--color-line);border-radius:var(--radius-pill)}
.nav-link{display:inline-flex;align-items:center;gap:8px;padding:9px 15px;border-radius:var(--radius-pill);font-size:var(--text-sm);color:var(--color-ink-soft);text-decoration:none;white-space:nowrap;transition:background-color .18s ease,color .18s ease}
.nav-link:hover{background:var(--color-highlight);color:var(--color-ink);text-decoration:none}
.nav-index{font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:0.06em;opacity:.66}
.nav-link[aria-current="page"]{background:var(--color-primary);color:var(--color-primary-ink);box-shadow:var(--shadow-1)}
.nav-link[aria-current="page"] .nav-index{opacity:.9}
.header-status{display:flex;align-items:center;gap:10px;font-size:var(--text-xs);color:var(--color-ink-soft);white-space:nowrap}
.status-dot{width:8px;height:8px;border-radius:50%;background:var(--color-accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--color-accent) 18%, transparent);animation:status-pulse 2.6s ease-in-out infinite}
@keyframes status-pulse{0%,100%{box-shadow:0 0 0 4px color-mix(in srgb, var(--color-accent) 16%, transparent)}50%{box-shadow:0 0 0 8px color-mix(in srgb, var(--color-accent) 6%, transparent)}}
.status-current{padding-left:10px;border-left:var(--border-thin) solid var(--color-line);color:var(--color-ink-muted)}
.status-current b{color:var(--color-ink);font-weight:600}
.nav-toggle{display:none;align-items:center;gap:10px;padding:10px 18px;border:var(--border-thin) solid var(--color-line);border-radius:var(--radius-pill);background:var(--color-surface-alt);color:var(--color-ink);font-size:var(--text-sm);cursor:pointer}
.nav-toggle:hover{background:var(--color-highlight)}
.nav-toggle-bars{position:relative;display:block;width:16px;height:12px}
.nav-toggle-bars::before,.nav-toggle-bars::after{content:"";position:absolute;left:0;right:0;height:2px;border-radius:2px;background:currentColor;transition:transform .2s ease,top .2s ease}
.nav-toggle-bars::before{top:1px}
.nav-toggle-bars::after{top:9px}
.site-header[data-open] .nav-toggle-bars::before{top:5px;transform:rotate(45deg)}
.site-header[data-open] .nav-toggle-bars::after{top:5px;transform:rotate(-45deg)}
.site-header[data-open] .nav-toggle{background:var(--color-primary);color:var(--color-primary-ink);border-color:transparent}
.scroll-progress{position:absolute;left:0;bottom:-1px;width:100%;height:3px;transform:scaleX(var(--progress,0));transform-origin:0 50%;background:linear-gradient(90deg,var(--color-primary),var(--color-accent));transition:transform .12s linear}
@media (max-width:1239px){.header-status{display:none}}
@media (max-width:1099px){
  .header-bar{justify-content:space-between}
  .nav-toggle{display:inline-flex}
  .primary-nav{position:absolute;left:0;right:0;top:100%;margin:0;display:none;padding:var(--space-3) var(--gutter) var(--space-4);background:var(--color-surface);border-bottom:var(--border-thin) solid var(--color-line);box-shadow:var(--shadow-2)}
  .site-header[data-open] .primary-nav{display:block}
  .nav-list{flex-direction:column;align-items:stretch;gap:6px;padding:0;background:transparent;border:0;border-radius:0}
  .nav-link{width:100%;justify-content:flex-start;padding:14px 18px;border-radius:var(--radius-sm);background:var(--color-surface-alt);color:var(--color-ink)}
  .nav-link[aria-current="page"]{background:var(--color-primary)}
}

/* ============ footer ============ */
.site-footer{margin-top:var(--section-y);background:var(--color-surface-deep);color:var(--color-ink)}
.footer-ruler{display:grid;gap:6px;padding-top:var(--space-8)}
.ruler-line{display:block;height:1px;background:var(--color-line);border-radius:var(--radius-pill)}
.ruler-line--fine{background:color-mix(in srgb, var(--color-ink-muted) 38%, transparent)}
.ruler-line--strong{height:3px;background:var(--color-primary)}
.ruler-ticks{display:block;height:12px;background-image:repeating-linear-gradient(90deg, color-mix(in srgb, var(--color-ink-muted) 42%, transparent) 0 1px, transparent 1px 38px)}
.footer-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1.5fr;gap:var(--space-6) var(--space-4);padding-block:var(--space-8)}
.footer-col{min-width:0}
.footer-col--brand{padding-right:var(--space-4)}
.footer-title{margin:0 0 var(--space-2);font-size:var(--text-xs);font-weight:600;letter-spacing:0.16em;color:var(--color-ink-muted)}
.footer-list{margin:0;padding:0;list-style:none;display:grid;gap:10px;font-size:var(--text-sm)}
.footer-list a{color:var(--color-ink);text-decoration:none;border-bottom:var(--border-thin) solid transparent}
.footer-list a:hover{color:var(--color-accent);border-bottom-color:var(--color-accent);text-decoration:none}
.footer-brand-name{margin:0 0 4px;font-family:var(--font-heading);font-size:var(--text-xl);font-weight:var(--weight-heading);letter-spacing:0.02em}
.footer-brand-sub{margin:0 0 var(--space-2);font-size:var(--text-sm);color:var(--color-ink-soft)}
.footer-note{margin:0 0 6px;max-width:36ch;font-size:var(--text-xs);color:var(--color-ink-muted)}
.footer-list--contact{gap:12px}
.footer-contact-value{display:inline-block;font-family:var(--font-mono);font-size:var(--text-sm);color:var(--color-ink);word-break:break-word}
.footer-contact-value--text{font-family:var(--font-body);font-size:var(--text-sm);line-height:1.7;color:var(--color-ink-soft)}
.footer-hours{margin:var(--space-2) 0 0;font-size:var(--text-xs);color:var(--color-ink-muted);letter-spacing:0.04em}
.footer-base{background:var(--color-contrast-surface);color:var(--color-contrast-ink);border-top:3px solid var(--color-contrast-accent)}
.footer-base-inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2) var(--space-4);padding-block:var(--space-3)}
.footer-legal{margin:0;font-size:var(--text-xs);color:var(--color-contrast-ink)}
.footer-legal--soft{color:color-mix(in srgb, var(--color-contrast-ink) 66%, transparent)}
@media (max-width:900px){
  .footer-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .footer-col--brand{padding-right:0}
}
@media (max-width:640px){
  .container{padding-inline:var(--space-2)}
  .footer-grid{grid-template-columns:minmax(0,1fr);gap:var(--space-4)}
  .section{padding-block:var(--space-8)}
  .section--lg{padding-block:var(--space-8)}
  .footer-base-inner{flex-direction:column;align-items:flex-start}
}

/* ============ responsive grid ============ */
@media (max-width:1024px){
  .grid--3,.grid--4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .grid--12{grid-template-columns:repeat(6,minmax(0,1fr))}
  .col-3,.col-4,.col-5{grid-column:span 6}
  .col-6,.col-7,.col-8,.col-9,.col-12{grid-column:span 6}
}
@media (max-width:640px){
  .grid--2,.grid--3,.grid--4{grid-template-columns:minmax(0,1fr)}
  .grid--12{grid-template-columns:minmax(0,1fr)}
  [class^="col-"],[class*=" col-"]{grid-column:1/-1}
}

/* ============ motion ============ */
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
  .has-js [data-reveal]{opacity:1;transform:none}
  .status-dot{box-shadow:0 0 0 4px color-mix(in srgb, var(--color-accent) 18%, transparent)}
  .btn:hover{transform:none}
}
