@charset "utf-8";
/* CSS Document */

  :root{
    /* JSで上書き */
    --cell: 32px;          /* セルの一辺（整数px） */
    --cols: 8;             /* 列数（整数） */
    --fade: 600ms;         /* クロスフェード時間 */
    --fade-ease: ease;     /* クロスフェードのイージング */
  }

  html, body { height: 100%; margin: 0; }
  .stage{
    width: 100%;
    height: 100vh;
    overflow: hidden;      /* はみ出しは非表示（穴ゼロ前提） */
    background: #000;
    display: flex;
    align-items: stretch;
    justify-content: center;
  }

  /* ====== CSS Grid（整数セルで盤面をタイル張り） ====== */
  .grid{
    display: grid;
    grid-template-columns: repeat(var(--cols), var(--cell));
    grid-auto-rows: var(--cell);
    gap: 0;
    width: 100%;
    height: 100%;
    box-sizing: content-box;
  }

  .grid-item{
    position: relative;
    overflow: hidden;      /* タイル外はトリミング */
    background: #111;      /* ロード前のプレースホルダ（クロスフェードでは見えない） */
    will-change: opacity, transform;
  }

  /* 2枚重ね（絶対配置）でクロスフェード。常にどちらかが見えているので背景は出ない */
  .grid-item > img{
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    opacity: 0;                                  /* 初期は非表示 */
    transition: opacity var(--fade) var(--fade-ease);
    backface-visibility: hidden;
    transform: translateZ(0);
  }
  .grid-item > img.show{ opacity: 1; }          /* 表層 */
  .grid-item > img.hide{ opacity: 0; }          /* 裏層 */