﻿/*
    文字サイズ（個人設定・5段階）。

    レイアウトが html 要素へ font-size-1〜5 を付け、ここで倍率（--font-scale）だけを差し替える。
    実寸の計算は画面ごとの土台に置いてある（利用者画面は site.css、管理者ポータルは admin.css）。
    **custom.css は両方の画面が読む唯一の共通ファイルなので、段階の値はここ1か所だけに置く。**
    2か所に書くと、片方だけ直したときに利用者画面と管理者ポータルで文字の大きさがずれる。
*/
html.font-size-1 {
    --font-scale: 0.85;
}

html.font-size-2 {
    --font-scale: 0.925;
}

html.font-size-3 {
    --font-scale: 1;
}

html.font-size-4 {
    --font-scale: 1.125;
}

html.font-size-5 {
    --font-scale: 1.25;
}

:root {
    --primary: #2563eb;
    --danger: #dc3545;
    --orange: #f97316;
    --purple: #8b5cf6;
    --gray-50: #f9fafb;
    --gray-100: #f3f4f6;
    --gray-200: #e5e7eb;
    --gray-300: #d1d5db;
    --gray-400: #9ca3af;
    --gray-500: #6b7280;
    --gray-600: #4b5563;
    --gray-700: #374151;
    --gray-800: #1f2937;
    --gray-900: #111827;
    --gray-950: #030712;
    --sky-500: #0ea5e9;
    --blue-300: #93c5fd;
    --green-100: #dcfce7;
    /* 暗い背景に載せる緑（ログイン画面のお知らせのアイコン）。
       --blue-300 や --amber-400 と同じ明るさの段 */
    --green-300: #86efac;
    --green-700: #15803d;
    --success: #198754;
    --alert: #ffc107;
    --info: #0dcaf0;
    --amber-100: #fef3c7;
    --amber-400: #fbbf24;
    --amber-500: #f59e0b;
    --amber-800: #92400e;
    --indigo-50: #eef2ff;
    --indigo-100: #e0e7ff;
    --indigo-200: #c7d2fe;
    --indigo-300: #a5b4fc;
    --indigo-400: #818cf8;
    --indigo-500: #6366f1;
    --indigo-600: #4f46e5;
    --indigo-700: #4338ca;
    --indigo-800: #3730a3;
    --indigo-900: #312e81;
    --red-100: #fee2e2;
    --red-500: #ef4444;
    --red-700: #b91c1c;
}

/* ===========================================================
   利用者画面と管理者ポータルの両方で使う部品。

   custom.css は両方のレイアウトが読む唯一のCSSなので、
   「どちらの画面にも出てくる見た目」はここに置く。
   site.css（利用者画面だけ）に置くと、管理者ポータルでは素のHTMLのまま出る。
   =========================================================== */

/*
    読み込み中の幕。**管理者ポータルのレイアウトも同じ入れ物を置いている。**
    site.css にだけ書いてあったため、管理者ポータルでは幕も輪も出ていなかった（押した後に何も起きないように見える）。
*/
.loading-overlay {
    position: fixed;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(255, 255, 255, 0.7);
    z-index: 9999;
}

.spinner {
    width: 48px;
    height: 48px;
    border: 6px solid #ddd;
    border-top: 6px solid #007bff;
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
}

@keyframes spin {
    0% {
        transform: rotate(0deg);
    }

    100% {
        transform: rotate(360deg);
    }
}

/* トグル（入／切のスイッチ）。管理者ポータルの登録モーダルでも使う */
.toggle-switch {
    position: relative;
    width: 3.5rem;
    height: 2rem;
    border-radius: 1rem;
    border: none;
    cursor: pointer;
    background: var(--gray-300);
    transition: background 0.2s;
    flex-shrink: 0;
    padding: 0;
}

.toggle-switch-thumb {
    position: absolute;
    top: 0.125rem;
    left: 0.125rem;
    width: 1.75rem;
    height: 1.75rem;
    background: white;
    border-radius: 50%;
    box-shadow: 0 0.25rem 0.25rem rgba(0, 0, 0, 0.2);
    transition: transform 0.2s;
}

/* ON状態 */
.toggle-switch.is-on {
    background: var(--gray-600);
}

    .toggle-switch.is-on .toggle-switch-thumb {
        transform: translateX(1.5rem);
    }

/* ステータスバッジ */
.badge-main {
    display: inline-block;
    white-space: nowrap;
    padding: 0.25rem 0.5rem;
    font-size: 0.75rem;
    border-radius: 1.5rem;
    font-weight: bold;
    background-color: var(--gray-100);
    color: var(--gray-600);
}

    .badge-main.success {
        background-color: var(--green-100);
        color: var(--green-700);
    }

    /* 以前は濃い赤（--red-500）の地に赤文字（--danger）で、文字が背景に埋もれていた。
       success・alert と同じ「薄い地＋濃い文字」にそろえる */
    .badge-main.danger {
        background-color: var(--red-100);
        color: var(--red-700);
    }

    /*
       alert は Bootstrap にも同じ名前のクラスがあり、下の余白（margin-bottom: 1rem）と
       枠線（1px solid transparent）が付いてくる。バッジ側では打ち消していなかったため、
       このバッジを置いた行だけ高さが変わって列がずれて見えていた
       （招待一覧の「招待中」、RAG一覧の「未処理」、要約詳細の「処理中」、
       オプション設定の「有料」の4か所）。
       クラスを2つ重ねた指定にして、読み込み順に関係なく勝つようにしている
    */
    .badge-main.alert {
        background-color: var(--amber-100);
        color: var(--amber-800);
        margin-bottom: 0;
        border: 0;
    }

/* 選ぶモーダルの一覧（エージェントのナレッジ選択など。管理者ポータルのプリセットでも使う） */
.modal-dropdown-list {
    list-style: none;
    overflow-y: auto;
    flex: 1;
    min-height: 20rem;
    max-height: 35rem;
    padding: 0rem 0.5rem;
}

    .modal-dropdown-list li {
        display: flex;
        gap: 0.75rem;
        padding: 1.25rem 0.75rem;
        cursor: pointer;
        transition: background 0.12s;
        user-select: none;
        border-top: 0.125rem solid var(--gray-200);
    }

        .modal-dropdown-list li.selected {
            background: var(--gray-300);
        }

        .modal-dropdown-list li:last-child {
            border-bottom: 0.125rem solid var(--gray-200);
        }

        .modal-dropdown-list li:not(.selected):hover {
            background: var(--gray-50);
        }

        .modal-dropdown-list li input[type="checkbox"] {
            width: 2rem;
            height: 1rem;
        }

        .modal-dropdown-list li label {
            width: 100%;
        }

.bg-orange {
    background-color: var(--orange) !important;
}

.bg-purple {
    background-color: var(--purple) !important;
}

.container-fluid {
    padding-right: 1rem !important;
    padding-left: 1rem !important;
    margin-bottom: 2.5rem !important;
}

/*横幅指定CSS（％表記）*/
.w-10 {
    width: 10% !important;
}

.w-20 {
    width: 20% !important;
}

.w-30 {
    width: 30% !important;
}

.w-40 {
    width: 40% !important;
}

.w-50 {
    width: 50% !important;
}

.w-60 {
    width: 60% !important;
}

.w-70 {
    width: 70% !important;
}

.w-80 {
    width: 80% !important;
}

.w-90 {
    width: 90% !important;
}
/*padding/margin*/
/* ===== Padding ===== */
.p-0 {
    padding: 0rem !important;
}

.p-1 {
    padding: 0.25rem !important;
}

.p-2 {
    padding: 0.5rem !important;
}

.p-3 {
    padding: 0.75rem !important;
}

.p-4 {
    padding: 1rem !important;
}

.p-5 {
    padding: 1.25rem !important;
}

.pt-0 {
    padding-top: 0rem !important;
}

.pt-1 {
    padding-top: 0.25rem !important;
}

.pt-2 {
    padding-top: 0.5rem !important;
}

.pt-3 {
    padding-top: 0.75rem !important;
}

.pt-4 {
    padding-top: 1rem !important;
}

.pt-5 {
    padding-top: 1.25rem !important;
}

.pr-0 {
    padding-right: 0rem !important;
}

.pr-1 {
    padding-right: 0.25rem !important;
}

.pr-2 {
    padding-right: 0.5rem !important;
}

.pr-3 {
    padding-right: 0.75rem !important;
}

.pr-4 {
    padding-right: 1rem !important;
}

.pr-5 {
    padding-right: 1.25rem !important;
}

.pb-0 {
    padding-bottom: 0rem !important;
}

.pb-1 {
    padding-bottom: 0.25rem !important;
}

.pb-2 {
    padding-bottom: 0.5rem !important;
}

.pb-3 {
    padding-bottom: 0.75rem !important;
}

.pb-4 {
    padding-bottom: 1rem !important;
}

.pb-5 {
    padding-bottom: 1.25rem !important;
}

.pl-0 {
    padding-left: 0rem !important;
}

.pl-1 {
    padding-left: 0.25rem !important;
}

.pl-2 {
    padding-left: 0.5rem !important;
}

.pl-3 {
    padding-left: 0.75rem !important;
}

.pl-4 {
    padding-left: 1rem !important;
}

.pl-5 {
    padding-left: 1.25rem !important;
}
/* ===== Margin ===== */
.m-0 {
    margin: 0rem !important;
}

.m-1 {
    margin: 0.25rem !important;
}

.m-2 {
    margin: 0.5rem !important;
}

.m-3 {
    margin: 0.75rem !important;
}

.m-4 {
    margin: 1rem !important;
}

.m-5 {
    margin: 1.25rem !important;
}

.mt-0 {
    margin-top: 0rem !important;
}

.mt-1 {
    margin-top: 0.25rem !important;
}

.mt-2 {
    margin-top: 0.5rem !important;
}

.mt-3 {
    margin-top: 0.75rem !important;
}

.mt-4 {
    margin-top: 1rem !important;
}

.mt-5 {
    margin-top: 1.25rem !important;
}

.mr-0 {
    margin-right: 0rem !important;
}

.mr-1 {
    margin-right: 0.25rem !important;
}

.mr-2 {
    margin-right: 0.5rem !important;
}

.mr-3 {
    margin-right: 0.75rem !important;
}

.mr-4 {
    margin-right: 1rem !important;
}

.mr-5 {
    margin-right: 1.25rem !important;
}

.mb-0 {
    margin-bottom: 0rem !important;
}

.mb-1 {
    margin-bottom: 0.25rem !important;
}

.mb-2 {
    margin-bottom: 0.5rem !important;
}

.mb-3 {
    margin-bottom: 0.75rem !important;
}

.mb-4 {
    margin-bottom: 1rem !important;
}

.mb-5 {
    margin-bottom: 1.25rem !important;
}

.ml-0 {
    margin-left: 0rem !important;
}

.ml-1 {
    margin-left: 0.25rem !important;
}

.ml-2 {
    margin-left: 0.5rem !important;
}

.ml-3 {
    margin-left: 0.75rem !important;
}

.ml-4 {
    margin-left: 1rem !important;
}

.ml-5 {
    margin-left: 1.25rem !important;
}
/* ===== Padding (axis) ===== */
.px-0 {
    padding-left: 0rem !important;
    padding-right: 0rem !important;
}

.px-1 {
    padding-left: 0.25rem !important;
    padding-right: 0.25rem !important;
}

.px-2 {
    padding-left: 0.5rem !important;
    padding-right: 0.5rem !important;
}

.px-3 {
    padding-left: 0.75rem !important;
    padding-right: 0.75rem !important;
}

.px-4 {
    padding-left: 1rem !important;
    padding-right: 1rem !important;
}

.px-5 {
    padding-left: 1.25rem !important;
    padding-right: 1.25rem !important;
}

.py-0 {
    padding-top: 0rem !important;
    padding-bottom: 0rem !important;
}

.py-1 {
    padding-top: 0.25rem !important;
    padding-bottom: 0.25rem !important;
}

.py-2 {
    padding-top: 0.5rem !important;
    padding-bottom: 0.5rem !important;
}

.py-3 {
    padding-top: 0.75rem !important;
    padding-bottom: 0.75rem !important;
}

.py-4 {
    padding-top: 1rem !important;
    padding-bottom: 1rem !important;
}

.py-5 {
    padding-top: 1.25rem !important;
    padding-bottom: 1.25rem !important;
}
/* ===== Margin (axis) ===== */
.mx-0 {
    margin-left: 0rem !important;
    margin-right: 0rem !important;
}

.mx-1 {
    margin-left: 0.25rem !important;
    margin-right: 0.25rem !important;
}

.mx-2 {
    margin-left: 0.5rem !important;
    margin-right: 0.5rem !important;
}

.mx-3 {
    margin-left: 0.75rem !important;
    margin-right: 0.75rem !important;
}

.mx-4 {
    margin-left: 1rem !important;
    margin-right: 1rem !important;
}

.mx-5 {
    margin-left: 1.25rem !important;
    margin-right: 1.25rem !important;
}

.my-0 {
    margin-top: 0rem !important;
    margin-bottom: 0rem !important;
}

.my-1 {
    margin-top: 0.25rem !important;
    margin-bottom: 0.25rem !important;
}

.my-2 {
    margin-top: 0.5rem !important;
    margin-bottom: 0.5rem !important;
}

.my-3 {
    margin-top: 0.75rem !important;
    margin-bottom: 0.75rem !important;
}

.my-4 {
    margin-top: 1rem !important;
    margin-bottom: 1rem !important;
}

.my-5 {
    margin-top: 1.25rem !important;
    margin-bottom: 1.25rem !important;
}
/* ===== Margin Auto ===== */

.m-auto {
    margin: auto !important;
}

.mt-auto {
    margin-top: auto !important;
}

.mr-auto {
    margin-right: auto !important;
}

.mb-auto {
    margin-bottom: auto !important;
}

.ml-auto {
    margin-left: auto !important;
}

.mx-auto {
    margin-left: auto !important;
    margin-right: auto !important;
}

.my-auto {
    margin-top: auto !important;
    margin-bottom: auto !important;
}
/*border*/
.border {
    border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
}

.border-top {
    border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
}

.border-bottom {
    border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
}

.border-right {
    border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
}

.border-left {
    border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
}

.border-radius {
    border-radius: 0.25rem;
}

/*文字サイズ*/
.small {
    font-size: 0.8rem !important;
}

.absolute-center {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}


/*
    Bootstrap 4 の名前で書かれている指定の受け皿。

    このシステムは Bootstrap 5 を読んでいるが、画面には 4 の名前（pl-3・mr-3・text-left など）が
    たくさん残っているため、custom.css で同じ名前を用意してある。
    **用意されていない名前だけが黙って効かない**という状態になりやすいので、
    画面で使っているものはここに揃える。

    - text-right … text-left はあったのに右寄せだけ無く、4か所（オプション設定・会社情報・実行詳細）で効いていなかった
    - font-weight-bold / font-weight-normal … 画面80か所で使われているのに定義が無く、太字になっていなかった
      （同じ意味の fw-bold は Bootstrap 5 にあるため効いており、画面によって太さが違って見えていた）
*/
.text-left {
    text-align: left !important;
}

.text-right {
    text-align: right !important;
}

.font-weight-bold {
    font-weight: 700 !important;
}

.font-weight-normal {
    font-weight: 400 !important;
}

/*
    共通の確認・お知らせダイアログ（_ConfirmDialog / _InfoDialog と site.js の作り置き）で使う見た目。

    クラス名だけがあって定義が無く、**見出しの地色が付かず、OKボタンが枠も地色も無い文字だけ**になっていた。
    「キャンセル」は枠付き（btn-outline-secondary）で出るため、押す側のボタンのほうが弱く見えていた。
    site.js は管理者ポータルでも読むため、両方の画面が読む custom.css に置く。
*/
.bg-light-gray {
    background-color: var(--gray-100) !important;
}

.btn-light-gray {
    background-color: var(--gray-700);
    border: 0.0625rem solid var(--gray-700);
    color: #fff;
}

    .btn-light-gray:hover {
        background-color: var(--gray-800);
        border-color: var(--gray-800);
        color: #fff;
    }

/* 本文が長いときだけ動く控えめなスクロール（幅はページ全体の指定に従う） */
.simple-scrollbar {
    overflow-y: auto;
}

.dropdown-menu {
    width: 12rem
}

.dropdown-toggle::after {
    display: none;
}

button.dropdown {
    border-radius: 0;
    background-color: white;
    width: 100%;
    display:flex;
    gap:1.25rem;
}

    button.dropdown:hover {
        background-color: var(--gray-100);
    }

/*
    選択肢を1行ずつ並べる（ラジオ・チェックの行）。

    「何を元にするか」のように、選ぶものに一言の説明が付くときに使う。
    要約のやり直しのモーダルで使い始めたが、画面固有の名前にすると
    同じ見た目を別の名前でもう一度書くことになるため、共通部品として置く。
*/
.choice-row {
    display: flex;
    gap: 0.5rem;
    align-items: flex-start;
    margin: 0;
    padding: 0.625rem 0.75rem;
    border: 0.05rem solid var(--gray-100);
    border-radius: 0.25rem;
    cursor: pointer;
}

    .choice-row + .choice-row {
        margin-top: 0.5rem;
    }

    .choice-row:hover {
        background-color: var(--gray-100);
    }

    /* つまみは1行目の文字の高さに合わせる（上下中央にすると説明の分だけ下がる） */
    .choice-row input[type="radio"] {
        margin-top: 0.25rem;
        flex: 0 0 auto;
    }

    .choice-row.is-disabled {
        opacity: 0.55;
        cursor: not-allowed;
    }

.choice-row-title {
    display: block;
    font-weight: 600;
}

.choice-row-hint {
    display: block;
    color: var(--gray-600);
    font-size: calc(0.75rem * var(--font-scale, 1));
    line-height: 1.5;
}
