@font-face {
  font-family: "SPIRAL Display";
  src: url(fonts/spiral-display.woff2) format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

:root {
    --navy: #123a6b;
    --navy-dark: #0e2e55;
    --accent: #0e8a9c;
    --ink: #333333;
    --ink-soft: #666666;
    --line: #e6e6e6;
    --bg: #ffffff;
    --bg-gray: #f5f5f5;
    --maxw: 1080px;
    --font: "Hiragino Kaku Gothic ProN", "Hiragino Sans", "Noto Sans JP", "Yu Gothic", "Meiryo", system-ui, sans-serif;
  }

  * { box-sizing: border-box; margin: 0; padding: 0; }
  html { scroll-behavior: smooth; scroll-padding-top: 110px; }
  body {
    font-family: var(--font);
    color: var(--ink);
    background: var(--bg);
    line-height: 1.9;
    font-size: 15.5px;
    -webkit-font-smoothing: antialiased;
  }
  a { color: inherit; text-decoration: none; }
  img { max-width: 100%; display: block; }
  ul { list-style: none; }
  .abbr { font-size: 0.84em; font-weight: 600; }

  .container { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 0 24px; }

  /* ---------- Header ---------- */
  header { position: sticky; top: 0; z-index: 100; background: #fff; border-bottom: 1px solid var(--line); }
  .topbar { background: var(--navy); color: rgba(255,255,255,0.85); font-size: 12.5px; }
  .topbar .container { display: flex; justify-content: flex-end; align-items: center; gap: 4px; height: 34px; }
  .topbar a { padding: 0 12px; line-height: 34px; transition: color .2s; }
  .topbar a:hover { color: #fff; }
  .topbar a + a { border-left: 1px solid rgba(255,255,255,0.22); }

  .nav { display: flex; align-items: center; justify-content: space-between; height: 74px; }
  .brand { display: flex; align-items: center; }
  .brand-logo { height: 34px; width: auto; }

  .nav-links { display: flex; align-items: center; gap: 2px; }
  .nav-links a {
    padding: 10px 15px; font-size: 14.5px; font-weight: 600; color: var(--ink);
    position: relative; transition: color .2s; text-align: center;
  }
  .nav-links a::after {
    content: ""; position: absolute; left: 15px; right: 15px; bottom: 4px; height: 2px;
    background: var(--accent); transform: scaleX(0); transition: transform .22s;
  }
  .nav-links a:hover { color: var(--accent); }
  .nav-links a:hover::after { transform: scaleX(1); }

  .menu-toggle {
    display: none; background: none; border: none; cursor: pointer;
    width: 44px; height: 44px; flex-direction: column; justify-content: center; gap: 5px;
  }
  .menu-toggle span {
    display: block; height: 2px; width: 24px; background: var(--navy); border-radius: 2px;
    transition: transform .25s ease, opacity .2s ease;
  }
  .menu-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
  .menu-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
  .menu-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

  /* ---------- Hero ---------- */
  .hero { position: relative; background: #0b2650; color: #fff; overflow: hidden; }
  .hero-bg { position: absolute; inset: 0; overflow: hidden; }
  .hero-bg .aurora {
    position: absolute; border-radius: 50%; aspect-ratio: 1;
    filter: blur(72px); opacity: 0.5; mix-blend-mode: screen; will-change: transform;
  }
  .hero-bg .a1 { width: 46vw; min-width: 420px; background: radial-gradient(circle, #0e8a9c 0%, transparent 68%); top: -14%; left: -8%; animation: auroraA 19s ease-in-out infinite; }
  .hero-bg .a2 { width: 42vw; min-width: 380px; background: radial-gradient(circle, #1f6fd0 0%, transparent 68%); top: -22%; right: -6%; animation: auroraB 23s ease-in-out infinite; }
  .hero-bg .a3 { width: 40vw; min-width: 360px; background: radial-gradient(circle, #16c1cf 0%, transparent 66%); bottom: -30%; left: 36%; animation: auroraC 21s ease-in-out infinite; }
  .hero-veil { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(9,32,62,0.86) 0%, rgba(9,32,62,0.44) 52%, rgba(9,32,62,0.1) 100%); }
  .hero-particles { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
  .hero .container { position: relative; z-index: 3; }
  @keyframes auroraA { 0%,100%{transform:translate(0,0) scale(1)} 50%{transform:translate(6%,4%) scale(1.16)} }
  @keyframes auroraB { 0%,100%{transform:translate(0,0) scale(1.05)} 50%{transform:translate(-5%,5%) scale(0.92)} }
  @keyframes auroraC { 0%,100%{transform:translate(0,0) scale(1)} 50%{transform:translate(-4%,-6%) scale(1.12)} }
  .hero-inner { position: relative; padding: 92px 0 96px; max-width: 1000px; animation: heroIn 1s ease both; }
  @keyframes heroIn { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }
  .hero .kicker {
    display: inline-block; font-size: 13px; font-weight: 600; letter-spacing: 0.1em;
    padding: 5px 14px; border: 1px solid rgba(255,255,255,0.4); border-radius: 3px; margin-bottom: 28px;
  }
  .hero-mark {
    font-family: "SPIRAL Display", var(--font);
    font-size: clamp(40px, 7.6vw, 84px); font-weight: 500; letter-spacing: 0.08em;
    line-height: 1.1; margin-bottom: 22px;
    background: linear-gradient(100deg, #ffffff 32%, #8fe8f4 50%, #ffffff 68%);
    background-size: 220% 100%;
    -webkit-background-clip: text; background-clip: text; color: transparent;
    animation: sheen 7s linear infinite;
  }
  @keyframes sheen { to { background-position: -220% 0; } }
  .hero .name-en { font-size: 12.5px; letter-spacing: 0.05em; color: rgba(255,255,255,0.66); }
  .hero .name-en .ini {
    font-weight: 700; font-size: 15px; color: #9fe9f5;
    border-bottom: 1px solid rgba(159,233,245,0.6); padding-bottom: 1px;
  }
  .hero .name-ja { margin-top: 8px; font-size: 15px; color: rgba(255,255,255,0.9); font-weight: 600; }
  @media (prefers-reduced-motion: reduce) {
    .hero-bg .aurora, .hero-inner, .hero-mark { animation: none !important; }
    .hero-mark { color: #fff; -webkit-text-fill-color: #fff; }
  }
  .br-sp { display: none; }
  .hero h1 {
    margin-top: 30px;
    font-size: clamp(17px, 2.1vw, 23px); font-weight: 700; line-height: 1.7;
    letter-spacing: 0.01em; text-wrap: balance;
  }

  /* ---------- Operating systems ---------- */
  .ops { background: #0b2650; padding: 0; border-top: 1px solid rgba(255,255,255,0.09); }
  .ops .container { display: flex; align-items: center; gap: 32px; padding-block: 16px; }
  .ops-label {
    flex: none; font-size: 11.5px; font-weight: 700; letter-spacing: 0.1em;
    color: rgba(255,255,255,0.5);
  }
  .ops-list { display: flex; flex-wrap: wrap; gap: 8px 30px; }
  .ops-list a {
    display: flex; align-items: baseline; gap: 9px; position: relative; padding-left: 15px;
    transition: opacity .2s;
  }
  .ops-list a::before {
    content: ""; position: absolute; left: 0; top: 0.5em;
    width: 7px; height: 7px; border-radius: 50%; background: #16c1cf;
    box-shadow: 0 0 0 3px rgba(22,193,207,0.26), 0 0 9px rgba(22,193,207,0.6);
  }
  .ops-list b { font-size: 14px; font-weight: 700; color: #fff; }
  .ops-list span { font-size: 12.5px; color: rgba(255,255,255,0.62); }
  .ops-list a:hover { opacity: 0.72; }
  .ops-list a:hover b { text-decoration: underline; text-underline-offset: 3px; }

  /* ---------- Section commons ---------- */
  section { padding: 78px 0; }
  .section-gray { background: var(--bg-gray); }
  .sec-head { max-width: 760px; margin: 0 auto 48px; text-align: center; }
  .sec-head .en {
    display: inline-block; font-size: 12.5px; font-weight: 700; letter-spacing: 0.16em;
    color: var(--accent); text-transform: uppercase; margin-bottom: 12px;
  }
  .sec-head .en::before, .sec-head .en::after {
    content: ""; display: inline-block; width: 22px; height: 2px;
    background: var(--accent); vertical-align: middle;
  }
  .sec-head .en::before { margin-right: 12px; }
  .sec-head .en::after { margin-left: 12px; }
  .sec-head h2 { font-size: clamp(22px, 3vw, 30px); font-weight: 800; color: var(--navy); line-height: 1.45; }
  .sec-head p { margin-top: 14px; color: var(--ink-soft); font-size: 15.5px; }

  /* 節内の小見出し */
  .sub-head { max-width: 760px; margin: 0 auto 32px; text-align: center; }
  .sub-head h3 { font-size: clamp(18px, 2.2vw, 22px); font-weight: 800; color: var(--navy); line-height: 1.5; }
  .sub-head h3::after {
    content: ""; display: block; width: 34px; height: 2px; background: var(--accent);
    margin: 14px auto 0;
  }
  .sub-head p { margin-top: 12px; color: var(--ink-soft); font-size: 14.5px; }

  /* ---------- News ---------- */
  .news-list {
    max-width: 880px; margin: 0 auto; border-top: 1px solid var(--line);
    display: grid; grid-template-columns: 118px minmax(104px, auto) 1fr;
  }
  .news-item {
    grid-column: 1 / -1;
    display: grid; gap: 20px; align-items: baseline;
    grid-template-columns: 118px minmax(104px, auto) 1fr;
    grid-template-columns: subgrid;
    padding: 20px 6px; border-bottom: 1px solid var(--line);
  }
  .news-date { font-size: 13.5px; color: var(--ink-soft); letter-spacing: 0.04em; font-variant-numeric: tabular-nums; }
  .news-tag {
    justify-self: start; font-size: 11.5px; font-weight: 700; letter-spacing: 0.06em;
    color: var(--accent); border: 1px solid #bcdde3; background: #f0f8f9;
    padding: 3px 12px; border-radius: 2px; line-height: 1.7; white-space: nowrap;
  }
  .news-tag.is-navy { color: var(--navy); border-color: #ccd7e6; background: #f2f5fa; }
  .news-title { font-size: 15px; color: var(--ink); font-weight: 600; line-height: 1.75; transition: color .2s; }

  /* ---------- About / Concept ---------- */
  .about p { color: var(--ink); margin-bottom: 20px; }
  .about p:last-of-type { margin-bottom: 0; }

  /* Message from director */
  .message-grid { display: grid; grid-template-columns: 200px 1fr; gap: 40px; align-items: start; }
  .message-photo {
    width: 100%; height: auto; display: block;
    border: 1px solid var(--line);
  }
  .message-body p { margin-bottom: 18px; color: var(--ink); }
  .message-sign { margin-top: 8px; font-size: 14px; color: var(--ink-soft); }
  .message-sign b { color: var(--navy); font-size: 17px; margin-left: 8px; }

  /* ---------- Members ---------- */
  .labs { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
  .lab { background: #fff; border: 1px solid var(--line); padding: 26px 28px; }
  .lab h3 { font-size: 16px; color: var(--navy); font-weight: 700; }
  .lab h3::after {
    content: ""; display: block; width: 28px; height: 2px;
    background: var(--accent); margin: 12px 0 14px;
  }
  .lab p { font-size: 13.5px; color: var(--ink-soft); line-height: 1.9; }
  .lab p + p { margin-top: 12px; }

  .roster-group + .roster-group { margin-top: 46px; }
  .roster-head {
    display: flex; align-items: baseline; gap: 14px;
    padding-bottom: 12px; border-bottom: 2px solid var(--navy);
  }
  .roster-head h4 { font-size: 17px; color: var(--navy); font-weight: 800; }
  .roster-count { font-size: 12.5px; color: var(--ink-soft); font-weight: 600; }
  .roster-desc { margin-top: 16px; font-size: 13.5px; color: var(--ink-soft); line-height: 1.9; }
  .roster-list {
    margin-top: 16px; background: #fff;
    border: 1px solid var(--line); padding: 2px 24px;
  }
  .roster-item {
    display: grid; grid-template-columns: 240px 1fr; gap: 4px 24px;
    padding: 14px 0; border-bottom: 1px solid var(--line);
  }
  .roster-item:last-child { border-bottom: none; }
  .rm-person b { font-size: 15px; font-weight: 700; color: var(--ink); }
  .rm-link {
    color: var(--navy); text-decoration: underline;
    text-decoration-color: #bcdde3; text-underline-offset: 4px; transition: color .2s;
  }
  .rm-link:hover { color: var(--accent); text-decoration-color: currentColor; }
  .rm-link::after {
    content: "\2197"; display: inline-block; margin-left: 5px;
    font-size: 0.82em; font-weight: 400; vertical-align: 1px;
  }
  .rm-role { display: block; margin-top: 3px; font-size: 12.5px; font-weight: 700; color: var(--accent); }
  .rm-title { display: block; font-size: 14px; color: var(--ink); }
  .rm-org { display: block; margin-top: 3px; font-size: 13px; color: var(--ink-soft); line-height: 1.8; }

  .org-chart { width: 100%; margin: 0 auto; }
  .org-top { display: flex; justify-content: center; }
  .org-node {
    background: var(--navy); color: #fff;
    padding: 14px 30px; font-weight: 700; font-size: 15px; text-align: center;
  }
  .org-trunk { position: relative; padding: 24px 0; }
  .org-trunk::before {
    content: ""; position: absolute; left: 50%; top: 0; bottom: 0;
    width: 1px; background: #c9d2dd;
  }
  .org-staff { display: grid; gap: 10px; justify-items: start; margin-left: calc(50% + 52px); }
  .org-chip {
    position: relative; border: 1px solid var(--line); background: #fff;
    padding: 8px 16px; font-size: 13.5px; font-weight: 700; color: var(--navy);
  }
  .org-chip::before {
    content: ""; position: absolute; left: -53px; top: 50%;
    width: 53px; height: 1px; background: #c9d2dd;
  }
  .org-labs {
    --org-gap: 12px;
    position: relative; display: grid; grid-template-columns: repeat(4, 1fr);
    gap: var(--org-gap); padding-top: 30px;
  }
  .org-labs::before {
    content: ""; position: absolute; top: 0;
    left: calc((100% - 3 * var(--org-gap)) / 8);
    right: calc((100% - 3 * var(--org-gap)) / 8 - 1px);
    height: 1px; background: #c9d2dd;
  }
  .org-unit {
    position: relative; border: 1px solid var(--line); background: #fff;
    padding: 18px 8px; text-align: center;
  }
  .org-unit::before {
    content: ""; position: absolute; top: -31px; left: 50%;
    width: 1px; height: 31px; background: #c9d2dd;
  }
  .org-unit b {
    display: block; color: var(--navy); font-size: 14px; line-height: 1.6;
    text-wrap: balance; line-break: strict;
  }

  /* ---------- Facts & Figures ---------- */
  .facts {
    display: grid; grid-template-columns: repeat(3, 1fr);
    grid-template-rows: auto auto auto; row-gap: 32px;
  }
  .facts-col {
    padding: 4px 24px; display: grid; align-content: start; gap: 32px;
    grid-row: 1 / -1; grid-template-rows: subgrid;
  }
  .facts-col + .facts-col { border-left: 1px solid #dde3ea; }
  .facts-col > h3 { font-size: 19px; font-weight: 800; color: var(--navy); letter-spacing: 0.1em; }
  .facts-col > h3::after {
    content: ""; display: block; width: 28px; height: 2px;
    background: var(--accent); margin-top: 12px;
  }
  .fact { display: grid; gap: 2px; }
  .fact-label { font-size: 12.5px; font-weight: 700; color: var(--ink-soft); letter-spacing: 0.04em; }
  .fact-figs { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 12px; }
  .fig { font-size: 14px; font-weight: 700; color: var(--navy); white-space: nowrap; }
  .fig em {
    font-style: normal; font-size: 42px; font-weight: 800;
    letter-spacing: 0.01em; margin-right: 4px; line-height: 1.2;
  }
  .fact-note { font-size: 12px; color: var(--ink-soft); }
  .facts-more { margin-top: 48px; text-align: center; }

  /* ---------- Our Journey ---------- */
  .journey-block + .journey-block { margin-top: 68px; }
  .journey-title {
    display: flex; align-items: baseline; gap: 18px; flex-wrap: wrap;
    padding-bottom: 14px; border-bottom: 1px solid var(--line);
  }
  .journey-title b { font-size: 24px; font-weight: 800; color: var(--navy); letter-spacing: 0.1em; }
  .journey-title span { font-size: 15px; font-weight: 600; color: var(--ink-soft); }
  .journey-list { margin-top: 30px; display: grid; gap: 10px; }
  .journey-list li {
    position: relative; padding-left: 22px;
    font-size: 14.5px; color: var(--ink-soft); line-height: 1.9;
  }
  .journey-list b { font-weight: 700; color: var(--ink); }
  .journey-list li::before {
    content: ""; position: absolute; left: 4px; top: 0.82em;
    width: 6px; height: 6px; border-radius: 50%; background: var(--accent);
  }

  /* ---------- Buttons ---------- */
  .btn {
    display: inline-flex; align-items: center; gap: 8px; padding: 12px 30px;
    font-size: 14.5px; font-weight: 700; border: 1px solid var(--navy); background: var(--navy);
    color: #fff; cursor: pointer; transition: background .2s, color .2s;
  }
  .btn:hover { background: var(--navy-dark); }
  .btn-outline { background: transparent; color: var(--navy); }
  .btn-outline:hover { background: var(--navy); color: #fff; }

  /* ---------- Contact ---------- */
  .contact-info { max-width: 640px; margin: 0 auto; }
  .contact-info dl { display: grid; gap: 0; border-top: 1px solid var(--line); }
  .contact-info dl > div {
    display: grid; grid-template-columns: 140px 1fr; gap: 20px; align-items: start;
    padding: 20px 4px; border-bottom: 1px solid var(--line);
  }
  .contact-info dt { font-size: 13.5px; font-weight: 700; color: var(--accent); letter-spacing: 0.06em; }
  .contact-info dd { font-size: 14.5px; color: var(--ink); }
  .contact-tel { display: block; margin-top: 10px; font-size: 14px; color: var(--ink-soft); }

  /* ---------- Footer ---------- */
  footer { background: var(--navy-dark); color: rgba(255,255,255,0.78); padding: 52px 0 26px; }
  .footer-top { display: grid; grid-template-columns: 1.5fr 1fr 1fr; gap: 40px; margin-bottom: 38px; }
  .footer-brand p { margin-top: 16px; font-size: 13.5px; line-height: 1.9; max-width: 340px; }
  .footer-col h4 { font-size: 13.5px; color: #fff; font-weight: 700; margin-bottom: 14px; }
  .footer-col ul { display: grid; gap: 10px; }
  .footer-col a { font-size: 13.5px; color: rgba(255,255,255,0.72); transition: color .2s; }
  .footer-col a:hover { color: #fff; }
  .footer-col dl { display: grid; gap: 12px; }
  .footer-col dt { font-size: 11.5px; font-weight: 700; letter-spacing: 0.08em; color: rgba(255,255,255,0.55); }
  .footer-col dd { font-size: 13.5px; color: rgba(255,255,255,0.8); line-height: 1.8; }
  .footer-bottom {
    border-top: 1px solid rgba(255,255,255,0.15); padding-top: 22px;
    display: flex; justify-content: space-between; flex-wrap: wrap; gap: 10px;
    font-size: 12.5px; color: rgba(255,255,255,0.55);
  }

  /* ---------- Reveal ---------- */
  .reveal { opacity: 0; transform: translateY(16px); transition: opacity .6s ease, transform .6s ease; }
  .reveal.in { opacity: 1; transform: none; }

  /* ---------- Responsive ---------- */
  @media (max-width: 980px) {
    .nav-links {
      position: fixed; inset: 108px 0 auto 0; flex-direction: column; align-items: stretch; gap: 0;
      background: #fff; border-bottom: 1px solid var(--line); padding: 8px 16px 16px;
      transform: translateY(-160%);
    }
    .nav-links.anim { transition: transform .3s ease; }
    .nav-links.open { transform: translateY(0); }
    .nav-links a { padding: 13px 8px; font-size: 15px; border-bottom: 1px solid var(--line); text-align: left; }
    .nav-links a::after { display: none; }
    .menu-toggle { display: flex; }
    .brand-logo { height: 26px; }
  }
  @media (max-width: 600px) {
    .br-sp { display: inline; }
  }
  @media (max-width: 900px) {
    .ops .container { flex-direction: column; align-items: flex-start; gap: 12px; padding-block: 20px; }
    .ops-list { flex-direction: column; gap: 10px; }
    .message-grid { grid-template-columns: 1fr; }
    .message-photo { width: min(300px, 70%); justify-self: center; order: 2; }
    .labs { grid-template-columns: 1fr; }
    .facts { grid-template-columns: 1fr; grid-template-rows: none; }
    .facts-col { padding: 0; gap: 14px; max-width: 440px; margin: 0 auto; width: 100%; grid-row: auto; grid-template-rows: none; }
    .facts-col + .facts-col { border-left: none; border-top: 1px solid #dde3ea; padding-top: 24px; margin-top: 24px; }
    .facts-col > h3 { font-size: 17px; }
    .facts-col > h3::after { margin-top: 10px; }
    .fact { grid-template-columns: 1fr auto; align-items: baseline; gap: 2px 16px; }
    .fact-figs { justify-content: flex-end; gap: 0 14px; }
    .fig em { font-size: 36px; }
    .facts-more { margin-top: 36px; }
    .org-chart { max-width: 560px; }
    .org-node { width: 100%; }
    .org-trunk { padding: 20px 0; }
    .org-trunk::before { left: 16px; }
    .org-staff { margin-left: 44px; }
    .org-chip::before { left: -29px; width: 29px; }
    .org-labs {
      --org-gap: 10px;
      grid-template-columns: 1fr; padding-top: 0; margin-left: 72px;
    }
    .org-labs::before { left: -56px; right: auto; width: 26px; }
    .org-unit { text-align: left; padding: 14px 16px; }
    .org-unit::before { top: 50%; left: -32px; width: 32px; height: 1px; }
    .org-unit::after {
      content: ""; position: absolute; left: -32px; width: 1px; background: #c9d2dd;
      top: calc(-1 * var(--org-gap) - 1px); height: calc(100% + var(--org-gap) + 3px);
    }
    .org-unit:first-child::after { top: -1px; height: calc(100% + 3px); }
    .org-unit:last-child::after { height: calc(50% + var(--org-gap) + 2px); }
    .footer-top { grid-template-columns: 1fr 1fr; }
  }
  @media (max-width: 680px) {
    .topbar { font-size: 11.5px; }
    .topbar .container { height: 30px; }
    .topbar a { padding: 0 10px; line-height: 30px; }
    .nav-links { inset: 104px 0 auto 0; }
    .roster-list { padding: 2px 16px; }
    .roster-item { grid-template-columns: 1fr; gap: 6px; }
    .news-list { display: block; }
    .news-item { grid-template-columns: 1fr; gap: 8px; padding: 18px 4px; }
    .contact-info dl > div { grid-template-columns: 1fr; gap: 4px; }
    .footer-top { grid-template-columns: 1fr; gap: 28px; }
    section { padding: 58px 0; }
    .hero-inner { padding: 64px 0 68px; }
  }

/* ---------- English pages ---------- */
.lang-en .fig em { font-size: 38px; }
.lang-en .message-sign b { margin-left: 0; }
.lang-en .roster-item { grid-template-columns: 260px 1fr; }
.lang-en .rm-role { font-size: 12px; }
