:root{
  --bg:#0F131C; --surface:#1E2C4B; --fg:#FFF;
  --fg-dim:rgba(255,255,255,.66); --fg-faint:rgba(255,255,255,.42);
  --hairline:rgba(255,255,255,.12); --accent:#78DAE7;
  --font-jp:"Zen Kaku Gothic New",system-ui,sans-serif;
  --font-mono:"IBM Plex Mono",ui-monospace,monospace;
  --font-display:"Bebas Neue",var(--font-jp);
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;overflow:hidden;background:var(--bg);color:var(--fg);
  font-family:var(--font-jp);-webkit-font-smoothing:antialiased}
#gl{position:fixed;inset:0;display:block}
a{color:inherit}
button{font-family:inherit;color:inherit;background:none;border:0;cursor:pointer}
[hidden]{display:none!important}

/* ---------- intro ---------- */
#intro{position:fixed;inset:0;z-index:50;display:grid;place-items:center;
  background:radial-gradient(60% 50% at 50% 35%,rgba(90,140,255,.10),transparent 70%),var(--bg);
  transition:opacity .6s ease}
#intro.out{opacity:0;pointer-events:none}
.intro-box{max-width:680px;padding:32px;text-align:center}
.intro-eyebrow{font-family:var(--font-mono);font-size:12px;letter-spacing:.24em;color:var(--fg-dim)}
.intro-eyebrow b{color:var(--accent)}
.intro-title{font-family:var(--font-display);font-weight:400;font-size:clamp(56px,10vw,96px);
  line-height:.95;margin:10px 0 6px;letter-spacing:.02em}
.intro-title em{font-style:normal;background:linear-gradient(90deg,#FFF 5%,var(--accent) 90%);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.intro-theme{font-size:clamp(16px,2.4vw,21px);font-weight:700;margin:6px 0 10px}
.intro-sub{font-size:13.5px;color:var(--fg-dim);line-height:1.85;margin:0 auto 18px;max-width:52ch}
.intro-langs{display:flex;gap:8px;justify-content:center;margin-bottom:16px;flex-wrap:wrap}
.intro-stats{display:flex;gap:26px;justify-content:center;margin-bottom:22px;flex-wrap:wrap}
.stat{font-family:var(--font-mono)}
.stat b{display:block;font-size:22px;font-weight:600}
.stat b em{font-style:normal;color:var(--accent)}
.stat span{font-size:9px;letter-spacing:.18em;color:var(--fg-faint)}
.btn-launch{display:inline-flex;align-items:center;gap:10px;font-weight:700;font-size:16px;
  padding:16px 34px;border-radius:9999px;color:#0F131C;
  background:linear-gradient(135deg,#78DAE7,#5BB8D4);
  box-shadow:0 8px 30px -8px rgba(120,218,231,.55);transition:transform .15s ease}
.btn-launch:not(:disabled):hover{transform:translateY(-2px)}
.btn-launch:disabled{opacity:.55;cursor:wait}
.intro-note{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;color:var(--fg-faint);margin:16px 0 8px}
.intro-legal{font-size:10px;color:rgba(255,255,255,.3);line-height:1.7;max-width:60ch;margin:0 auto}

/* ---------- chrome ---------- */
.topbar{position:fixed;top:0;left:0;right:0;height:56px;z-index:20;
  display:flex;align-items:center;justify-content:space-between;padding:0 18px;
  background:rgba(15,19,28,.78);backdrop-filter:blur(10px);border-bottom:1px solid var(--hairline)}
.brand{display:flex;align-items:baseline;gap:12px}
.brand__name{font-family:var(--font-display);font-size:23px;letter-spacing:.05em}
.brand__name em{font-style:normal;background:linear-gradient(90deg,#FFF 10%,var(--accent) 95%);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.brand__by{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;color:var(--fg-dim);text-decoration:none}
.brand__by b{color:var(--accent)}
.topbar__right{display:flex;align-items:center;gap:12px}
.langs{display:flex;gap:5px}
.chip{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.02em;
  padding:6px 12px;border-radius:9999px;border:1px solid var(--hairline);color:var(--fg-dim);
  background:rgba(30,44,75,.5);transition:color .15s,border-color .15s}
.chip:hover{color:#fff;border-color:rgba(255,255,255,.35)}
.chip--on{background:var(--accent);border-color:var(--accent);color:#0F131C;font-weight:600}
.chip--on:hover{color:#0F131C}

/* ---------- panel ---------- */
.panel{position:fixed;left:14px;top:108px;bottom:120px;width:236px;z-index:15;
  background:rgba(20,28,46,.82);backdrop-filter:blur(8px);
  border:1px solid var(--hairline);border-radius:14px;padding:14px 8px 10px 14px;
  display:flex;flex-direction:column}
.panel__title{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;color:var(--fg-dim);margin:0 0 8px}
.panel__src{font-size:8px;color:rgba(255,255,255,.32);line-height:1.6;margin:8px 0 0;padding-right:6px}
#lineList{overflow-y:auto;flex:1;padding-right:6px;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.18) transparent}
.grp{margin-bottom:10px}
.grp__head{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:10px;
  letter-spacing:.16em;color:var(--fg-faint);margin:8px 0 4px;cursor:pointer;width:100%;text-align:left}
.grp__head .sw{margin-left:auto}
.line-item{display:flex;align-items:center;gap:8px;padding:4px 2px;font-size:12px;width:100%;
  text-align:left;border-radius:8px;color:rgba(255,255,255,.88)}
.line-item:hover{background:rgba(255,255,255,.06)}
.line-chip{width:16px;height:16px;border-radius:5px;flex:0 0 auto}
.line-name{flex:1;line-height:1.25}
.line-name small{display:block;font-size:9px;color:var(--fg-faint)}
.sw{width:26px;height:14px;border-radius:7px;background:rgba(255,255,255,.15);position:relative;flex:0 0 auto;transition:background .15s}
.sw::after{content:"";position:absolute;top:2px;left:2px;width:10px;height:10px;border-radius:50%;
  background:#fff;transition:left .15s}
.on>.sw{background:var(--accent)}
.on>.sw::after{left:14px}
.line-item:not(.on){color:var(--fg-faint)}
.panel-toggle{position:fixed;left:14px;top:70px;z-index:16}

/* ---------- popup ---------- */
.popup{position:fixed;z-index:18;width:290px;background:rgba(24,34,58,.94);
  border:1px solid rgba(120,218,231,.45);border-radius:14px;padding:14px 16px 13px;
  box-shadow:0 18px 50px -12px rgba(0,0,0,.65);transform:translate(-50%,calc(-100% - 16px))}
.popup__close{position:absolute;right:8px;top:6px;color:var(--fg-faint);font-size:15px;padding:4px}
.popup__head{margin-bottom:7px;padding-right:16px}
.popup__name{font-size:17.5px;font-weight:700;line-height:1.2}
.popup__head small{font-size:11.5px;color:var(--fg-dim);margin-left:8px}
.popup__lines{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}
.popup__lines .lchip{font-family:var(--font-mono);font-size:9.5px;padding:3px 8px;border-radius:9999px;color:#fff}
.popup__depth{font-family:var(--font-mono);font-size:10.5px;color:var(--accent);margin-bottom:10px}
.popup__cta{display:block;padding:8px 12px;border-radius:9999px;text-align:center;
  background:linear-gradient(135deg,#78DAE7,#5BB8D4);color:#0F131C;font-weight:700;
  font-size:12px;text-decoration:none}

/* ---------- follow hud ---------- */
.followhud{position:fixed;top:70px;left:50%;transform:translateX(-50%);z-index:17;
  display:flex;align-items:center;gap:10px;background:rgba(24,34,58,.88);
  border:1px solid var(--hairline);border-radius:9999px;padding:8px 10px 8px 18px}
#followLabel{font-family:var(--font-mono);font-size:12px;color:var(--fg-dim)}
#followLabel b{color:#fff}

/* ---------- timeline ---------- */
.timeline{position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:15;
  width:min(720px,calc(100vw - 28px));background:rgba(20,28,46,.85);backdrop-filter:blur(8px);
  border:1px solid var(--hairline);border-radius:16px;padding:10px 16px;
  display:flex;align-items:center;gap:14px}
.play{width:36px;height:36px;border-radius:50%;flex:0 0 auto;display:grid;place-items:center;
  background:linear-gradient(135deg,#78DAE7,#5BB8D4);color:#0F131C;font-size:13px;font-weight:700}
.clock{display:flex;flex-direction:column;align-items:center;flex:0 0 auto}
#clock{font-family:var(--font-mono);font-size:19px;font-weight:600;color:#fff}
.clock__day{font-family:var(--font-mono);font-size:8px;letter-spacing:.18em;color:var(--fg-faint)}
.tl-body{flex:1;min-width:0}
.tl-presets{display:flex;justify-content:space-between;margin-bottom:4px}
.tl-presets button{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.06em;
  color:var(--fg-faint);padding:2px 4px}
.tl-presets button.on{color:var(--accent);text-shadow:0 0 12px rgba(120,218,231,.8)}
#scrub{width:100%;accent-color:#78DAE7;height:4px}
.traincount{display:flex;flex-direction:column;align-items:center;flex:0 0 auto}
.traincount b{font-family:var(--font-mono);font-size:17px;color:#fff}
.traincount span{font-family:var(--font-mono);font-size:7.5px;letter-spacing:.14em;color:var(--fg-faint)}

/* ---------- JLS CTA ---------- */
.jls-cta{position:fixed;right:16px;bottom:96px;z-index:15;width:264px;
  background:rgba(20,28,46,.88);border:1px solid var(--hairline);border-radius:14px;padding:13px 15px}
.jls-cta__close{position:absolute;right:6px;top:4px;color:var(--fg-faint);font-size:14px;padding:4px}
.jls-cta__eyebrow{font-family:var(--font-mono);font-size:9px;letter-spacing:.2em;color:var(--accent);margin:0 0 5px}
.jls-cta__text{font-size:12px;line-height:1.6;margin:0 0 7px;color:rgba(255,255,255,.85)}
.jls-cta__link{font-size:12px;color:var(--accent);font-weight:700;text-decoration:none}

.attribution{position:fixed;left:16px;bottom:16px;z-index:14;font-size:8.5px;
  color:rgba(255,255,255,.28);max-width:300px;line-height:1.6}

/* ---------- OGP撮影専用 ---------- */
.og-title{position:fixed;left:50%;top:37%;transform:translate(-50%,-50%);
  text-align:center;z-index:30;pointer-events:none}
.og-title b{font-family:var(--font-display);font-weight:400;font-size:120px;display:block;
  letter-spacing:.02em;line-height:1;text-shadow:0 10px 50px rgba(0,0,0,.85)}
.og-title b em{font-style:normal;background:linear-gradient(90deg,#FFF 5%,var(--accent) 90%);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.og-title span{font-family:var(--font-mono);font-size:16px;color:rgba(255,255,255,.8);
  letter-spacing:.14em;text-shadow:0 4px 20px rgba(0,0,0,.9)}

@media (max-width:760px){
  .topbar{height:48px;padding:0 10px}
  .brand{gap:6px}
  .brand__name{font-size:16px;white-space:nowrap}
  .brand__by{display:none}
  .langs{gap:3px}
  .topbar .chip{padding:4px 7px;font-size:9.5px;white-space:nowrap}
  #fullscreen{display:none}
  .panel{width:min(230px,70vw);top:92px;bottom:110px}
  .panel-toggle{top:58px}
  .jls-cta{display:none}
  .attribution{display:none}
  .timeline{padding:7px 10px;gap:8px;bottom:10px}
  .play{width:30px;height:30px;font-size:11px}
  #clock{font-size:15px}
  .tl-presets button{font-size:7.5px;letter-spacing:.02em}
  #speed{padding:4px 7px;font-size:10px}
  .traincount{display:none}
  .popup{width:min(280px,86vw)}
}
