/* Shared navigation and the opening's permanent final frame. */
html.oto-opening-active, html.oto-opening-active body,
html.oto-menu-active, html.oto-menu-active body { overflow: hidden; }
.oto-header, .oto-hero, .oto-menu { box-sizing: border-box; font-family: "Hiragino Kaku Gothic ProN", Meiryo, sans-serif; text-align: left; }
.oto-header *, .oto-hero *, .oto-menu * { box-sizing: border-box; }
.oto-header { position: absolute; inset: 0 0 auto; z-index: 30; display: flex; align-items: center; gap: 26px; padding: 14px 32px 14px 42px; color: #252a2c; }
.oto-brand { position: relative; flex-shrink: 0; display: block; background: #fff; border-radius: 4px; }
.oto-brand::after { content: ''; position: absolute; inset: 0; background: #30a4be; -webkit-mask: url('/assets/img/logo.png') center / contain no-repeat; mask: url('/assets/img/logo.png') center / contain no-repeat; pointer-events: none; }
.oto-brand img { display: block; width: 64px; height: 64px; opacity: 0; }
.oto-nav { display: flex; align-items: center; justify-content: flex-end; gap: clamp(16px, 1.8vw, 32px); margin-left: auto; min-height: 40px; }
.oto-header a { text-decoration: none; }
.oto-nav a { font-size: 14px; line-height: 1.6; font-weight: 700; white-space: nowrap; color: inherit; transition: color .2s; }
.oto-nav a:hover { color: #248aa0; }
.oto-actions { display: flex; gap: 12px; flex-shrink: 0; }
.oto-pill { display: inline-flex; align-items: center; justify-content: center; min-height: 40px; padding: 8px 26px; border-radius: 28px; font-size: 14px; font-weight: 700; line-height: 1.5; text-decoration: none; transition: filter .2s, transform .2s; }
.oto-pill:hover { filter: brightness(.93); transform: translateY(-2px); }
.oto-line, .oto-line:visited, .oto-line:hover, .oto-line:focus { background: #00b900; color: white; }
.oto-phone, .oto-phone:visited, .oto-phone:hover, .oto-phone:focus { background: #30a4be; color: white; }
.oto-menu-toggle, .oto-menu-close { appearance: none; flex-shrink: 0; border: 0; background: none; color: #20282c; width: 44px; height: 48px; padding: 5px; cursor: pointer; }
.oto-menu-toggle { display: flex; flex-direction: column; justify-content: center; gap: 6px; }
.oto-menu-toggle span { display: block; width: 100%; height: 3px; background: currentColor; border-radius: 2px; }
.oto-menu-toggle small, .oto-menu-close small { display: block; font-size: 9px; line-height: 1; letter-spacing: 1px; }
/* Suppress Bootstrap's Chrome focus ring after pointer clicks. */
.oto-header a:focus:not(:focus-visible), .oto-header button:focus:not(:focus-visible),
.oto-hero a:focus:not(:focus-visible), .oto-menu a:focus:not(:focus-visible),
.oto-menu button:focus:not(:focus-visible) { outline: none; }
.oto-header a:focus-visible, .oto-header button:focus-visible, .oto-hero a:focus-visible, .oto-menu a:focus-visible, .oto-menu button:focus-visible { outline: 3px solid #137d95; outline-offset: 5px; }
.oto-inner { padding-top: 64px; }
.oto-hero { position: relative; height: 100vh; height: 100dvh; min-height: 620px; overflow: hidden; background: #dce3e9; }
.oto-hero-media, .oto-hero-shade, .oto-opening__animation { position: absolute; inset: 0; }
/* Before JavaScript or video is ready, show the opening frame, never the ending. */
.oto-hero-media { background: url('/assets/img/oto-opening-first.jpg?v=09aa778be592') center / cover no-repeat; }
.oto-opening-skipped .oto-hero-media, .oto-ready .oto-hero-media { background-image: url('/assets/img/oto-hero-still.webp?v=09aa778be592'); }
.oto-opening__background { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center; opacity: 1; transition: opacity 1.5s ease-in-out; }
.oto-ready .oto-opening__background { opacity: 0; }
.oto-opening__animation { z-index: 2; pointer-events: none; transform: scale(1.15); transform-origin: center; transition: opacity .55s; }
.oto-opening__animation svg { display: block; width: 100%; height: 100%; filter: brightness(0) invert(0); transition: filter .45s ease; }
.oto-hero-shade { pointer-events: none; background: linear-gradient(180deg, rgba(255,255,255,.28), transparent 30%); }
.oto-hero-copy { position: absolute; left: 3.6%; right: 4%; bottom: 6%; color: white; text-shadow: 0 2px 18px #0003; }
.oto-hero-copy h1 { margin: 0 0 24px; color: white; font-family: "Yu Mincho", "Hiragino Mincho ProN", serif; font-size: clamp(36px, 4.6vw, 76px); font-weight: 600; letter-spacing: .025em; line-height: 1.4; }
.oto-hero-copy h1 em { font-size: 1.33em; font-style: normal; }
.oto-copy-line { white-space: nowrap; }
.oto-hero-copy p { margin: 0; color: white; font-size: clamp(16px, 1.55vw, 25px); font-weight: 700; line-height: 1.65; }
.oto-scroll { position: absolute; right: 5%; bottom: 0; display: flex; align-items: center; flex-direction: column; gap: 18px; color: white; text-decoration: none; }
.oto-scroll:hover, .oto-scroll:focus { color: white; }
.oto-scroll span { writing-mode: vertical-rl; font: 700 12px/1 sans-serif; letter-spacing: 1px; }
.oto-scroll i { display: block; width: 1px; height: 58px; background: #fffa; transform-origin: top; }
.oto-ready .oto-scroll i { animation: oto-scroll-flow 2.4s cubic-bezier(.65, 0, .35, 1) 1s infinite both; }
@keyframes oto-scroll-flow {
  0% { transform: scaleY(0); transform-origin: top; }
  40% { transform: scaleY(1); transform-origin: top; }
  40.1%, 55% { transform: scaleY(1); transform-origin: bottom; }
  90%, 100% { transform: scaleY(0); transform-origin: bottom; }
}
.oto-home .oto-header, .oto-hero-copy h1, .oto-hero-copy p, .oto-scroll, .oto-hero-shade { transition: opacity .8s ease, transform 1s cubic-bezier(.22,1,.36,1); }
.oto-opening-pending .oto-home .oto-header, .oto-opening-pending .oto-hero-copy h1, .oto-opening-pending .oto-hero-copy p, .oto-opening-pending .oto-scroll, .oto-opening-pending .oto-hero-shade { visibility: hidden; opacity: 0; transition: none; transform: translateY(18px); pointer-events: none; }
.oto-opening-active .oto-home .oto-header, .oto-opening-active .oto-hero-copy h1, .oto-opening-active .oto-hero-copy p, .oto-opening-active .oto-scroll, .oto-opening-active .oto-hero-shade { opacity: 0; transform: translateY(18px); pointer-events: none; }
.oto-home.oto-ready .oto-header { transition-delay: .12s; }
.oto-ready .oto-hero-copy h1 { transition-delay: .28s; }
.oto-ready .oto-hero-copy p { transition-delay: .46s; }
.oto-ready .oto-scroll { transition-delay: .7s; }
.oto-menu { position: fixed; inset: 0; width: 100%; height: 100%; max-width: none; max-height: none; margin: 0; padding: 0; border: 0; background: #f5f6f5; color: #30383b; overflow-y: auto; overscroll-behavior: contain; opacity: 0; transform: translateY(-14px); transition: opacity .28s, transform .35s; }
.oto-menu.is-open { opacity: 1; transform: none; }
.oto-menu::backdrop { background: #15272d66; }
.oto-menu-top { position: sticky; top: 0; z-index: 2; background: #f5f6f5; display: flex; align-items: center; justify-content: space-between; padding: 26px 4%; }
.oto-menu-home { color: #299cb4; font-size: 23px; font-weight: 800; letter-spacing: -.5px; text-decoration: none; }
.oto-menu-home span { font-size: 11px; letter-spacing: 2px; margin-left: 8px; }
.oto-menu-close { height: 54px; }
.oto-menu-close span { display: block; font: 300 42px/36px sans-serif; }
.oto-menu-body { width: min(1320px, 86%); margin: 12px auto 40px; }
.oto-menu-eyebrow { margin: 0 0 10px; color: #29869a; font-size: 11px; letter-spacing: .18em; font-weight: 700; }
.oto-menu h2 { margin: 0 0 40px; padding-bottom: 25px; border-bottom: 1px solid #d5dbdc; font-size: 28px; letter-spacing: .1em; font-weight: 700; }
.oto-menu-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 44px; }
.oto-menu h3 { margin: 0 0 18px; padding: 0 0 20px; border-bottom: 1px solid #81b4bd; color: #26869a; font-size: 20px; font-weight: 700; line-height: 1.6; }
.oto-menu h4 { background: #fff9; padding: 11px 16px; margin: 25px 0 12px; font-size: 15px; font-weight: 700; letter-spacing: .08em; }
.oto-menu ul { margin: 0; padding: 0; list-style: none; }
.oto-menu li a { display: block; position: relative; padding: 8px 10px 8px 22px; color: #434b4e; font-size: 15px; line-height: 1.7; text-decoration: none; transition: color .2s, background .2s, transform .2s; }
.oto-menu li a::before { content: '–'; position: absolute; left: 0; color: #93a2a5; }
.oto-menu li a:hover { color: #197e94; background: #fff; transform: translateX(3px); }
.oto-menu-contact { margin-top: 30px; padding-top: 24px; border-top: 1px solid #d5dbdc; }
.oto-menu-contact .oto-pill { width: 100%; justify-content: space-between; padding: 13px 24px; }
.oto-contact-number { display: block; padding: 18px 0 0; color: #30383b; font-size: 25px; font-weight: 700; text-decoration: none; letter-spacing: .05em; }
.oto-contact-number small { display: block; font-size: 12px; font-weight: 400; letter-spacing: 0; }
.oto-menu-bottom { display: flex; justify-content: space-between; gap: 18px; border-top: 1px solid #d5dbdc; margin-top: 40px; padding-top: 22px; font-size: 13px; color: #68767a; }
@media(min-width: 1001px) and (max-width: 1350px) { .oto-header { gap: 18px; padding: 14px 24px; } .oto-nav { gap: 15px; } .oto-nav a { font-size: 12px; } .oto-actions { gap: 8px; } .oto-pill { padding: 9px 16px; font-size: 12px; } .oto-brand img { width: 54px; height: 54px; } }
@media(max-width: 1000px) { .oto-nav { display: none; } .oto-actions { margin-left: auto; } .oto-menu-grid { gap: 25px; } .oto-menu-body { width: 90%; } .oto-menu h3 { font-size: 17px; } .oto-menu li a { font-size: 14px; } }
@media(max-width: 640px) {
 .oto-header { padding: 16px 20px; gap: 16px; align-items: center; }
 .oto-brand { margin: 0; } .oto-brand img { width: 50px; height: 50px; }
 .oto-actions { padding-top: 0; } .oto-actions .oto-phone { display: none; } .oto-pill { font-size: 12px; padding: 9px 18px; }
 .oto-menu-toggle { width: 34px; margin-top: 0; }
 .oto-hero { min-height: 540px; } .oto-hero-media { background-position: 52% center; } .oto-opening__background { object-position: 52% center; }
 .oto-copy-line { display: block; }
 .oto-hero-copy { left: 7%; right: 7%; bottom: 13%; } .oto-hero-copy h1 { max-width: 360px; font-size: clamp(30px, 8vw, 46px); line-height: 1.65; margin-bottom: 20px; } .oto-hero-copy p { font-size: 14px; line-height: 1.9; }
 .oto-scroll { right: 7%; } .oto-scroll i { height: 40px; } .oto-scroll span { font-size: 9px; }
 .oto-menu-top { padding: 18px 6%; } .oto-menu-home { font-size: 20px; } .oto-menu-body { width: 86%; margin-top: 20px; }
 .oto-menu h2 { font-size: 25px; margin-bottom: 28px; padding-bottom: 20px; }
 .oto-menu-grid { grid-template-columns: 1fr; gap: 36px; } .oto-menu h3 { font-size: 20px; } .oto-menu li a { font-size: 15px; padding-top: 11px; padding-bottom: 11px; }
 .oto-menu-bottom { flex-direction: column; font-size: 11px; gap: 6px; } .oto-inner { padding-top: 60px; }
}
/* A slim, fixed navigation bar after the hero and throughout inner pages. */
.oto-header.oto-header--fixed, .oto-inner .oto-header {
 position: fixed; height: 64px; padding-top: 8px; padding-bottom: 8px;
 background: #fff; border-bottom: 1px solid #e9edef;
 box-shadow: 0 3px 14px #20343b08; transition: none;
}
.oto-home.oto-ready .oto-header.oto-header--fixed { animation: oto-header-enter .55s cubic-bezier(.22,1,.36,1) both; }
.oto-header.oto-header--fixed .oto-brand img, .oto-inner .oto-header .oto-brand img { width: 44px; height: 44px; }
.oto-header.oto-header--fixed .oto-pill, .oto-inner .oto-header .oto-pill { min-height: 36px; padding-top: 7px; padding-bottom: 7px; }
.oto-header.oto-header--fixed .oto-menu-toggle, .oto-inner .oto-header .oto-menu-toggle { height: 40px; }
@keyframes oto-header-enter { from { transform: translateY(-100%); } to { transform: translateY(0); } }
@media(max-width: 640px) {
 .oto-header.oto-header--fixed, .oto-inner .oto-header { height: 60px; }
 .oto-header.oto-header--fixed .oto-brand img, .oto-inner .oto-header .oto-brand img { width: 40px; height: 40px; }
}
@media(prefers-reduced-motion: reduce) { .oto-header, .oto-home.oto-ready .oto-header.oto-header--fixed, .oto-header *, .oto-hero *, .oto-menu, .oto-menu * { transition: none !important; animation: none !important; scroll-behavior: auto !important; } }


/* Hide automatic dialog focus rings for touch/mouse input; retain keyboard focus. */
.oto-menu.oto-menu--pointer a:focus,
.oto-menu.oto-menu--pointer button:focus { outline: none; box-shadow: none; }

/* Hero branding: black calligraphy and group logo. */
.oto-header .oto-brand--soul { background: transparent; border-radius: 0; }
.oto-header .oto-brand--soul::after { content: none; }
.oto-header .oto-brand--soul img { width: 140px; height: auto; opacity: 1; }
.oto-header.oto-header--fixed .oto-brand--soul img { width: 100px; height: auto; }
.oto-hero-copy .oto-hero-logo { width: min(72vw, 1024px); max-width: 100%; margin-bottom: 32px; line-height: 1; }
.oto-hero-logo picture, .oto-hero-logo img { display: block; width: 100%; height: auto; }
.oto-hero-logo img { filter: brightness(0); }
@media (max-width: 640px) {
  .oto-header .oto-brand--soul img { width: 100px; height: auto; }
  .oto-header.oto-header--fixed .oto-brand--soul img { width: 88px; height: auto; }
  .oto-hero-copy .oto-hero-logo { width: 100%; max-width: 360px; margin-bottom: 24px; }
}

/* White loading stage; reveal the video only when playback actually begins. */
.oto-opening-pending .oto-hero-media::before,
.oto-opening-active .oto-hero-media::before {
  content: ''; position: absolute; inset: 0; z-index: 1;
  background: #fff; opacity: 1; pointer-events: none;
  transition: opacity .45s ease;
}
.oto-opening-active.oto-opening-video .oto-hero-media::before { opacity: 0; }

/* Keep the group mark transparent on both desktop and mobile. */
.oto-hero-copy .oto-hero-logo, .oto-hero-logo picture, .oto-hero-logo img { background: transparent; box-shadow: none; text-shadow: none; }

/* Match the logo color transition to the white cover fading into the video. */
.oto-opening-video .oto-opening__animation svg { filter: brightness(0) invert(1); }

/* Center the brand and caption in the bright sky on every screen. */
.oto-hero-copy { top: clamp(120px, 19svh, 190px); bottom: auto; left: 4%; right: 4%; text-align: center; text-shadow: none; }
.oto-hero-copy .oto-hero-logo { margin: 0 auto 32px; }
.oto-hero-copy p { color: #20282c; }

/* Retain the mobile spacing and logo size. */
@media (max-width: 640px) {
  .oto-hero-copy { top: calc(clamp(120px, 19svh, 190px) - 24px); bottom: auto; text-align: center; text-shadow: none; }
  .oto-hero-copy .oto-hero-logo { margin: 0 auto 24px; }
  .oto-hero-copy p { color: #20282c; }
}
