:root {
  color-scheme: dark;
  font-family: "PingFang SC", "Microsoft YaHei", "Noto Sans SC", system-ui, sans-serif;
  color: #f1f7f7;
  background: #071d2d;
  font-synthesis: none;
  --ink: #f1f7f7;
  --navy: #071d2d;
  --navy-2: #0a293d;
  --navy-3: #0d344a;
  --blue: #74c9d3;
  --line: rgba(202, 231, 233, .16);
  --muted: #9bb5be;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  min-width: 320px;
  min-height: 100vh;
  overflow-x: hidden;
  background:
    radial-gradient(circle at 86% -15%, rgba(56, 140, 163, .22), transparent 34rem),
    linear-gradient(150deg, #061a29 0%, #09283b 48%, #071d2d 100%);
}
a { color: inherit; text-decoration: none; }

.portal-header {
  width: min(1240px, calc(100% - 56px));
  min-height: 76px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-bottom: 1px solid var(--line);
}
.portal-brand { display: flex; align-items: center; gap: 12px; }
.brand-mark {
  width: 40px;
  height: 40px;
  display: grid;
  place-items: center;
  border: 1px solid rgba(202, 231, 233, .28);
  border-radius: 50%;
  color: #d8eff0;
  background: rgba(19, 73, 92, .38);
}
.brand-mark svg { width: 26px; height: 26px; fill: currentColor; }
.portal-brand strong, .portal-brand small { display: block; }
.portal-brand strong { font-size: 17px; letter-spacing: .08em; }
.portal-brand small { margin-top: 3px; color: #8eabb5; font-size: 10px; letter-spacing: .1em; }
.portal-header nav { display: flex; align-items: center; gap: 25px; color: #abc0c7; font-size: 13px; }
.portal-header nav a { transition: color .18s ease; }
.portal-header nav a:hover { color: #fff; }
.header-account {
  min-width: 64px;
  padding: 9px 17px;
  border: 1px solid rgba(202, 231, 233, .22);
  border-radius: 999px;
  color: #eef7f7 !important;
  text-align: center;
}

main { width: min(1240px, calc(100% - 56px)); margin: 0 auto; }
.portal-intro {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1.25fr) minmax(300px, .75fr);
  align-items: end;
  gap: 72px;
  padding: 54px 0 38px;
}
.portal-intro::before {
  content: "";
  position: absolute;
  top: 42px;
  right: 28%;
  width: 78px;
  height: 1px;
  background: var(--blue);
  opacity: .4;
}
.section-label { margin: 0 0 13px; color: #88cbd2; font-size: 11px; letter-spacing: .11em; }
.portal-intro h1 {
  margin: 0;
  color: var(--ink);
  font-size: clamp(45px, 5vw, 68px);
  line-height: 1.07;
  letter-spacing: -.065em;
  font-weight: 650;
}
.intro-note { padding: 4px 0 4px 24px; border-left: 1px solid rgba(202, 231, 233, .22); }
.intro-note strong { display: block; color: #eaf4f3; font-size: 15px; font-weight: 600; }
.intro-note p { margin: 10px 0 14px; color: var(--muted); font-size: 13px; line-height: 1.75; }
.intro-note span { color: #74a2af; font-size: 10px; letter-spacing: .08em; }

.tool-directory {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  grid-auto-rows: minmax(160px, auto);
  gap: 12px;
}
.tool-card {
  position: relative;
  min-height: 164px;
  padding: 21px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border: 1px solid var(--line);
  border-radius: 16px;
  background: rgba(10, 42, 61, .82);
  box-shadow: inset 0 1px rgba(255, 255, 255, .025);
  transition: transform .18s ease, border-color .18s ease, background .18s ease;
}
.tool-card:hover { transform: translateY(-2px); border-color: rgba(172, 218, 222, .3); background: #0d344a; }
.tool-card-primary {
  grid-column: span 2;
  grid-row: span 2;
  min-height: 340px;
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(210px, .95fr);
  color: #f5f9f8;
  background: linear-gradient(140deg, #0e5368, #0b3c54 60%, #092d43);
}
.tool-card-primary::after {
  content: "";
  position: absolute;
  width: 260px;
  height: 260px;
  right: -90px;
  bottom: -150px;
  border: 1px solid rgba(183, 225, 228, .13);
  border-radius: 50%;
}
.tool-card-primary:hover { background: linear-gradient(140deg, #11596f, #0c4159 60%, #0a3046); }
.tool-number { color: #7296a3; font: 10px ui-monospace, SFMono-Regular, Consolas, monospace; }
.tool-card-primary .tool-number { color: #a7d7db; }
.tool-copy { position: relative; z-index: 1; display: flex; flex-direction: column; min-width: 0; }
.tool-copy > p { margin: auto 0 5px; color: #a9d0d4; font-size: 11px; letter-spacing: .06em; }
.tool-card h2 { margin: auto 0 7px; font-size: 22px; letter-spacing: -.035em; font-weight: 620; }
.tool-card-primary h2 { margin: 2px 0 12px; font-size: 38px; }
.tool-card > p, .tool-description { margin: 0; color: #95b0ba; font-size: 11px; line-height: 1.65; }
.tool-description { max-width: 330px; color: #bdd5d8; }
.tool-card strong { margin-top: 20px; color: #b8dfe2; font-size: 11px; font-weight: 600; }
.tool-card-primary strong { margin-top: 27px; color: #f0f8f7; }
.tool-card i, .shop-links i { margin-left: 7px; font-style: normal; }
.tool-icon { position: absolute; top: 18px; right: 18px; width: 29px; height: 29px; color: #75a8b4; }
.tool-icon svg { width: 100%; height: 100%; fill: none; stroke: currentColor; stroke-width: 1.25; }
.court-sketch { position: relative; z-index: 1; display: grid; place-items: center; min-width: 0; opacity: .78; }
.court-sketch svg { width: 100%; max-width: 250px; fill: none; stroke: rgba(226, 244, 245, .46); stroke-width: 1; }
.court-sketch .flight { stroke: #a4dce1; stroke-width: 1.5; stroke-dasharray: 4 5; }
.court-sketch circle { fill: #e8f9f7; stroke: none; }

.shop-directory {
  display: grid;
  grid-template-columns: minmax(260px, .72fr) minmax(0, 1.28fr);
  gap: 65px;
  margin-top: 72px;
  padding: 48px;
  border: 1px solid var(--line);
  border-radius: 18px;
  background: rgba(7, 31, 47, .72);
}
.directory-heading h2 { margin: 0; max-width: 350px; font-size: clamp(30px, 3.4vw, 44px); line-height: 1.15; letter-spacing: -.05em; }
.directory-heading > a { display: inline-flex; margin-top: 27px; padding-bottom: 6px; border-bottom: 1px solid #a9c8cc; color: #dceced; font-size: 12px; }
.directory-heading > a span { margin-left: 18px; }
.shop-links { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border-top: 1px solid var(--line); border-left: 1px solid var(--line); }
.shop-links a { display: grid; grid-template-columns: 50px 1fr auto; align-items: center; min-height: 88px; padding: 0 18px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.shop-links span { color: #81c3cb; font-size: 10px; letter-spacing: .1em; }
.shop-links strong { font-size: 12px; font-weight: 520; }
.shop-links i { color: #7898a3; font-style: normal; }

footer {
  width: min(1240px, calc(100% - 56px));
  min-height: 92px;
  margin: 58px auto 0;
  display: grid;
  grid-template-columns: 1fr auto auto;
  align-items: center;
  gap: 36px;
  border-top: 1px solid var(--line);
  color: #819fa9;
  font-size: 10px;
}
footer > span { color: #dcebec; font-weight: 650; letter-spacing: .08em; }
footer p { margin: 0; }
footer a { color: #c4dadd; }

@media (max-width: 820px) {
  .portal-header, main, footer { width: calc(100% - 30px); max-width: 650px; }
  .portal-header { min-height: 68px; }
  .portal-header nav { gap: 13px; }
  .portal-header nav a:not(.header-account) { display: none; }
  .portal-intro { grid-template-columns: 1fr; gap: 22px; padding: 38px 0 27px; }
  .portal-intro::before { display: none; }
  .portal-intro h1 { font-size: clamp(39px, 11vw, 52px); }
  .intro-note { padding-left: 15px; }
  .intro-note strong { font-size: 13px; }
  .intro-note p { margin: 7px 0 10px; font-size: 11px; }
  .tool-directory { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; grid-auto-rows: auto; }
  .tool-card { min-height: 177px; padding: 17px; border-radius: 13px; }
  .tool-card-primary { grid-column: 1 / -1; grid-row: auto; min-height: 236px; grid-template-columns: 1.1fr .9fr; }
  .tool-card-primary h2 { font-size: 30px; }
  .tool-card h2 { font-size: 19px; }
  .tool-card > p { min-height: 38px; font-size: 10px; }
  .tool-card strong { margin-top: 16px; }
  .tool-icon { top: 14px; right: 14px; width: 25px; height: 25px; }
  .shop-directory { grid-template-columns: 1fr; gap: 34px; margin-top: 48px; padding: 28px 20px; border-radius: 14px; }
  .directory-heading h2 { font-size: 31px; }
  .shop-links { grid-template-columns: 1fr; }
  .shop-links a { min-height: 69px; padding: 0 12px; }
  footer { min-height: 100px; grid-template-columns: 1fr auto; gap: 8px 20px; margin-top: 42px; }
  footer p { grid-column: 1 / -1; grid-row: 2; }
}

@media (max-width: 390px) {
  .portal-brand small { display: none; }
  .portal-intro h1 { font-size: 39px; }
  .intro-note span { letter-spacing: 0; }
  .tool-card-primary { grid-template-columns: minmax(0, 1.2fr) minmax(105px, .8fr); }
  .court-sketch { opacity: .5; }
}

@media (prefers-reduced-motion: reduce) {
  * { scroll-behavior: auto !important; transition: none !important; }
}

/* A quieter, more editorial finish: fewer pills and less template-like scale. */
.portal-intro h1 { max-width: 720px; font-size: clamp(42px, 4.5vw, 60px); font-weight: 620; letter-spacing: -.045em; }
.section-label { letter-spacing: .04em; }
.header-account { border-radius: 9px; }
.tool-card { border-radius: 11px; box-shadow: none; }
.tool-card-primary { background: #0d465d; }
.tool-card-primary:hover { background: #104c63; }
.tool-card-primary::after { opacity: .45; }
.tool-card h2 { font-weight: 600; }
.shop-directory { border-radius: 12px; }
@media (max-width: 820px) {
  .portal-intro h1 { font-size: clamp(36px, 9.6vw, 46px); }
  .tool-card { border-radius: 10px; }
}

/* Brand entrance — one short, skippable sequence at the real site entry. */
.portal-splash {
  position: fixed;
  z-index: 100;
  inset: 0;
  overflow: hidden;
  display: grid;
  place-items: center;
  background:
    radial-gradient(circle at 50% 48%, rgba(19, 77, 101, .34), transparent 35%),
    linear-gradient(155deg, #020b14 0%, #061827 54%, #03101b 100%);
  color: #edf8f8;
  opacity: 1;
  visibility: visible;
  transition: opacity .42s ease, visibility .42s ease;
}
.portal-splash.is-finished { opacity: 0; visibility: hidden; pointer-events: none; }
.portal-splash.no-transition { transition: none; }
.splash-skip {
  position: absolute;
  z-index: 5;
  top: max(20px, env(safe-area-inset-top));
  right: max(22px, env(safe-area-inset-right));
  padding: 7px 2px 6px;
  border: 0;
  border-bottom: 1px solid rgba(218, 239, 240, .32);
  background: none;
  color: #9eb6bc;
  font: 12px/1.2 inherit;
  cursor: pointer;
}
.splash-light { position: absolute; top: -38%; width: 24vw; height: 105%; opacity: .14; filter: blur(10px); background: linear-gradient(180deg, rgba(139, 219, 230, .42), transparent 70%); transform: rotate(12deg); }
.splash-light-a { right: 21%; animation: splashLight 2.4s ease-out both; }
.splash-light-b { right: 48%; width: 13vw; opacity: .08; transform: rotate(-9deg); animation: splashLight 2.4s .12s ease-out both; }
.splash-bubbles { position: absolute; inset: 0; opacity: .5; }
.splash-bubbles i { position: absolute; width: 3px; height: 3px; border-radius: 50%; background: #8fcbd2; animation: splashBubble 2.2s ease-out both; }
.splash-bubbles i:nth-child(1) { left: 16%; top: 72%; animation-delay: .12s; }
.splash-bubbles i:nth-child(2) { left: 31%; top: 63%; width: 2px; height: 2px; animation-delay: .38s; }
.splash-bubbles i:nth-child(3) { right: 24%; top: 67%; animation-delay: .24s; }
.splash-bubbles i:nth-child(4) { right: 13%; top: 41%; width: 2px; height: 2px; animation-delay: .54s; }
.splash-bubbles i:nth-child(5) { left: 42%; top: 29%; width: 2px; height: 2px; animation-delay: .3s; }
.splash-stage { position: absolute; inset: 0; }
.splash-whale {
  position: absolute;
  width: min(760px, 72vw);
  left: 50%;
  top: 48%;
  fill: #12506b;
  stroke: rgba(170, 229, 232, .62);
  stroke-width: 1;
  opacity: 0;
  filter: drop-shadow(0 0 28px rgba(70, 174, 194, .24));
  animation: splashWhale 1.45s .06s cubic-bezier(.2,.7,.25,1) both;
}
.splash-whale circle { fill: #d8eeee; stroke: none; }
.splash-current {
  position: absolute;
  left: -12%;
  top: 56%;
  width: 125%;
  height: 25%;
  border-top: 1px solid rgba(129, 201, 211, .28);
  border-radius: 50%;
  opacity: 0;
  transform: rotate(-5deg);
  animation: splashCurrent 1.45s .42s ease-out both;
}
.splash-shuttle {
  position: absolute;
  z-index: 3;
  left: -80px;
  top: 28%;
  width: 58px;
  height: 27px;
  border: 2px solid rgba(223, 247, 247, .88);
  border-width: 2px 0 2px 2px;
  border-radius: 70% 10% 10% 70%;
  filter: drop-shadow(-16px 5px 7px rgba(87, 192, 209, .28));
  opacity: 0;
  animation: splashShuttle .72s .62s cubic-bezier(.18,.68,.3,1) both;
}
.splash-shuttle::before,
.splash-shuttle::after { content: ""; position: absolute; left: 16px; width: 41px; height: 1px; background: rgba(221, 247, 247, .82); transform-origin: left; }
.splash-shuttle::before { top: 5px; transform: rotate(18deg); }
.splash-shuttle::after { bottom: 5px; transform: rotate(-18deg); }
.splash-shuttle i { position: absolute; left: -10px; top: 6px; width: 14px; height: 15px; border-radius: 48%; background: #edf2e8; }
.splash-brand {
  position: relative;
  z-index: 4;
  display: grid;
  place-items: center;
  text-align: center;
  opacity: 0;
  transform: translateY(8px);
  animation: splashBrand .48s .86s ease-out both;
}
.splash-mark { width: 46px; height: 46px; display: grid; place-items: center; margin-bottom: 13px; border: 1px solid rgba(209, 235, 236, .3); border-radius: 50%; color: #dceff0; }
.splash-mark svg { width: 29px; fill: currentColor; }
.splash-brand p { margin: 0; font-size: clamp(23px, 3vw, 31px); font-weight: 650; letter-spacing: .1em; }
.splash-brand strong { margin-top: 7px; color: #9fbcc2; font-size: 12px; font-weight: 450; letter-spacing: .14em; }

@keyframes splashWhale {
  0% { opacity: 0; transform: translate(-88%, -52%) scale(.82); }
  30% { opacity: .74; }
  100% { opacity: .46; transform: translate(-48%, -52%) scale(1); }
}
@keyframes splashCurrent { from { opacity: 0; transform: translateX(-7%) rotate(-5deg); } to { opacity: .48; transform: translateX(0) rotate(-5deg); } }
@keyframes splashShuttle { 0% { opacity: 0; transform: translate3d(0, 120px, 0) rotate(-23deg) scale(.72); } 15% { opacity: .9; } 78% { opacity: .86; } 100% { opacity: 0; transform: translate3d(calc(100vw + 150px), -80px, 0) rotate(-19deg) scale(.92); } }
@keyframes splashBrand { from { opacity: .16; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@keyframes splashLight { from { opacity: 0; transform: translateY(-5%) rotate(12deg); } to { opacity: .14; transform: translateY(0) rotate(12deg); } }
@keyframes splashBubble { from { opacity: 0; transform: translateY(18px); } to { opacity: .7; transform: translateY(-22px); } }

/* Small section reveals add rhythm without turning scrolling into a spectacle. */
.tool-directory,
.shop-directory { animation: portalSectionIn .5s .08s ease-out both; }
@keyframes portalSectionIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

@media (max-width: 620px) {
  .splash-whale { width: 135vw; top: 46%; }
  .splash-brand { transform: translateY(34px); }
  .splash-brand p { font-size: 24px; }
  .splash-shuttle { top: 24%; width: 50px; }
}

@media (prefers-reduced-motion: reduce) {
  .portal-splash { display: none; }
  .tool-directory,
  .shop-directory { animation: none; }
}
