body.page-loading {
    overflow: hidden;
}

/* 画面全体を覆う不透明カバー */
body.page-loading::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: 999998;
    background: rgba(247, 247, 247, 0.82);
}

/* 中央メッセージ */
body.page-loading::after {
    content: attr(data-loading-message);
    position: fixed;
    left: 50%;
    top: 50%;
    z-index: 999999;
    transform: translate(-50%, -50%);
    min-width: 280px;
    max-width: 520px;
    padding: 22px 32px;
    border: 1px solid #b8b8b8;
    border-radius: 10px;
    background: #ffffff;
    box-shadow: 0 4px 18px rgba(0, 0, 0, 0.18);
    color: #333333;
    font-size: 16px;
    font-weight: 600;
    text-align: center;
    white-space: pre-line;
}

/* 完了後 */
body.page-ready::before,
body.page-ready::after {
    display: none;
}

/* ページ遷移元で現在画面に被せる半透明カバー */
body.page-transition-loading {
    cursor: wait;
    overflow: hidden;
}

body.page-transition-loading::before {
    content: "";
    display: block;
    position: fixed;
    inset: 0;
    z-index: 999996;
    background: rgba(247, 247, 247, 0.68);
    pointer-events: auto;
}

body.page-transition-loading::after {
    content: attr(data-transition-loading-message);
    display: block;
    position: fixed;
    left: 50%;
    top: 50%;
    z-index: 999997;
    transform: translate(-50%, -50%);
    min-width: 280px;
    max-width: 520px;
    padding: 22px 32px;
    border: 1px solid #b8b8b8;
    border-radius: 10px;
    background: #ffffff;
    box-shadow: 0 4px 18px rgba(0, 0, 0, 0.18);
    color: #333333;
    font-size: 16px;
    font-weight: 600;
    text-align: center;
    white-space: pre-line;
}
