/* ================================================================= */
/* ViewWeb.Client / wwwroot / css / app.css                        */
/* 全プロジェクト統合版 (Settings + Portal + PeriExam + Layout)    */
/* ================================================================= */

/*index*/
/* 1. 変数定義 (:root) & 基本設定                                     */
/* 2. ユーティリティクラス                                            */
/* 3. レイアウト & 共通コンポーネント (MainLayout含む)                 */
/* 4. システム UI (エラー・ローディング)      */

/* ----------------------------------------------------------------- */
/* 1. 変数定義 (:root) & 基本設定                                     */
/* ----------------------------------------------------------------- */
:root {
    /* === 色設定 (Settings & PeriExam 統合) === */
    --primary-color: #212D50;
    --secondary-color: #1A9FCC;
    --mud-palette-primary: #594AE2; /* MudBlazor標準色 */

    --base-col: var(--mud-palette-primary);
    --base-col-font: #FFFFFF;
    --main-col: #FAFAFA;
    --accent-col-1: #CCFF00;
    --accent-col-2: #00B0FF;
    --menu-titleBG: #004275;
    --base-bg-col: #FFFFFF; /* 白背景 */
    --base-color: #F5F5F5; /* 薄いグレー背景 */
    --paper-col: #F9F9F9; /* MudPaper背景 */

    --black-color: #0B0E1D;
    --text-color-dark: #0B0E1D;
    --white-color: #fff;
    /* グレー系 */
    --gray-col-e: #eee;
    --gray-col-1: #dcdcdc;
    --gray-col-6: #666;
    --gray-col-0: #000;
    --gray-disabled: #aaa;
    --gray-light-color: #f8f9fa;
    --gray-middle-color: #e8e9ea; /* 欠損歯背景 */
    --gray-color: #b4b9be; /* ボーダー */
    --gray-dark-color: #616467;
    --gray-bace-color: #3c3c40; /* ラベル背景 */
    /* 透明度系 */
    --transparent-col-2: rgba(0,0,0,0.2);
    --transparent-col-5: rgba(0,0,0,0.5);
    --transparent-accent-2: rgba(0,176,255,0.2);
    /* アラート・ステータス */
    --alert-col: #e40e0e;
    --reject-color: #F44336;
    /* === 歯周検査用 === */
    --plaque-color: #F44336;
    --active-color: #304FFE;
    --active-bgcolor: #E1F5FE;
    --cell-bgcolor: #E1F5FE;
    --cell-ppd-bgcolor: #FFFDE7;
    /* === レイアウト設定 === */
    --app-max-width: 1400px;
    --app-bar-height: 56px;
    --drawer-width-mini: 60px;
    --drawer-width-full: 260px;
    --drawer-position: 1rem;
    --drawer-position-ex: calc(var(--drawer-position)*2);
    /* === 歯科用ドメインカラー定義 === */
    /* インプラント: 緑 */
    --implant-color: #28a745;
    /* 乳歯: オレンジ/黄色 */
    --deciduous-color: #ffc107;
    /* 欠損: 濃いグレー */
    --missing-color: #6c757d;
    /* 未萌出: 薄いグレー背景 */
    --unerupted-bg-color: #f0f0f0;
    /* 枠線や文字の基本色 */
    --border-color: #adb5bd;
    --text-color: #212529;
    /* 背景（グレーアウト用） */
    --gray-middle-color: #e0e0e0;
}

/* ブラウザリセット */
*, *::before, *::after {
    box-sizing: border-box;
}

html, body {
    height: 100%;
    margin: 0;
    padding: 0;
    background-color: var(--base-bg-col) !important;
    font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif;
    color: var(--text-color-dark);
    overflow-x: hidden;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

h1:focus, h2:focus, h3:focus {
    outline: none;
}

h1, h2, h3, h4, h5, h6, p {
    margin: 0;
}

/* ----------------------------------------------------------------- */
/* 2. ユーティリティクラス                                            */
/* ----------------------------------------------------------------- */

/*必須　赤色*/
.required {color: var(--alert-col);}

/*拒否　赤色*/
/* 警告メッセージ用の赤文字 */
.reject-font {
    color: var(--reject-color);
    font-weight: bold;
}

/*ポジティブ色*/
.positive {color: var(--base-col);}



/*テキスト右寄せ*/
.ta-r {text-align: right;}

/*パディング無し*/
.no-padding {padding-top: .5rem !important;}


.wrap-set {align-items: baseline;}

.tooltip-ul {border-bottom: 1px dotted var(--base-col);}

.nowrap {white-space: nowrap;}

/* リンク・ボタン基本 */
a, .btn-link {color: #0071c1;}

.btn-primary {
    color: var(--white-color);
    background-color: #1b6ec2;
    border-color: #1861ac;
}

.btn:focus, .btn:active:focus, .form-control:focus {
    box-shadow: 0 0 0 0.1rem var(--white-color), 0 0 0 0.25rem #258cfb;
}

/* スナックバー内の改行コード(\n)を有効にする */
.mud-snackbar-content-message {
    white-space: pre-wrap;
}

/* ----------------------------------------------------------------- */
/* 3. レイアウト & 共通コンポーネント (MainLayout含む)                 */
/* ----------------------------------------------------------------- */

/* =================================================================
   【Z-index Constitution / アプリケーション階層】   
   この数値以外は原則使用禁止。
   ================================================================= */
/*
Lv 6	3000	アプリロック (重複起動・不一致)
Lv 5	2500	システムエラー (#blazor-error-ui)
Lv 4.8	2100	重大な警告・登録確認 (起動失敗・未送信確認・データ登録確認)
Lv 4.5	2000	画像プレビュー (img-modal-overlay)
Lv 4	1400 / 1200	標準UI (MudDialog / MudPopoverリスト)
Lv 3	1100	ヘッダー (MudAppBar)
Lv 2.5	1000	アクティブ要素 (選択行・印刷用マーカー・統計パネル)
Lv 2	600 〜 620	入力パネル (PPDキーボード・歯番詳細)
Lv 1	500	暗幕 (.dimmed-overlay)
Lv 0	0 〜 100	ベース (チャート、お知らせ、背景)
*/


.z-overlay {
    z-index: 500;
}
.z-panel {z-index: 100;}
.z-base {z-index: 0;}


/*  アプリごとのAppBarグラデーション定義　※各プロジェクトでは設定困難なため、ここに集約*/
/* ① デフォルト（ポータル・ログイン用）：青系 */
.theme-default-appbar {
    background-color: transparent !important;
    background-image: linear-gradient(135deg, #1E88E5 0%, #00078C 100%) !important;
    color: white !important;
}

        /* ② 歯周検査（PeriExam用）：水色・緑系 */
        .theme-periexam-appbar {
            background-color: transparent !important;
            /* 歯周検査っぽい色のグラデーション */
            background-image: linear-gradient(135deg, #42ABE2 0%, #00695C 100%) !important;
            color: white !important;
        }

        /* ③ 設定画面（Settings用）：また別の色 */
        .theme-settings-appbar {
            background-color: transparent !important;
            background-image: linear-gradient(135deg, #546E7A 0%, #263238 100%) !important;
            color: white !important;
        }

/* AppBarより手前にPopoverを出す（z-indexのみ調整） */
.theme-default-appbar {
    z-index: 1200 !important;
}

.mud-popover-provider {
    z-index: 2000 !important;
}

/* v9.2 一時回避: 負座標だけクランプ */
.user-menu-popover {
    left: max(0px, var(--mud-popover-left, 0px)) !important;
    top: max(0px, var(--mud-popover-top, 0px)) !important;
}

/* 設定画面用コンテナ */
.settings-container {
    padding: 1rem 1rem 3rem;
}

@media (min-width: 600px) {
    .mud-container--gutters {
        padding-left: 0 !important;
        padding-right: 0 !important;
    }
}


/* =========================================
   MudBlazor Global Overrides
   ========================================= */

/* Snackbar（通知）の中で改行コード(\n)を有効にする */
.mud-snackbar-content-message {
    white-space: pre-wrap !important;
}




/* ----------------------------------------------------------------- */
/* 4. システム UI (エラー・ローディング)                               */
/* ----------------------------------------------------------------- */

/*患者取り違え防止*/
.window-lock-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    background-color: rgba(0,0,0,0.6);
    z-index: 9999;
    display: flex;
    justify-content: center;
    align-items: center;
    backdrop-filter: blur(2px);
}

.lock-container {
    max-width: 500px;
    width: 90%;
    border: 1px solid #ccc;
}


/*エラー*/

#blazor-error-ui {
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 2500;
}

    #blazor-error-ui .dismiss {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "An error has occurred.";
    }

/* ローディング (クルクル) */
.loading-progress {
    position: relative;
    display: block;
    width: 8rem;
    height: 8rem;
    margin: 20vh auto 1rem auto;
}

    .loading-progress circle {
        fill: none;
        stroke: #dcdcdc;
        stroke-width: 0.6rem;
        transform-origin: 50% 50%;
        transform: rotate(-90deg);
    }

        .loading-progress circle:last-child {
            stroke: #01579B;
            stroke-dasharray: calc(3.141 * var(--blazor-load-percentage, 0%) * 0.8), 500%;
            transition: stroke-dasharray 0.05s ease-in-out;
        }

.loading-progress-text {
    position: absolute;
    text-align: center;
    font-weight: bold;
    inset: calc(20vh + 3.25rem) 0 auto 0.2rem;
}

    .loading-progress-text:after {
        content: var(--blazor-load-percentage-text, "Loading");
    }






