@charset "UTF-8";
/* =========================================================
   INNER VOID — Special Site
   ========================================================= */

/* =========================================================
   FONTS（サイト内に同梱。ライセンスは assets/fonts/OFL-*.txt）
   ※ IBM Plex Sans JP はサイト内で使う日本語の文字だけを収録した軽量版です。
     日本語の文言を追加・変更して文字が足りなくなった場合は、その文字だけ端末の標準フォントで表示されます。
   ========================================================= */
@font-face {
  font-family: "Chakra Petch"; font-style: normal; font-weight: 500; font-display: swap;
  src: url(../fonts/chakrapetch-500-latin.woff2) format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Chakra Petch"; font-style: normal; font-weight: 500; font-display: swap;
  src: url(../fonts/chakrapetch-500-latin-ext.woff2) format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Chakra Petch"; font-style: normal; font-weight: 700; font-display: swap;
  src: url(../fonts/chakrapetch-700-latin.woff2) format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Chakra Petch"; font-style: normal; font-weight: 700; font-display: swap;
  src: url(../fonts/chakrapetch-700-latin-ext.woff2) format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Share Tech Mono"; font-style: normal; font-weight: 400; font-display: swap;
  src: url(../fonts/sharetechmono-400-latin.woff2) format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "IBM Plex Sans JP"; font-style: normal; font-weight: 500; font-display: swap;
  src: url(../fonts/ibmplexsansjp-500-subset.woff2) format("woff2");
  unicode-range: U+203b, U+3002, U+304b-304c, U+3059-305a, U+3066-3067, U+306f-3071, U+3078-307a, U+3099-309a, U+30a8, U+30ad-30ae, U+30b1-30b2, U+30b7-30bc, U+30bf-30c0, U+30c3, U+30d5-30d7, U+30e5, U+30eb-30ec, U+30f3, U+30fc, U+4e8c, U+4eac, U+5834, U+5b9a, U+5c55, U+6587, U+66f2, U+672c, U+6771, U+6d41, U+6e90, U+793a, U+7b2c, U+901a, U+9650, U+97f3, U+ffe5;
}


:root {
  --bg: #000;
  --fg: #fff;
  --red: #e30037;
  --red-deep: #5c0018;
  --dim: rgba(255, 255, 255, .7);
  --faint: rgba(255, 255, 255, .45);
  --line: rgba(255, 255, 255, .14);
  --line-s: rgba(255, 255, 255, .3);
  --panel: rgba(4, 4, 6, .72);

  --f-jp: "IBM Plex Sans JP", "Hiragino Kaku Gothic ProN", "Hiragino Sans", "Noto Sans JP", "Yu Gothic", YuGothic, Meiryo, sans-serif;
  --f-disp: "Chakra Petch", var(--f-jp);
  --f-mono: "Share Tech Mono", ui-monospace, SFMono-Regular, Menlo, monospace;

  --gut: clamp(16px, 5vw, 56px);
  --max: 1080px;
  --hd: 60px;
  --band: 34px;
  --ease: cubic-bezier(.2, .7, .1, 1);
}

*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: var(--hd);
  background: var(--bg);
}

body {
  margin: 0;
  min-width: 320px;
  background: var(--bg);
  color: var(--fg);
  font-family: var(--f-jp);
  font-size: 16px;
  line-height: 1.75;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}
@supports (overflow: clip) { body { overflow-x: clip; } }

.is-loading body { overflow: hidden; }

img { display: block; max-width: 100%; height: auto; }
a { color: inherit; }
.nw { white-space: nowrap; }
/* 日本語の長体（横幅90%）。--n にその部分の文字数を入れ、縮めた分の余白を詰める */
.jp {
  display: inline-block;
  font-family: var(--f-jp);
  transform: scaleX(.9); transform-origin: 0 50%;
  margin-right: calc(var(--n, 1) * -.1em);
}
ul, ol, dl, dd, p, h1, h2, figure { margin: 0; padding: 0; }
ul, ol { list-style: none; }
button { font: inherit; color: inherit; }

:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }

.skip {
  position: absolute; left: 8px; top: -60px; z-index: 200;
  padding: 10px 16px; background: var(--fg); color: #000; text-decoration: none;
}
.skip:focus { top: 8px; }

.wrap {
  width: 100%;
  max-width: calc(var(--max) + var(--gut) * 2);
  margin-inline: auto;
  padding-inline: var(--gut);
}

/* =========================================================
   LOADER
   ========================================================= */
.loader { display: none; }
.js .loader {
  position: fixed; inset: 0; z-index: 150;
  display: grid; place-items: center;
  background: #000;
  /* JSが止まった時の保険 */
  animation: loaderFailsafe 0s linear 6s forwards;
}
.loader__inner {
  width: min(260px, 70vw);
  display: flex; flex-direction: column; align-items: center; gap: 16px;
}
.loader__emblem { width: 104px; height: 104px; margin-bottom: 8px; overflow: visible; }
.loader__ring, .loader__ring2, .loader__hex { transform-origin: 60px 60px; transform-box: view-box; }
.loader__ring  { animation: spin 3.2s linear infinite; }
.loader__ring2 { animation: spin 14s linear infinite reverse; }
.loader__hex   { animation: spin 8s linear infinite; }
.loader__core  { transform-origin: 60px 60px; transform-box: view-box; animation: pulse 1.4s ease-in-out infinite; }
.loader__meta {
  width: 100%; display: flex; justify-content: space-between;
  font: 12px/1 var(--f-mono); letter-spacing: .18em; color: var(--dim);
}
.loader__meta b { font-weight: 400; color: var(--fg); }
.loader__bar { position: relative; width: 100%; height: 2px; background: rgba(255, 255, 255, .14); }
.loader__bar::before, .loader__bar::after {
  content: ""; position: absolute; top: -4px; width: 1px; height: 10px; background: var(--line-s);
}
.loader__bar::before { left: 0; } .loader__bar::after { right: 0; }
.loader__bar i {
  position: absolute; inset: 0; background: var(--red);
  transform-origin: 0 50%; transform: scaleX(0);
  box-shadow: 0 0 10px rgba(227, 0, 55, .7);
}
.loader__code { font: 11px/1 var(--f-mono); letter-spacing: .3em; color: var(--faint); }

/* 終了時：上下から赤い扉が閉じ、回路状の継ぎ目で噛み合う → そのままKVの襖へ */
.loader.is-done { animation: loaderHide 0s linear .64s forwards; }
.loader.is-done .loader__inner { animation: fadeOut .25s ease forwards; }
.loader__doors { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.loader__half { fill: var(--red); }
.loader__half--t { transform: translateY(calc(-1 * var(--off))); animation: doorClose .52s cubic-bezier(.75, 0, .3, 1) .1s forwards; }
.loader__half--b { transform: translateY(var(--off)); animation: doorClose .52s cubic-bezier(.75, 0, .3, 1) .1s forwards; }
@keyframes doorClose { to { transform: translateY(0); } }
@keyframes loaderHide { to { visibility: hidden; } }

@keyframes spin { to { transform: rotate(360deg); } }
@keyframes pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(.55); opacity: .55; } }
@keyframes fadeOut { to { opacity: 0; transform: scale(.96); } }
@keyframes loaderFailsafe { to { visibility: hidden; opacity: 0; } }

/* =========================================================
   BACKGROUND
   ========================================================= */
.bg { position: fixed; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.bg__photo {
  position: absolute; inset: 0;
  background: url(../img/bg-blur.webp) center 20% / cover no-repeat;
  opacity: .22;
}
.bg__photo::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, .75) 60%, #000 100%);
}
.bg__hex {
  position: absolute; inset: 0; opacity: .07;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='41.57' height='72' viewBox='0 0 41.57 72'%3E%3Cpath d='M20.785 0 41.57 12v24L20.785 48 0 36V12ZM20.785 48v24' fill='none' stroke='%23fff' stroke-width='1'/%3E%3C/svg%3E");
  background-size: 41.57px 72px;
  -webkit-mask-image: radial-gradient(ellipse 80% 70% at 50% 50%, transparent 25%, #000 100%);
  mask-image: radial-gradient(ellipse 80% 70% at 50% 50%, transparent 25%, #000 100%);
}
.bg__fx { position: absolute; inset: 0; width: 100%; height: 100%; }
/* うっすら走査線 */
.bg::after {
  content: ""; position: absolute; inset: 0;
  background: repeating-linear-gradient(180deg, rgba(255, 255, 255, .025) 0 1px, transparent 1px 3px);
}

main, .hd, .ft { position: relative; z-index: 1; }

/* side rails (PC) */
.rail { display: none; }
@media (min-width: 1200px) {
  .rail {
    display: flex; position: fixed; top: 0; bottom: 0; z-index: 2; width: 40px;
    align-items: center; justify-content: center; pointer-events: none;
    opacity: 0; transition: opacity .8s ease 2.6s;
  }
  .is-ready .rail { opacity: 1; }
  .rail--l { left: 0; }
  .rail--l span {
    writing-mode: vertical-rl; transform: rotate(180deg);
    font: 11px/1 var(--f-mono); letter-spacing: .4em; color: var(--faint);
  }
  .rail--r { right: 0; }
  .rail__bar { position: relative; width: 1px; height: 38vh; background: var(--line); }
  .rail__bar i {
    position: absolute; inset: 0; background: var(--red);
    transform-origin: 50% 0; transform: scaleY(0);
  }
  .rail__bar::after {
    content: ""; position: absolute; left: -3px; bottom: -10px; width: 7px; height: 7px;
    border: 1px solid var(--line-s); border-radius: 50%;
  }
}

/* =========================================================
   HEADER
   ========================================================= */
.hd {
  position: fixed; top: 0; left: 0; right: 0; z-index: 50;
  height: var(--hd);
  display: flex; align-items: center; justify-content: space-between;
  padding-inline: var(--gut);
  padding-right: calc(var(--gut) + var(--band) + 4px);
  transition: background-color .4s ease, border-color .4s ease, transform .6s var(--ease), padding .4s var(--ease);
  border-bottom: 1px solid transparent;
}
.js .hd { transform: translateY(-100%); }
.js.is-ready .hd { transform: none; transition-delay: 0s, 0s, 2.3s, 0s; }
.hd.is-scrolled { background: rgba(0, 0, 0, .92); border-bottom-color: var(--line); padding-right: var(--gut); }

.hd__logo { display: block; width: 92px; padding: 12px 0; position: relative; z-index: 2; }

.hd__menu {
  position: relative; z-index: 2;
  width: 48px; height: 48px; margin-right: -12px;
  background: none; border: 0; cursor: pointer;
}
.hd__menu span {
  position: absolute; left: 12px; right: 12px; height: 1.5px; background: var(--fg);
  transition: transform .4s var(--ease), top .4s var(--ease), width .4s var(--ease);
}
.hd__menu span:nth-child(1) { top: 19px; }
.hd__menu span:nth-child(2) { top: 28px; right: 20px; background: var(--red); }
.menu-open .hd__menu span:nth-child(1) { top: 23.5px; transform: rotate(45deg); }
.menu-open .hd__menu span:nth-child(2) { top: 23.5px; right: 12px; transform: rotate(-45deg); background: var(--fg); }

/* mobile nav (overlay) */
.hd__nav {
  position: fixed; inset: 0; z-index: 1;
  display: flex; flex-direction: column; justify-content: center;
  padding: calc(var(--hd) + 16px) var(--gut) 32px;
  background: rgba(0, 0, 0, .94);
  visibility: hidden; opacity: 0;
  transition: opacity .35s ease, visibility 0s linear .35s;
}
.menu-open .hd__nav { visibility: visible; opacity: 1; transition: opacity .35s ease; }
.menu-open body { overflow: hidden; }
.hd__nav ul { display: flex; flex-direction: column; }
.hd__nav li { border-bottom: 1px solid var(--line); }
.hd__nav a {
  display: flex; align-items: baseline; gap: 16px;
  min-height: 60px; padding: 12px 0;
  font: 700 clamp(26px, 8vw, 40px)/1.2 var(--f-disp); letter-spacing: .06em;
  text-decoration: none;
  transform: translateX(-12px); opacity: 0;
  transition: transform .5s var(--ease), opacity .5s ease, color .2s;
}
.menu-open .hd__nav a { transform: none; opacity: 1; }
.menu-open .hd__nav li:nth-child(2) a { transition-delay: .04s; }
.menu-open .hd__nav li:nth-child(3) a { transition-delay: .08s; }
.menu-open .hd__nav li:nth-child(4) a { transition-delay: .12s; }
.menu-open .hd__nav li:nth-child(5) a { transition-delay: .16s; }
.hd__nav small { font: 13px/1 var(--f-mono); color: var(--red); letter-spacing: .1em; }
.hd__nav a:hover { color: var(--red); }
.hd__navfoot { margin-top: 32px; font: 11px/1 var(--f-mono); letter-spacing: .3em; color: var(--faint); }

@media (min-width: 1024px) {
  .hd__logo { width: 104px; }
  .hd__menu { display: none; }
  .hd__nav {
    position: static; inset: auto; padding: 0; background: none;
    visibility: visible; opacity: 1; transition: none;
  }
  .hd__nav ul { flex-direction: row; gap: 4px; }
  .hd__nav li { border: 0; }
  .hd__nav a {
    position: relative; gap: 6px; min-height: 44px; padding: 12px 12px; align-items: center;
    font: 500 13px/1 var(--f-disp); letter-spacing: .16em;
    transform: none; opacity: 1;
  }
  .hd__nav small { font-size: 10px; }
  .hd__nav a::after {
    content: ""; position: absolute; left: 12px; right: 12px; bottom: 6px; height: 1px;
    background: var(--red); transform: scaleX(0); transform-origin: 0 50%;
    transition: transform .35s var(--ease);
  }
  .hd__nav a:hover { color: var(--fg); }
  .hd__nav a:hover::after { transform: scaleX(1); }
  .hd__navfoot { display: none; }
}

/* =========================================================
   KV
   ========================================================= */
.kv {
  position: relative;
  height: 100vh; height: 100svh;
  min-height: 560px; max-height: 1400px;
  overflow: hidden;
  background: #000;
}
.kv__img { position: absolute; inset: 0; will-change: transform; }
.kv__img picture, .kv__img img { display: block; width: 100%; height: 100%; }
.kv__img img { object-fit: cover; object-position: 50% 30%; }
.js .kv__img img { opacity: 0; transform: scale(1.08); transition: opacity 1.4s ease, transform 2.4s var(--ease); }
.js.is-ready .kv__img img { opacity: 1; transform: scale(1); }

/* 赤い粒子：イラストの範囲だけ。下部は黒フェードと一緒に消えるようマスク */
.kv__snow {
  position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none;
  opacity: 0; transition: opacity 1.6s ease;
  -webkit-mask-image: linear-gradient(180deg, #000 0%, #000 45%, transparent 78%);
  mask-image: linear-gradient(180deg, #000 0%, #000 45%, transparent 78%);
}
.js.is-ready .kv__snow { opacity: 1; transition-delay: 2.12s; }

/* 背景のみ → イラストへのグリッチ切り替え（扉が右へ開いている途中）
   約30msごとにコマが切り替わる：背景 → 背景モザイク → 粗いイラスト → 細かいイラスト → イラスト
   ※ keyframes は 16コマのコマ表から生成（各コマ 6.25%） */
.kv__bgonly, .kv__glitch, .kv__pix, .kv__noise { display: none; }
.js .kv__bgonly { display: block; position: absolute; inset: 0; }
.js .kv__pix {
  display: block; position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; object-position: 50% 30%;
  image-rendering: pixelated; opacity: 0; pointer-events: none;
}
/* イラスト用のフェード指定（.kv__img img）を打ち消す */
.js .kv__img .kv__pix, .js.is-ready .kv__img .kv__pix { opacity: 0; transition: none; }
.js .kv__noise {
  display: block; position: absolute; inset: -200px; pointer-events: none; opacity: 0;
  background-size: 384px 384px; image-rendering: pixelated;
}
.js .kv__glitch {
  display: block; position: absolute; left: 0; right: 0; top: -10%; height: 120%;
  pointer-events: none; opacity: 0;
  background: repeating-linear-gradient(180deg,
    transparent 0 46px, rgba(227, 0, 55, .5) 46px 48px, transparent 48px 121px,
    rgba(255, 255, 255, .3) 121px 122px, transparent 122px 190px);
}
.js.is-ready .kv__bgonly    { animation: swapGlitch .48s steps(1) 1.66s both; }
.js.is-ready .kv__pix--bg32 { animation: pixBg32 .48s steps(1) 1.66s both; }
.js.is-ready .kv__pix--il32 { animation: pixIl32 .48s steps(1) 1.66s both; }
.js.is-ready .kv__pix--il96 { animation: pixIl96 .48s steps(1) 1.66s both; }
.js.is-ready .kv__noise     { animation: noiseFlash .48s steps(1) 1.66s both; }
.js.is-ready .kv__glitch    { animation: glitchBars .48s steps(1) 1.66s both; }
.js.is-ready .kv__main      { animation: charJitter .48s steps(1) 1.66s; }
@keyframes swapGlitch {
  0.00% { opacity: 1; clip-path: inset(0 0 0 0); transform: none; }
  6.25% { opacity: 1; clip-path: inset(0% 0 60% 0); transform: translateX(-6px); }
  12.50% { opacity: 1; clip-path: inset(0 0 0 0); transform: none; }
  18.75% { opacity: 1; clip-path: inset(30% 0 0% 0); transform: translateX(5px); }
  25.00% { opacity: 1; clip-path: inset(0 0 0 0); transform: none; }
  31.25% { opacity: 1; clip-path: inset(0 0 0 0); transform: none; }
  37.50% { opacity: 1; clip-path: inset(55% 0 10% 0); transform: translateX(-8px); }
  43.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  50.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  56.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  62.50% { opacity: 1; clip-path: inset(0% 0 0% 0); transform: translateX(6px); }
  68.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  75.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  81.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  87.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  93.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  100% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; visibility: hidden; }
}
@keyframes pixBg32 {
  0.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  6.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  12.50% { opacity: 1; clip-path: inset(0 0 0 0); transform: none; }
  18.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  25.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  31.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  37.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  43.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  50.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  56.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  62.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  68.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  75.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  81.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  87.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  93.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  100% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
}
@keyframes pixIl32 {
  0.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  6.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  12.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  18.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  25.00% { opacity: 1; clip-path: inset(20% 0 35% 0); transform: translateX(0px); }
  31.25% { opacity: 1; clip-path: inset(0 0 0 0); transform: none; }
  37.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  43.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  50.00% { opacity: 1; clip-path: inset(0% 0 50% 0); transform: translateX(3px); }
  56.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  62.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  68.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  75.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  81.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  87.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  93.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  100% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
}
@keyframes pixIl96 {
  0.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  6.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  12.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  18.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  25.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  31.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  37.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  43.75% { opacity: 1; clip-path: inset(0 0 0 0); transform: none; }
  50.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  56.25% { opacity: 1; clip-path: inset(40% 0 20% 0); transform: translateX(-4px); }
  62.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  68.75% { opacity: 1; clip-path: inset(0 0 0 0); transform: none; }
  75.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  81.25% { opacity: 1; clip-path: inset(60% 0 0% 0); transform: translateX(0px); }
  87.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  93.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  100% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
}
@keyframes noiseFlash {
  0.00% { opacity: 1; clip-path: inset(0 0 0 0); transform: translate(0px, 0px); }
  6.25% { opacity: 1; clip-path: inset(0 0 0 0); transform: translate(-96px, 40px); }
  12.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  18.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  25.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  31.25% { opacity: 1; clip-path: inset(0 0 0 0); transform: translate(64px, -120px); }
  37.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  43.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  50.00% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  56.25% { opacity: 0.85; clip-path: inset(0 0 0 0); transform: translate(-160px, -24px); }
  62.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  68.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  75.00% { opacity: 1; clip-path: inset(35% 0 40% 0); transform: translate(32px, 88px); }
  81.25% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  87.50% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  93.75% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
  100% { opacity: 0; clip-path: inset(0 0 0 0); transform: none; }
}
@keyframes glitchBars {
  0.00% { opacity: .8; transform: translateY(0); }
  6.25% { opacity: 0; transform: none; }
  12.50% { opacity: 0; transform: none; }
  18.75% { opacity: .45; transform: translateY(37px); }
  25.00% { opacity: 0; transform: none; }
  31.25% { opacity: 0; transform: none; }
  37.50% { opacity: 0; transform: none; }
  43.75% { opacity: 0; transform: none; }
  50.00% { opacity: 0; transform: none; }
  56.25% { opacity: 0; transform: none; }
  62.50% { opacity: 0; transform: none; }
  68.75% { opacity: 0; transform: none; }
  75.00% { opacity: 0; transform: none; }
  81.25% { opacity: 0; transform: none; }
  87.50% { opacity: .6; transform: translateY(-20px); }
  93.75% { opacity: 0; transform: none; }
  100% { opacity: 0; transform: none; }
}
@keyframes charJitter {
  0.00% { transform: none; }
  6.25% { transform: translateX(4px); }
  12.50% { transform: none; }
  18.75% { transform: translateX(-3px); }
  25.00% { transform: none; }
  31.25% { transform: none; }
  37.50% { transform: translateX(5px); }
  43.75% { transform: none; }
  50.00% { transform: none; }
  56.25% { transform: none; }
  62.50% { transform: translateX(-4px); }
  68.75% { transform: none; }
  75.00% { transform: translateX(-3px); }
  81.25% { transform: none; }
  87.50% { transform: none; }
  93.75% { transform: none; }
  100% { transform: none; }
}


.kv__shade {
  position: absolute; inset: 0; pointer-events: none;
  background:
    linear-gradient(180deg, rgba(0, 0, 0, .55) 0%, rgba(0, 0, 0, 0) 18%),
    linear-gradient(0deg, #000 0%, rgba(0, 0, 0, .86) 20%, rgba(0, 0, 0, 0) 52%);
}

/* corner brackets */
.kv__frame { position: absolute; inset: calc(var(--hd) + 8px) var(--gut) 20px; pointer-events: none; }
.kv__frame i { position: absolute; width: 18px; height: 18px; border: 0 solid var(--line-s); }
.kv__frame i:nth-child(1) { top: 0; left: 0; border-top-width: 1px; border-left-width: 1px; }
.kv__frame i:nth-child(2) { top: 0; right: 0; border-top-width: 1px; border-right-width: 1px; }
.kv__frame i:nth-child(3) { bottom: 0; left: 0; border-bottom-width: 1px; border-left-width: 1px; }
.kv__frame i:nth-child(4) { bottom: 0; right: 0; border-bottom-width: 1px; border-right-width: 1px; }

/* red band (jacket motif) */
.kv__band {
  position: absolute; top: 0; right: 0; width: var(--band); height: 58%;
  background: var(--red);
  display: flex; flex-direction: column; align-items: center; gap: 14px;
  padding-top: calc(var(--hd) + 10px);
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - var(--band)));
}
/* 帯は襖が閉まりきった瞬間に入れ替わりで表示し、中の文字がふわっと出る */
.js .kv__band { visibility: hidden; }
.js.is-ready .kv__band { animation: bandShow 0s linear 2.78s forwards; }
.js .kv__stripes, .js .kv__vtext { opacity: 0; transform: translateY(-8px); transition: opacity .6s ease, transform .8s var(--ease); }
.js.is-ready .kv__stripes, .js.is-ready .kv__vtext { opacity: 1; transform: none; transition-delay: 2.85s; }
.js.is-ready .kv__vtext { transition-delay: 2.95s; }
@keyframes bandShow { to { visibility: visible; } }

/* ロード明けの「襖」：画面いっぱいの赤が左→右へスライドして開き、右上の帯に収まる */
.kv__door { display: none; }
.js .kv__door {
  display: block; position: absolute; inset: 0; pointer-events: none;
  background: var(--red);
  clip-path: polygon(0 0, 100% 0, 100% 100%, var(--band) 100%, 0 100%);
}
.kv__seam { position: absolute; inset: 0; width: 100%; height: 100%; }
.kv__seam-path { fill: none; stroke: rgba(0, 0, 0, .45); stroke-width: 1.5; }
.js.is-ready .kv__seam-path { animation: seamFlash .4s ease-out .62s both; }
/* 解錠：継ぎ目に沿って電流が左→右へ走る */
.kv__signal {
  fill: none; stroke: #fff; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: miter;
  stroke-dasharray: 180 calc(var(--len) * 1px);
  stroke-dashoffset: 180;
  opacity: 0;
}
.kv__signal--glow { stroke-width: 9; stroke-opacity: .25; }
.js.is-ready .kv__signal { animation: signalRun .55s cubic-bezier(.5, 0, .3, 1) .66s forwards; }
.js.is-ready .kv__seam { animation: seamOut .5s ease 1.5s forwards; }
@keyframes seamFlash {
  0% { stroke: #fff; stroke-width: 3; }
  100% { stroke: rgba(0, 0, 0, .45); stroke-width: 1.5; }
}
@keyframes signalRun {
  0% { opacity: 1; stroke-dashoffset: 180; }
  90% { opacity: 1; }
  100% { opacity: 0; stroke-dashoffset: calc(var(--len) * -1px); }
}
@keyframes seamOut { to { opacity: 0; } }

/* 閉じた扉に浮かぶ黒ロゴ（CD裏面のトレイのモチーフ） */
.kv__doormark {
  position: absolute; left: 50%; top: calc(var(--seam-y, 50%) - var(--amp, 20px) - 22px);
  width: min(72vw, 560px); transform: translate(-50%, -100%);
  display: flex; flex-direction: column; align-items: center; gap: 12px;
}
.kv__doormark img { width: 100%; opacity: 0; }
.kv__doormark p {
  position: absolute; top: calc(100% + var(--amp, 20px) * 2 + 44px);
  font: 12px/1 var(--f-mono); letter-spacing: .3em; color: #000; white-space: nowrap; opacity: 0;
}
.js.is-ready .kv__doormark img { animation: glitchIn .6s steps(1) .7s forwards; }
.js.is-ready .kv__doormark p { animation: markText .3s steps(3) 1s forwards; }
@keyframes markText { to { opacity: .8; } }
.kv__door::after {   /* 襖の引き手側に走る細い線 */
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 1px; background: rgba(0, 0, 0, .35);
}
.js.is-ready .kv__door {
  animation:
    doorOpen 1.05s cubic-bezier(.76, 0, .18, 1) 1.3s forwards,
    doorTrim .45s var(--ease) 2.35s forwards;
}
@keyframes doorOpen { to { transform: translateX(calc(100% - var(--band))); } }
@keyframes doorTrim {
  99% { clip-path: polygon(0 0, 100% 0, 100% 58%, var(--band) 58%, 0 calc(58% - var(--band))); visibility: visible; }
  100% { clip-path: polygon(0 0, 100% 0, 100% 58%, var(--band) 58%, 0 calc(58% - var(--band))); visibility: hidden; }
}
.kv__stripes {
  width: 12px; height: 46px;
  background: repeating-linear-gradient(180deg, #000 0 3px, transparent 3px 7px);
}
.kv__vtext {
  writing-mode: vertical-rl;
  font: 12px/1 var(--f-mono); letter-spacing: .32em; color: #000; white-space: nowrap;
}

.kv__body {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 0 calc(var(--gut) + 8px) clamp(72px, 12vh, 120px);
}
.kv__title { position: relative; width: min(100%, 860px); }
.kv__title img { position: relative; width: 100%; }
.kv__echo {
  position: absolute; inset: 0;
  transform: translate(clamp(4px, .9vw, 10px), clamp(-10px, -.9vw, -4px));
  background: var(--red);
  -webkit-mask: url(../img/logo-line.png) center / 100% 100% no-repeat;
  mask: url(../img/logo-line.png) center / 100% 100% no-repeat;
}
.js .kv__title img, .js .kv__echo { opacity: 0; }
.js.is-ready .kv__title img { animation: glitchIn .9s steps(1) 1.85s forwards; }
.js.is-ready .kv__echo { animation: echoIn 1.1s var(--ease) 2.25s forwards; }
@keyframes glitchIn {
  0%   { opacity: 1; clip-path: inset(0 0 72% 0); transform: translateX(-8px); }
  12%  { clip-path: inset(40% 0 30% 0); transform: translateX(10px); }
  24%  { clip-path: inset(10% 0 55% 0); transform: translateX(-4px); }
  36%  { clip-path: inset(62% 0 0 0); transform: translateX(6px); }
  48%  { clip-path: inset(0 0 0 0); transform: translateX(-2px); opacity: .6; }
  60%  { opacity: 1; transform: none; }
  100% { opacity: 1; clip-path: inset(0 0 0 0); transform: none; }
}
@keyframes echoIn {
  from { opacity: 0; transform: translate(0, 0); }
  to { opacity: 1; }
}

.kv__meta {
  display: flex; flex-wrap: wrap; gap: 10px 28px;
  margin-top: clamp(20px, 3vh, 32px);
  font: 500 14px/1.5 var(--f-disp); letter-spacing: .06em;
}
.kv__meta li { display: flex; flex-direction: column; gap: 2px; }
.kv__meta small { font: 10px/1.4 var(--f-mono); letter-spacing: .24em; color: var(--red); }
.js .kv__meta li { opacity: 0; transform: translateY(10px); transition: opacity .7s ease, transform .9s var(--ease); }
.js.is-ready .kv__meta li { opacity: 1; transform: none; }
.js.is-ready .kv__meta li:nth-child(1) { transition-delay: 2.25s; }
.js.is-ready .kv__meta li:nth-child(2) { transition-delay: 2.35s; }
.js.is-ready .kv__meta li:nth-child(3) { transition-delay: 2.45s; }

.kv__scroll {
  position: absolute; right: calc(var(--gut) + 4px); bottom: 28px;
  display: flex; flex-direction: column; align-items: center; gap: 10px;
  min-width: 44px; padding-top: 8px;
  font: 10px/1 var(--f-mono); letter-spacing: .3em; text-decoration: none; color: var(--dim);
}
.kv__scroll span { writing-mode: vertical-rl; }
.kv__scroll i { position: relative; width: 1px; height: 44px; background: var(--line); overflow: hidden; }
.kv__scroll i::after {
  content: ""; position: absolute; left: 0; top: 0; width: 1px; height: 100%;
  background: var(--fg); animation: scrollLine 2.2s var(--ease) infinite;
}
@keyframes scrollLine { 0% { transform: translateY(-100%); } 60%, 100% { transform: translateY(100%); } }

@media (min-width: 768px) {
:root { --band: 46px; }
  .kv__vtext { font-size: 13px; }
  .kv__meta { font-size: 15px; gap: 12px 40px; }
}
/* 横向きスマホなど背の低い画面 */
@media (max-height: 500px) and (orientation: landscape) {
  .kv { min-height: 420px; }
  .kv__body { padding-bottom: 32px; }
  .kv__title { width: min(70%, 560px); }
  .kv__scroll { display: none; }
}

/* ticker */
.ticker {
  position: relative; overflow: hidden;
  background: var(--red); color: #000;
  font: 700 13px/1 var(--f-disp); letter-spacing: .2em; white-space: nowrap;
  padding: 9px 0;
}
.ticker__track { display: flex; width: max-content; animation: ticker 36s linear infinite; }
.ticker__track span, .ticker__track i { padding-right: 22px; font-style: normal; }
.ticker__track i { opacity: .55; }
@keyframes ticker { to { transform: translateX(-50%); } }

/* =========================================================
   SECTIONS
   ========================================================= */
.sec { position: relative; padding-block: clamp(88px, 14vw, 160px) 0; }
.sec--last { padding-bottom: clamp(88px, 14vw, 160px); }

.sec-head { margin-bottom: clamp(28px, 5vw, 48px); }
.sec-head__idx {
  display: flex; align-items: center; gap: 12px;
  font: 12px/1 var(--f-mono); letter-spacing: .24em; color: var(--dim);
  margin-bottom: 14px;
}
.sec-head__idx span:first-child { color: var(--red); }
.sec-head__idx i { position: relative; flex: 0 1 120px; height: 1px; background: var(--line-s); }
.sec-head__idx i::after {
  content: ""; position: absolute; right: -4px; top: -3px; width: 7px; height: 7px;
  border: 1px solid var(--fg); border-radius: 50%;
}
.sec-head__title {
  font: 700 clamp(30px, 6.4vw, 58px)/1 var(--f-disp);
  letter-spacing: .04em;
}

/* glitch heading (一度だけ+ホバー時) */
.glitch { position: relative; display: inline-block; }
.glitch::before, .glitch::after {
  content: attr(data-text);
  position: absolute; inset: 0; opacity: 0; pointer-events: none;
}
.glitch::before { color: var(--red); }
.glitch::after { color: rgba(255, 255, 255, .7); }
.is-in .glitch::before, .glitch:hover::before { animation: glitchA .55s steps(1) .15s 1; }
.is-in .glitch::after, .glitch:hover::after { animation: glitchB .55s steps(1) .15s 1; }
@keyframes glitchA {
  0%   { opacity: 1; clip-path: inset(10% 0 60% 0); transform: translate(-4px, 0); }
  25%  { clip-path: inset(55% 0 20% 0); transform: translate(5px, 0); }
  50%  { clip-path: inset(30% 0 45% 0); transform: translate(-2px, 0); }
  75%  { clip-path: inset(75% 0 5% 0); transform: translate(3px, 0); }
  100% { opacity: 0; }
}
@keyframes glitchB {
  0%   { opacity: 1; clip-path: inset(65% 0 10% 0); transform: translate(4px, 0); }
  25%  { clip-path: inset(5% 0 70% 0); transform: translate(-5px, 0); }
  50%  { clip-path: inset(40% 0 35% 0); transform: translate(3px, 0); }
  75%  { clip-path: inset(15% 0 60% 0); transform: translate(-2px, 0); }
  100% { opacity: 0; }
}

/* reveal */
.js .rv { opacity: 0; transform: translateY(24px); transition: opacity .8s ease, transform 1s var(--ease); transition-delay: var(--d, 0s); }
.js .rv.is-in { opacity: 1; transform: none; }

/* =========================================================
   01 RELEASE
   ========================================================= */
.release { display: grid; gap: 48px; }

.jacket { position: relative; margin: 14px auto; width: calc(100% - 28px); max-width: 540px; }
.jacket__btn {
  display: block; width: 100%; padding: 0; border: 0; background: none;
  cursor: zoom-in; perspective: 1000px;
  -webkit-tap-highlight-color: transparent;
}
/* カーソル追従の傾き（--rx / --ry: -0.5〜0.5、--h: ホバー量 0〜1 をJSで補間） */
.jacket__tilt {
  display: block;
  transform:
    rotateX(calc(var(--ry, 0) * -12deg))
    rotateY(calc(var(--rx, 0) * 12deg))
    scale(calc(1 + var(--h, 0) * .02));
}
.jacket__img {
  position: relative; display: block; background: #111; overflow: hidden;
  box-shadow:
    calc(var(--rx, 0) * -36px) calc(30px + var(--ry, 0) * -36px) 80px -20px rgba(227, 0, 55, .3),
    0 0 0 1px var(--line);
}
.jacket__img img { width: 100%; }
.jacket__glare {
  position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(circle at calc(50% + var(--rx, 0) * 120%) calc(50% + var(--ry, 0) * 120%), rgba(255, 255, 255, .2), rgba(255, 255, 255, 0) 55%);
  opacity: var(--h, 0);
}
.jacket figcaption {
  position: absolute; left: 0; right: 0; top: 100%; margin-top: 16px;
  display: flex; justify-content: space-between; gap: 12px;
  font: 11px/1 var(--f-mono); letter-spacing: .3em; color: var(--faint);
}
.jacket__hint { display: inline-flex; align-items: center; gap: 8px; letter-spacing: .2em; }
.jacket__hint i {
  position: relative; width: 11px; height: 11px; border: 1px solid var(--red); border-radius: 50%;
}
.jacket__hint i::after {
  content: ""; position: absolute; right: -4px; bottom: -3px; width: 5px; height: 1px;
  background: var(--red); transform: rotate(45deg);
}
.jacket__hint-sp { display: none; }
@media (hover: none) {
  .jacket__hint-pc { display: none; }
  .jacket__hint-sp { display: inline; }
}
/* トンボ（印刷データのモチーフ） */
.crop { position: absolute; width: 14px; height: 14px; pointer-events: none; }
.crop::before, .crop::after { content: ""; position: absolute; background: var(--line-s); }
.crop::before { width: 14px; height: 1px; }
.crop::after { width: 1px; height: 14px; }
.crop--tl { left: -14px; top: -14px; }  .crop--tl::before { bottom: 0; left: -6px; } .crop--tl::after { right: 0; top: -6px; }
.crop--tr { right: -14px; top: -14px; } .crop--tr::before { bottom: 0; right: -6px; } .crop--tr::after { left: 0; top: -6px; }
.crop--bl { left: -14px; bottom: -14px; } .crop--bl::before { top: 0; left: -6px; } .crop--bl::after { right: 0; bottom: -6px; }
.crop--br { right: -14px; bottom: -14px; } .crop--br::before { top: 0; right: -6px; } .crop--br::after { left: 0; bottom: -6px; }

.spec { border-top: 1px solid var(--line-s); }
.spec__row {
  display: grid; grid-template-columns: 78px 1fr; gap: 12px;
  padding: 18px 0; border-bottom: 1px solid var(--line);
}
.spec dt {
  padding-top: .35em;
  font: 12px/1.4 var(--f-mono); letter-spacing: .14em; color: var(--faint);
}
.spec dt::before { content: "–"; margin-right: .3em; color: var(--red); }
.spec dd { font-family: var(--f-disp); font-weight: 500; font-size: 15px; line-height: 1.7; overflow-wrap: anywhere; }
.spec .num { font-family: var(--f-disp); font-weight: 500; letter-spacing: .04em; }
.spec__title { font: 700 22px/1.3 var(--f-disp); letter-spacing: .08em; }

/* Xシェアボタン */
.share { margin-top: 24px; }
.share__btn {
  position: relative; isolation: isolate; overflow: hidden;
  display: inline-flex; align-items: center; gap: 12px;
  min-height: 48px; padding: 0 18px;
  border: 1px solid var(--line-s); background: rgba(0, 0, 0, .5);
  font: 12px/1 var(--f-mono); letter-spacing: .24em; text-decoration: none;
  transition: border-color .3s;
}
.share__btn::before {
  content: ""; position: absolute; inset: 0; z-index: -1; background: var(--red);
  transform: scaleX(0); transform-origin: 0 50%; transition: transform .4s var(--ease);
}
.share__btn:hover { border-color: var(--red); }
.share__btn:hover::before { transform: scaleX(1); }
.share__btn svg { width: 16px; height: 16px; }
.share__btn i { font-style: normal; color: var(--faint); transition: color .3s, transform .3s var(--ease); }
.share__btn:hover i { color: var(--fg); transform: translate(2px, -2px); }

@media (min-width: 900px) {
  .release { grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: 72px; align-items: center; }
  .jacket { margin: 0; width: auto; max-width: none; }
  .spec__row { grid-template-columns: 120px 1fr; padding: 20px 0; }
  .spec dd { font-size: 16px; }
  .spec__title { font-size: 26px; }
}

/* ---------- LIGHTBOX ---------- */
.lb {
  position: fixed; inset: 0; width: 100%; height: 100%; max-width: none; max-height: none;
  margin: 0; padding: 0; border: 0; background: rgba(0, 0, 0, .94); color: var(--fg);
  overflow: hidden;
}
.lb:not([open]) { display: none; }
.lb::backdrop { background: transparent; }
.lb__inner {
  position: relative; width: 100%; height: 100%;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px;
  padding: 64px var(--gut) 32px;
}
.lb__img {
  width: min(100%, calc(100svh - 150px), 1000px);
  height: auto; aspect-ratio: 1;
  background: #111;
  box-shadow: 0 0 0 1px var(--line-s), 0 40px 120px -30px rgba(227, 0, 55, .45);
  cursor: default;
}
@supports not (height: 100svh) { .lb__img { width: min(100%, calc(100vh - 150px), 1000px); } }
.lb__cap { font: 11px/1 var(--f-mono); letter-spacing: .3em; color: var(--faint); }
.lb__close {
  position: absolute; top: 10px; right: calc(var(--gut) - 12px);
  width: 48px; height: 48px; border: 0; background: none; cursor: pointer;
}
.lb__close span {
  position: absolute; left: 12px; right: 12px; top: 23.5px; height: 1.5px; background: var(--fg);
  transform: rotate(45deg); transition: background .2s;
}
.lb__close span + span { transform: rotate(-45deg); }
.lb__close:hover span { background: var(--red); }
.lb[open] { animation: lbFade .3s ease both; }
.lb[open] .lb__img { animation: lbZoom .5s var(--ease) both; }
.lb.is-closing { animation: lbFadeOut .26s ease both; }
.lb.is-closing .lb__img { animation: lbZoomOut .26s ease both; }
@keyframes lbFade { from { opacity: 0; } }
@keyframes lbFadeOut { to { opacity: 0; } }
@keyframes lbZoom { from { opacity: 0; transform: scale(.94); clip-path: inset(0 0 100% 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes lbZoomOut { to { opacity: 0; transform: scale(.97); } }
.lb-open body { overflow: hidden; }

/* =========================================================
   02 TRACKLIST
   ========================================================= */
/* 面取りパネル（CD裏面のフレームモチーフ） */
.panel {
  --cut: 22px;
  position: relative; padding: 1px;
  background: linear-gradient(135deg, var(--line-s) 0, var(--line) 50%, var(--line-s) 100%);
  clip-path: polygon(var(--cut) 0, 100% 0, 100% calc(100% - var(--cut)), calc(100% - var(--cut)) 100%, 0 100%, 0 var(--cut));
}
.panel__in {
  background: var(--panel);
  clip-path: polygon(var(--cut) 0, 100% 0, 100% calc(100% - var(--cut)), calc(100% - var(--cut)) 100%, 0 100%, 0 var(--cut));
  padding: clamp(12px, 3vw, 32px) clamp(16px, 4vw, 48px);
}

.track {
  position: relative;
  display: grid; grid-template-columns: 2.6em 1fr; gap: 4px 12px; align-items: baseline;
  padding: 18px 0;
  border-bottom: 1px solid var(--line);
}
.track:last-child { border-bottom: 0; }
.track::before {
  content: ""; position: absolute; left: 0; bottom: -1px; width: 100%; height: 1px;
  background: var(--red); transform: scaleX(0); transform-origin: 0 50%;
  transition: transform .5s var(--ease);
}
.track:hover::before { transform: scaleX(1); }
.track__no { font: 15px/1 var(--f-mono); color: var(--red); letter-spacing: .06em; }
.track__main { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: .5em; min-width: 0; }
.track__artist {
  order: -1; flex-basis: 100%;
  font: 12px/1.6 var(--f-mono); letter-spacing: .12em; color: var(--faint);
}
.track__sep { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.track__title {
  font: 700 clamp(18px, 4.6vw, 26px)/1.3 var(--f-disp);
  letter-spacing: .03em; overflow-wrap: anywhere;
  transition: transform .4s var(--ease);
}
.track:hover .track__title { transform: translateX(6px); }
.track__note {
  flex-basis: 100%;
  display: flex; align-items: center; gap: 8px;
  margin-top: 6px;
  font: 500 11px/1.5 var(--f-disp); letter-spacing: .04em; color: var(--dim);
}
/* 「───●」リーダー線 */
.track__note::before {
  content: ""; flex: 0 0 34px; height: 7px;
  background:
    radial-gradient(circle at calc(100% - 3.5px) 50%, var(--fg) 2.5px, transparent 3px),
    linear-gradient(var(--line-s), var(--line-s)) 0 50% / calc(100% - 6px) 1px no-repeat;
}

/* 枠内の下部に置く控えめな注記（灰色）。文字は曲ごとの注記と同じ書体・サイズ */
.tracks-note {
  display: flex; align-items: center;
  margin-top: 4px; padding: 14px 0 6px;
  border-top: 1px solid var(--line);
  font: 500 11px/1.5 var(--f-disp); letter-spacing: .04em; color: rgba(255, 255, 255, .36);
}

@media (min-width: 768px) {
  .tracks-note { justify-content: flex-end; font-size: 12px; }
  .track { grid-template-columns: 3.2em 1fr; padding: 22px 0; }
  .track__no { font-size: 17px; }
  .track__main { flex-wrap: wrap; }
  .track__artist { order: 3; flex-basis: auto; margin-left: auto; font-size: 13px; color: var(--dim); }
  .track__note { order: 4; font-size: 12px; }
  .track__note::before { flex-basis: 56px; }
}

/* =========================================================
   03 XFD
   ========================================================= */
.xfd { position: relative; padding: 0; }
.xfd__bar {
  display: flex; justify-content: space-between; align-items: center;
  padding: 10px 2px;
  font: 11px/1 var(--f-mono); letter-spacing: .22em; color: var(--dim);
}
.xfd__bar span { display: flex; align-items: center; gap: 10px; }
.xfd__rec {
  width: 7px; height: 7px; border-radius: 50%; background: var(--red);
  animation: blink 1.6s steps(1) infinite;
}
@keyframes blink { 50% { opacity: .2; } }
.xfd__screen {
  position: relative; aspect-ratio: 16 / 9; width: 100%;
  background: #050507; overflow: hidden;
  border: 1px solid var(--line-s);
}
@supports not (aspect-ratio: 16 / 9) {
  .xfd__screen { height: 0; padding-top: 56.25%; }
}
.xfd__screen iframe, .xfd__screen .xfd__ph, .xfd__screen .xfd__play {
  position: absolute; inset: 0; width: 100%; height: 100%; border: 0;
}
.xfd__ph {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
  text-align: center;
  background:
    linear-gradient(180deg, rgba(0, 0, 0, .55), rgba(0, 0, 0, .85)),
    url(../img/kvbg-900.webp) center 60% / cover no-repeat;
}
.xfd__ph::after {
  content: ""; position: absolute; left: 0; right: 0; top: 0; height: 30%;
  background: linear-gradient(180deg, transparent, rgba(255, 255, 255, .05), transparent);
  animation: scan 4.5s linear infinite;
}
@keyframes scan { from { transform: translateY(-100%); } to { transform: translateY(340%); } }
.xfd__icon { width: clamp(48px, 10vw, 84px); margin-bottom: 8px; }
.xfd__icon circle { transform-origin: 60px 60px; transform-box: view-box; }
.xfd__label { font: 11px/1.4 var(--f-mono); letter-spacing: .3em; color: var(--dim); }
.xfd__soon { font: 700 clamp(18px, 4vw, 30px)/1.2 var(--f-disp); letter-spacing: .2em; }

.xfd__play { padding: 0; background: #000; cursor: pointer; display: block; }
.xfd__play img { width: 100%; height: 100%; object-fit: cover; opacity: .82; transition: opacity .3s, transform .6s var(--ease); }
.xfd__play:hover img { opacity: 1; transform: scale(1.02); }
.xfd__btn {
  position: absolute; left: 50%; top: 50%;
  width: clamp(64px, 12vw, 96px); aspect-ratio: 1;
  transform: translate(-50%, -50%);
  display: grid; place-items: center;
  background: rgba(0, 0, 0, .55); border: 1px solid rgba(255, 255, 255, .7);
  clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
  transition: background .25s;
}
.xfd__btn::after {
  content: ""; width: 0; height: 0; margin-left: 12%;
  border-style: solid; border-width: 11px 0 11px 18px; border-color: transparent transparent transparent #fff;
}
.xfd__play:hover .xfd__btn, .xfd__play:focus-visible .xfd__btn { background: var(--red); }

.xfd__c { position: absolute; width: 14px; height: 14px; border: 0 solid var(--red); pointer-events: none; }
.xfd__body { position: relative; }
.xfd__c--tl { left: -6px; top: -6px; border-top-width: 2px; border-left-width: 2px; }
.xfd__c--tr { right: -6px; top: -6px; border-top-width: 2px; border-right-width: 2px; }
.xfd__c--bl { left: -6px; bottom: -6px; border-bottom-width: 2px; border-left-width: 2px; }
.xfd__c--br { right: -6px; bottom: -6px; border-bottom-width: 2px; border-right-width: 2px; }

/* =========================================================
   04 CREDIT
   ========================================================= */
.credit { display: grid; gap: 0; border-top: 1px solid var(--line-s); }
.credit__row {
  display: flex; flex-direction: column; gap: 4px;
  padding: 20px 0; border-bottom: 1px solid var(--line);
}
.credit dt { font: 12px/1.4 var(--f-mono); letter-spacing: .16em; color: var(--faint); }
.credit dd { font: 700 clamp(18px, 4.2vw, 24px)/1.4 var(--f-disp); letter-spacing: .04em; overflow-wrap: anywhere; }
.credit__row:last-child dd { font-size: clamp(15px, 3.6vw, 20px); font-weight: 500; }
.credit dd { display: flex; align-items: center; flex-wrap: wrap; column-gap: 14px; }
/* 名前横の控えめなリンク：「──」の後にアイコン */
.credit__links { display: flex; align-items: center; margin-left: -6px; }
.credit__links::before {
  content: ""; width: 22px; height: 1px; margin: 0 4px 0 6px; background: var(--line-s);
}
.credit__links a {
  display: grid; place-items: center;
  width: 40px; height: 40px;           /* タップ領域は確保しつつ、見た目は小さく */
  color: var(--faint);
  transition: color .25s;
}
.credit__links a:hover, .credit__links a:focus-visible { color: var(--fg); }
.credit__links a:hover .credit__ico { transform: translateY(-1px); }
.credit__ico { display: block; width: 17px; height: 17px; transition: transform .25s var(--ease); }
.credit__ico--tanoc {
  background: currentColor;
  -webkit-mask: url(../img/icon-tanoc.png) center / contain no-repeat;
  mask: url(../img/icon-tanoc.png) center / contain no-repeat;
}
@media (min-width: 768px) {
  .credit { grid-template-columns: 1fr 1fr; column-gap: 48px; }
  .credit__row:last-child { grid-column: 1 / -1; }
}

/* =========================================================
   05 SHOP
   ========================================================= */
.shop {
  position: relative;
  display: grid; place-items: center;
  min-height: 160px; padding: 32px 20px;
  border: 1px dashed var(--line-s);
  background: rgba(0, 0, 0, .5);
}
.shop__soon { font: 700 clamp(18px, 4vw, 30px)/1.2 var(--f-disp); letter-spacing: .2em; text-align: center; }   /* XFDの「COMING SOON」と同じ */
.shop__list { width: 100%; display: grid; gap: 12px; }
@media (min-width: 640px) { .shop__list { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); } }
.shop__btn {
  position: relative; display: flex; align-items: center; justify-content: space-between; gap: 12px;
  min-height: 60px; padding: 14px 20px;
  border: 1px solid var(--line-s); background: rgba(0, 0, 0, .6);
  font: 700 17px/1.3 var(--f-disp); letter-spacing: .08em; text-decoration: none;
  overflow: hidden; transition: border-color .3s, color .3s;
}
.shop__btn::before {
  content: ""; position: absolute; inset: 0; z-index: -1; background: var(--red);
  transform: scaleX(0); transform-origin: 0 50%; transition: transform .4s var(--ease);
}
.shop__btn { isolation: isolate; }
.shop__btn:hover { border-color: var(--red); }
.shop__btn:hover::before { transform: scaleX(1); }
.shop__btn i { font: 12px/1 var(--f-mono); font-style: normal; letter-spacing: .2em; color: var(--dim); }
.shop__btn:hover i { color: var(--fg); }
.shop.has-links { border-style: solid; display: block; }

/* =========================================================
   FOOTER
   ========================================================= */
.ft { position: relative; overflow: hidden; padding: 72px 0 40px; border-top: 1px solid var(--line); background: #000; }
.ft__floor {
  position: absolute; left: -50%; right: -50%; bottom: -10%; height: 140%;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='41.57' height='72' viewBox='0 0 41.57 72'%3E%3Cpath d='M20.785 0 41.57 12v24L20.785 48 0 36V12ZM20.785 48v24' fill='none' stroke='%23e30037' stroke-width='1'/%3E%3C/svg%3E");
  background-size: 62px 108px;
  transform: perspective(500px) rotateX(62deg);
  transform-origin: 50% 100%;
  opacity: .45;
  -webkit-mask-image: linear-gradient(0deg, #000 0%, transparent 70%);
  mask-image: linear-gradient(0deg, #000 0%, transparent 70%);
  pointer-events: none;
}
.ft__in { position: relative; display: flex; flex-direction: column; align-items: center; gap: 14px; text-align: center; }
.ft__logo { width: min(280px, 70vw); }
.ft__circle { font: 500 14px/1.4 var(--f-disp); letter-spacing: .2em; color: var(--dim); }
/* SNS */
.sns { width: 100%; max-width: 720px; margin-top: 28px; }
.sns__label {
  display: flex; align-items: center; justify-content: center; gap: 12px; margin-bottom: 16px;
  font: 12px/1 var(--f-mono); letter-spacing: .26em; color: var(--dim);
}
.sns__label span:first-child { color: var(--red); }
.sns__label i { width: 40px; height: 1px; background: var(--line-s); }
.sns__list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
@media (min-width: 640px) { .sns__list { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.sns__btn {
  position: relative; isolation: isolate; overflow: hidden;
  display: flex; align-items: center; gap: 10px;
  min-height: 52px; padding: 12px 14px;
  border: 1px solid var(--line-s); background: rgba(0, 0, 0, .6);
  font: 700 14px/1.2 var(--f-disp); letter-spacing: .06em; text-decoration: none;
  transition: border-color .3s;
}
.sns__btn::before {
  content: ""; position: absolute; inset: 0; z-index: -1; background: var(--red);
  transform: scaleX(0); transform-origin: 0 50%; transition: transform .4s var(--ease);
}
.sns__btn:hover { border-color: var(--red); }
.sns__btn:hover::before { transform: scaleX(1); }
.sns__btn svg { flex: 0 0 20px; width: 20px; height: 20px; }
.sns__name { min-width: 0; }
.sns__arrow { margin-left: auto; font: 13px/1 var(--f-mono); color: var(--faint); transition: color .3s, transform .3s var(--ease); }
.sns__btn:hover .sns__arrow { color: var(--fg); transform: translate(2px, -2px); }
/* Spotifyアイコン内の線はホバー時に赤背景へ馴染ませる */
.sns__btn:hover svg path[stroke="#000"] { stroke: var(--red); }

.ft__top {
  display: inline-flex; align-items: center; gap: 10px;
  min-height: 48px; padding: 0 20px; margin-top: 28px;
  border: 1px solid var(--line-s);
  font: 12px/1 var(--f-mono); letter-spacing: .26em; text-decoration: none;
  transition: border-color .3s, background .3s;
}
.ft__top i { width: 0; height: 0; border-style: solid; border-width: 0 4px 6px 4px; border-color: transparent transparent var(--red) transparent; }
.ft__top:hover { border-color: var(--red); background: rgba(227, 0, 55, .12); }
.ft__copy { margin-top: 24px; font: 12px/1.6 var(--f-mono); letter-spacing: .14em; color: var(--faint); }

/* =========================================================
   CURSOR（HUDの照準。マウス操作の環境のみJSで有効化）
   ========================================================= */
.has-cur, .has-cur * { cursor: none !important; }
/* ジャケット拡大表示中は通常のカーソルに戻す（拡大表示が最前面に出るため） */
.has-cur.lb-open, .has-cur.lb-open * { cursor: auto !important; }
.has-cur.lb-open .lb__close { cursor: pointer !important; }

.cur { position: fixed; inset: 0; z-index: 300; pointer-events: none; opacity: 0; transition: opacity .3s; }
.cur.is-on { opacity: 1; }
.lb-open .cur { opacity: 0; }

.cur__dot, .cur__ring, .cur__pulse { position: absolute; left: 0; top: 0; will-change: transform; }
.cur__dot {
  width: 0; height: 0;
}
.cur__dot::before {
  content: ""; position: absolute; left: -2.5px; top: -2.5px; width: 5px; height: 5px;
  border-radius: 50%; background: var(--red);
  box-shadow: 0 0 8px rgba(227, 0, 55, .8);
  transition: transform .25s var(--ease);
}
.cur.is-hover .cur__dot::before { transform: scale(.6); }

.cur__ring { width: 0; height: 0; }
/* 四隅のブラケット（ゆっくり回転） */
.cur__frame {
  position: absolute; left: -15px; top: -15px; width: 30px; height: 30px;
  animation: curSpin 8s linear infinite;
  transition: left .3s var(--ease), top .3s var(--ease), width .3s var(--ease), height .3s var(--ease);
}
.cur__frame i {
  position: absolute; width: 8px; height: 8px;
  border: 0 solid rgba(255, 255, 255, .85);
  transition: border-color .25s;
}
.cur__frame i:nth-child(1) { left: 0; top: 0; border-top-width: 1px; border-left-width: 1px; }
.cur__frame i:nth-child(2) { right: 0; top: 0; border-top-width: 1px; border-right-width: 1px; }
.cur__frame i:nth-child(3) { left: 0; bottom: 0; border-bottom-width: 1px; border-left-width: 1px; }
.cur__frame i:nth-child(4) { right: 0; bottom: 0; border-bottom-width: 1px; border-right-width: 1px; }
.cur.is-hover .cur__frame {
  left: -22px; top: -22px; width: 44px; height: 44px;
  animation: none; transform: rotate(0deg);
}
.cur.is-hover .cur__frame i { border-color: var(--red); width: 10px; height: 10px; border-width: 0; }
.cur.is-hover .cur__frame i:nth-child(1) { border-top-width: 2px; border-left-width: 2px; }
.cur.is-hover .cur__frame i:nth-child(2) { border-top-width: 2px; border-right-width: 2px; }
.cur.is-hover .cur__frame i:nth-child(3) { border-bottom-width: 2px; border-left-width: 2px; }
.cur.is-hover .cur__frame i:nth-child(4) { border-bottom-width: 2px; border-right-width: 2px; }
.cur.is-down .cur__frame { left: -11px; top: -11px; width: 22px; height: 22px; }

.cur__label {
  position: absolute; left: 22px; top: 18px; white-space: nowrap;
  font: 10px/1 var(--f-mono); letter-spacing: .14em; color: var(--faint);
  transition: color .25s, left .3s var(--ease), top .3s var(--ease);
}
.cur.is-hover .cur__label { left: 28px; top: 24px; color: var(--fg); letter-spacing: .22em; }
.cur.is-hover .cur__label::before { content: "▸ "; color: var(--red); }

/* クリック時の六角形の波紋 */
.cur__pulse { width: 0; height: 0; }
.cur__pulse::before {
  content: ""; position: absolute; left: -20px; top: -20px; width: 40px; height: 40px;
  background: var(--red);
  clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%, 50% 0, 50% 4%, 4% 27%, 4% 73%, 50% 96%, 96% 73%, 96% 27%, 50% 4%);
  animation: curPulse .65s var(--ease) forwards;
}
@keyframes curSpin { to { transform: rotate(360deg); } }
@keyframes curPulse { from { transform: scale(.3); opacity: 1; } to { transform: scale(1.9); opacity: 0; } }

/* =========================================================
   REDUCED MOTION
   ========================================================= */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .2s !important;
    transition-delay: 0s !important;
  }
  .loader__ring, .loader__ring2, .loader__hex, .loader__core,
  .ticker__track, .xfd__rec, .xfd__ph::after, .kv__scroll i::after { animation: none !important; }
  .js .rv { transform: none; }
  .js .kv__img img { transform: none; }
  .kv__img { will-change: auto; }
  .js.is-ready .kv__title img, .js.is-ready .kv__echo { animation: none; opacity: 1; }
  .js .kv__door, .js .kv__bgonly, .js .kv__glitch, .js .kv__pix, .js .kv__noise, .kv__snow { display: none; }
  .js .kv__band { visibility: visible; animation: none; }
}
